diff --git a/AUTHORS b/AUTHORS index 7f0362072..a93b5355b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -4,3 +4,7 @@ This project was imagined and created by Philip Coombes in September 2002, shortly after being burglarised of his power tools. mailto:philip.coombes@zoneminder.com + +Plugin architecture and sample plugin modified for this version of ZoneMinder +with support of Stagecoach Wireless (mailto:beat.naef@stagecoach-wireless.com) +and the contributions of the CVisionLab team diff --git a/configure.ac b/configure.ac index 697a02df1..a212278fa 100644 --- a/configure.ac +++ b/configure.ac @@ -285,8 +285,10 @@ AC_CHECK_LIB(x264,x264_predict_16x16_init) AC_CHECK_LIB(avutil,av_malloc,,AC_MSG_WARN(libavutil.a may be required for MPEG streaming)) # Don't bother to warn about this one AC_CHECK_LIB(avcore,av_image_copy,,) -AC_CHECK_LIB(avcodec,avcodec_open,,AC_MSG_WARN(libavcodec.a is required for MPEG streaming)) -AC_CHECK_LIB(avformat,av_new_stream,,AC_MSG_WARN(libavformat.a is required for MPEG streaming)) +AC_CHECK_LIB(avcodec,avcodec_version,,AC_MSG_WARN(libavcodec.a is required for MPEG streaming)) +AC_CHECK_LIB(avformat,avformat_version,,AC_MSG_WARN(libavformat.a is required for MPEG streaming)) +#AC_CHECK_LIB(avcodec,avcodec_open,,AC_MSG_WARN(libavcodec.a is required for MPEG streaming)) +#AC_CHECK_LIB(avformat,av_new_stream,,AC_MSG_WARN(libavformat.a is required for MPEG streaming)) AC_CHECK_LIB(avdevice,avdevice_register_all,,AC_MSG_WARN(libavdevice.a may be required for MPEG streaming)) AC_CHECK_LIB(swscale,sws_scale,,,-lswscale) AC_CHECK_LIB(bz2,BZ2_bzCompress,,AC_MSG_WARN(zm requires libbz2.a for recent versions of ffmpeg)) diff --git a/db/zm_create.sql b/db/zm_create.sql new file mode 100644 index 000000000..fa91d3e35 --- /dev/null +++ b/db/zm_create.sql @@ -0,0 +1,934 @@ +-- MySQL dump 10.9 +-- +-- Host: localhost Database: zm +-- ------------------------------------------------------ +-- Server version 4.1.16-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `zm` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `zm`; + +USE `zm`; + +-- +-- Table structure for table `Config` +-- + +DROP TABLE IF EXISTS `Config`; +CREATE TABLE `Config` ( + `Id` smallint(5) unsigned NOT NULL default '0', + `Name` varchar(32) NOT NULL default '', + `Value` text NOT NULL, + `Type` tinytext NOT NULL, + `DefaultValue` tinytext, + `Hint` tinytext, + `Pattern` tinytext, + `Format` tinytext, + `Prompt` tinytext, + `Help` text, + `Category` varchar(32) NOT NULL default '', + `Readonly` tinyint(3) unsigned NOT NULL default '0', + `Requires` text, + PRIMARY KEY (`Name`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `ControlPresets` +-- + +DROP TABLE IF EXISTS `ControlPresets`; +CREATE TABLE `ControlPresets` ( + `MonitorId` int(10) unsigned NOT NULL default '0', + `Preset` int(10) unsigned NOT NULL default '0', + `Label` varchar(64) NOT NULL default '', + PRIMARY KEY (`MonitorId`,`Preset`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Controls` +-- + +DROP TABLE IF EXISTS `Controls`; +CREATE TABLE `Controls` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `Type` enum('Local','Remote') NOT NULL default 'Local', + `Protocol` varchar(64) default NULL, + `CanWake` tinyint(3) unsigned NOT NULL default '0', + `CanSleep` tinyint(3) unsigned NOT NULL default '0', + `CanReset` tinyint(3) unsigned NOT NULL default '0', + `CanZoom` tinyint(3) unsigned NOT NULL default '0', + `CanAutoZoom` tinyint(3) unsigned NOT NULL default '0', + `CanZoomAbs` tinyint(3) unsigned NOT NULL default '0', + `CanZoomRel` tinyint(3) unsigned NOT NULL default '0', + `CanZoomCon` tinyint(3) unsigned NOT NULL default '0', + `MinZoomRange` int(10) unsigned default NULL, + `MaxZoomRange` int(10) unsigned default NULL, + `MinZoomStep` int(10) unsigned default NULL, + `MaxZoomStep` int(10) unsigned default NULL, + `HasZoomSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinZoomSpeed` int(10) unsigned default NULL, + `MaxZoomSpeed` int(10) unsigned default NULL, + `CanFocus` tinyint(3) unsigned NOT NULL default '0', + `CanAutoFocus` tinyint(3) unsigned NOT NULL default '0', + `CanFocusAbs` tinyint(3) unsigned NOT NULL default '0', + `CanFocusRel` tinyint(3) unsigned NOT NULL default '0', + `CanFocusCon` tinyint(3) unsigned NOT NULL default '0', + `MinFocusRange` int(10) unsigned default NULL, + `MaxFocusRange` int(10) unsigned default NULL, + `MinFocusStep` int(10) unsigned default NULL, + `MaxFocusStep` int(10) unsigned default NULL, + `HasFocusSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinFocusSpeed` int(10) unsigned default NULL, + `MaxFocusSpeed` int(10) unsigned default NULL, + `CanIris` tinyint(3) unsigned NOT NULL default '0', + `CanAutoIris` tinyint(3) unsigned NOT NULL default '0', + `CanIrisAbs` tinyint(3) unsigned NOT NULL default '0', + `CanIrisRel` tinyint(3) unsigned NOT NULL default '0', + `CanIrisCon` tinyint(3) unsigned NOT NULL default '0', + `MinIrisRange` int(10) unsigned default NULL, + `MaxIrisRange` int(10) unsigned default NULL, + `MinIrisStep` int(10) unsigned default NULL, + `MaxIrisStep` int(10) unsigned default NULL, + `HasIrisSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinIrisSpeed` int(10) unsigned default NULL, + `MaxIrisSpeed` int(10) unsigned default NULL, + `CanGain` tinyint(3) unsigned NOT NULL default '0', + `CanAutoGain` tinyint(3) unsigned NOT NULL default '0', + `CanGainAbs` tinyint(3) unsigned NOT NULL default '0', + `CanGainRel` tinyint(3) unsigned NOT NULL default '0', + `CanGainCon` tinyint(3) unsigned NOT NULL default '0', + `MinGainRange` int(10) unsigned default NULL, + `MaxGainRange` int(10) unsigned default NULL, + `MinGainStep` int(10) unsigned default NULL, + `MaxGainStep` int(10) unsigned default NULL, + `HasGainSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinGainSpeed` int(10) unsigned default NULL, + `MaxGainSpeed` int(10) unsigned default NULL, + `CanWhite` tinyint(3) unsigned NOT NULL default '0', + `CanAutoWhite` tinyint(3) unsigned NOT NULL default '0', + `CanWhiteAbs` tinyint(3) unsigned NOT NULL default '0', + `CanWhiteRel` tinyint(3) unsigned NOT NULL default '0', + `CanWhiteCon` tinyint(3) unsigned NOT NULL default '0', + `MinWhiteRange` int(10) unsigned default NULL, + `MaxWhiteRange` int(10) unsigned default NULL, + `MinWhiteStep` int(10) unsigned default NULL, + `MaxWhiteStep` int(10) unsigned default NULL, + `HasWhiteSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinWhiteSpeed` int(10) unsigned default NULL, + `MaxWhiteSpeed` int(10) unsigned default NULL, + `HasPresets` tinyint(3) unsigned NOT NULL default '0', + `NumPresets` tinyint(3) unsigned NOT NULL default '0', + `HasHomePreset` tinyint(3) unsigned NOT NULL default '0', + `CanSetPresets` tinyint(3) unsigned NOT NULL default '0', + `CanMove` tinyint(3) unsigned NOT NULL default '0', + `CanMoveDiag` tinyint(3) unsigned NOT NULL default '0', + `CanMoveMap` tinyint(3) unsigned NOT NULL default '0', + `CanMoveAbs` tinyint(3) unsigned NOT NULL default '0', + `CanMoveRel` tinyint(3) unsigned NOT NULL default '0', + `CanMoveCon` tinyint(3) unsigned NOT NULL default '0', + `CanPan` tinyint(3) unsigned NOT NULL default '0', + `MinPanRange` int(10) default NULL, + `MaxPanRange` int(10) default NULL, + `MinPanStep` int(10) default NULL, + `MaxPanStep` int(10) default NULL, + `HasPanSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinPanSpeed` int(10) default NULL, + `MaxPanSpeed` int(10) default NULL, + `HasTurboPan` tinyint(3) unsigned NOT NULL default '0', + `TurboPanSpeed` int(10) default NULL, + `CanTilt` tinyint(3) unsigned NOT NULL default '0', + `MinTiltRange` int(10) default NULL, + `MaxTiltRange` int(10) default NULL, + `MinTiltStep` int(10) default NULL, + `MaxTiltStep` int(10) default NULL, + `HasTiltSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinTiltSpeed` int(10) default NULL, + `MaxTiltSpeed` int(10) default NULL, + `HasTurboTilt` tinyint(3) unsigned NOT NULL default '0', + `TurboTiltSpeed` int(10) default NULL, + `CanAutoScan` tinyint(3) unsigned NOT NULL default '0', + `NumScanPaths` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`Id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Devices` +-- + +DROP TABLE IF EXISTS `Devices`; +CREATE TABLE `Devices` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` tinytext NOT NULL, + `Type` enum('X10') NOT NULL default 'X10', + `KeyString` varchar(32) NOT NULL default '', + PRIMARY KEY (`Id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Events` +-- + +DROP TABLE IF EXISTS `Events`; +CREATE TABLE `Events` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `MonitorId` int(10) unsigned NOT NULL default '0', + `Name` varchar(64) NOT NULL default '', + `Cause` varchar(32) NOT NULL default '', + `StartTime` datetime default NULL, + `EndTime` datetime default NULL, + `Width` smallint(5) unsigned NOT NULL default '0', + `Height` smallint(5) unsigned NOT NULL default '0', + `Length` decimal(10,2) NOT NULL default '0.00', + `Frames` int(10) unsigned default NULL, + `AlarmFrames` int(10) unsigned default NULL, + `TotScore` int(10) unsigned NOT NULL default '0', + `AvgScore` smallint(5) unsigned default '0', + `MaxScore` smallint(5) unsigned default '0', + `Archived` tinyint(3) unsigned NOT NULL default '0', + `Videoed` tinyint(3) unsigned NOT NULL default '0', + `Uploaded` tinyint(3) unsigned NOT NULL default '0', + `Emailed` tinyint(3) unsigned NOT NULL default '0', + `Messaged` tinyint(3) unsigned NOT NULL default '0', + `Executed` tinyint(3) unsigned NOT NULL default '0', + `Notes` text, + PRIMARY KEY (`Id`,`MonitorId`), + KEY `MonitorId` (`MonitorId`), + KEY `StartTime` (`StartTime`), + KEY `Frames` (`Frames`), + KEY `Archived` (`Archived`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Filters` +-- + +DROP TABLE IF EXISTS `Filters`; +CREATE TABLE `Filters` ( + `Name` varchar(64) NOT NULL default '', + `Query` text NOT NULL, + `AutoArchive` tinyint(3) unsigned NOT NULL default '0', + `AutoVideo` tinyint(3) unsigned NOT NULL default '0', + `AutoUpload` tinyint(3) unsigned NOT NULL default '0', + `AutoEmail` tinyint(3) unsigned NOT NULL default '0', + `AutoMessage` tinyint(3) unsigned NOT NULL default '0', + `AutoExecute` tinyint(3) unsigned NOT NULL default '0', + `AutoExecuteCmd` tinytext, + `AutoDelete` tinyint(3) unsigned NOT NULL default '0', + `Background` tinyint(1) unsigned NOT NULL default '0', + PRIMARY KEY (`Name`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Frames` +-- + +DROP TABLE IF EXISTS `Frames`; +CREATE TABLE `Frames` ( + `EventId` int(10) unsigned NOT NULL default '0', + `FrameId` int(10) unsigned NOT NULL default '0', + `Type` enum('Normal','Bulk','Alarm') NOT NULL default 'Normal', + `TimeStamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, + `Delta` decimal(8,2) NOT NULL default '0.00', + `Score` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`EventId`,`FrameId`), + KEY `Type` (`Type`), + KEY `TimeStamp` (`TimeStamp`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Groups` +-- + +DROP TABLE IF EXISTS `Groups`; +CREATE TABLE `Groups` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `MonitorIds` tinytext NOT NULL, + PRIMARY KEY (`Id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Logs` +-- +CREATE TABLE `Logs` ( + `TimeKey` decimal(16,6) NOT NULL, + `Component` varchar(32) NOT NULL, + `Pid` smallint(6) DEFAULT NULL, + `Level` tinyint(3) NOT NULL, + `Code` char(3) NOT NULL, + `Message` varchar(255) NOT NULL, + `File` varchar(255) DEFAULT NULL, + `Line` smallint(5) unsigned DEFAULT NULL, + KEY `TimeKey` (`TimeKey`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `MonitorPresets` +-- + +DROP TABLE IF EXISTS `MonitorPresets`; +CREATE TABLE `MonitorPresets` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `Type` enum('Local','Remote','File','Ffmpeg') NOT NULL default 'Local', + `Device` tinytext, + `Channel` tinyint(3) unsigned default NULL, + `Format` int(10) unsigned default NULL, + `Protocol` varchar(16) default NULL, + `Method` varchar(16) default NULL, + `Host` varchar(64) default NULL, + `Port` varchar(8) default NULL, + `Path` varchar(255) default NULL, + `SubPath` varchar(64) default NULL, + `Width` smallint(5) unsigned default NULL, + `Height` smallint(5) unsigned default NULL, + `Palette` int(10) unsigned default NULL, + `MaxFPS` decimal(5,2) default NULL, + `Controllable` tinyint(3) unsigned NOT NULL default '0', + `ControlId` varchar(16) default NULL, + `ControlDevice` varchar(255) default NULL, + `ControlAddress` varchar(255) default NULL, + `DefaultRate` smallint(5) unsigned NOT NULL default '100', + `DefaultScale` smallint(5) unsigned NOT NULL default '100', + PRIMARY KEY (`Id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Monitors` +-- + +DROP TABLE IF EXISTS `Monitors`; +CREATE TABLE `Monitors` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `Type` enum('Local','Remote','File','Ffmpeg') NOT NULL default 'Local', + `Function` enum('None','Monitor','Modect','Record','Mocord','Nodect') NOT NULL default 'Monitor', + `Enabled` tinyint(3) unsigned NOT NULL default '1', + `LinkedMonitors` varchar(255) NOT NULL default '', + `Triggers` set('X10') NOT NULL default '', + `Device` varchar(64) NOT NULL default '', + `Channel` tinyint(3) unsigned NOT NULL default '0', + `Format` int(10) unsigned NOT NULL default '0', + `Protocol` varchar(16) NOT NULL default '', + `Method` varchar(16) NOT NULL default '', + `Host` varchar(64) NOT NULL default '', + `Port` varchar(8) NOT NULL default '', + `SubPath` varchar(64) NOT NULL default '', + `Path` varchar(255) NOT NULL default '', + `Width` smallint(5) unsigned NOT NULL default '0', + `Height` smallint(5) unsigned NOT NULL default '0', + `Colours` tinyint(3) unsigned NOT NULL default '1', + `Palette` int(10) unsigned NOT NULL default '0', + `Orientation` enum('0','90','180','270','hori','vert') NOT NULL default '0', + `Deinterlacing` int(10) unsigned NOT NULL default '0', + `Brightness` mediumint(7) NOT NULL default '-1', + `Contrast` mediumint(7) NOT NULL default '-1', + `Hue` mediumint(7) NOT NULL default '-1', + `Colour` mediumint(7) NOT NULL default '-1', + `EventPrefix` varchar(32) NOT NULL default 'Event-', + `LabelFormat` varchar(64) NOT NULL default '%N - %y/%m/%d %H:%M:%S', + `LabelX` smallint(5) unsigned NOT NULL default '0', + `LabelY` smallint(5) unsigned NOT NULL default '0', + `ImageBufferCount` smallint(5) unsigned NOT NULL default '100', + `WarmupCount` smallint(5) unsigned NOT NULL default '25', + `PreEventCount` smallint(5) unsigned NOT NULL default '10', + `PostEventCount` smallint(5) unsigned NOT NULL default '10', + `StreamReplayBuffer` int(10) unsigned NOT NULL default '1000', + `AlarmFrameCount` smallint(5) unsigned NOT NULL default '1', + `SectionLength` int(10) unsigned NOT NULL default '600', + `FrameSkip` smallint(5) unsigned NOT NULL default '0', + `MaxFPS` decimal(5,2) default NULL, + `AlarmMaxFPS` decimal(5,2) default NULL, + `FPSReportInterval` smallint(5) unsigned NOT NULL default '250', + `RefBlendPerc` tinyint(3) unsigned NOT NULL default '10', + `Controllable` tinyint(3) unsigned NOT NULL default '0', + `ControlId` int(10) unsigned NOT NULL default '0', + `ControlDevice` varchar(255) default NULL, + `ControlAddress` varchar(255) default NULL, + `AutoStopTimeout` decimal(5,2) default NULL, + `TrackMotion` tinyint(3) unsigned NOT NULL default '0', + `TrackDelay` smallint(5) unsigned NOT NULL default '0', + `ReturnLocation` tinyint(3) NOT NULL default '-1', + `ReturnDelay` smallint(5) unsigned NOT NULL default '0', + `DefaultView` enum('Events','Control') NOT NULL default 'Events', + `DefaultRate` smallint(5) unsigned NOT NULL default '100', + `DefaultScale` smallint(5) unsigned NOT NULL default '100', + `SignalCheckColour` varchar(32) NOT NULL default '#0000BE', + `WebColour` varchar(32) NOT NULL default 'red', + `Sequence` smallint(5) unsigned default NULL, + `UsedPl` varchar(88) NOT NULL default '', + `DoNativeMotDet` tinyint(3) unsigned NOT NULL default '1', + PRIMARY KEY (`Id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `PluginsConfig` +-- + +DROP TABLE IF EXISTS `PluginsConfig`; +CREATE TABLE `PluginsConfig` ( + `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `Name` varchar(32) NOT NULL DEFAULT '', + `Value` text NOT NULL, + `Type` tinytext NOT NULL, + `Choices` text NOT NULL, + `MonitorId` int(10) unsigned NOT NULL, + `ZoneId` int(10) unsigned NOT NULL, + `pluginName` tinytext NOT NULL, + PRIMARY KEY (`Id`), + KEY `ZoneId` (`ZoneId`), + KEY `MonitorId` (`MonitorId`), + KEY `Name` (`Name`), + FULLTEXT KEY `pluginName` (`pluginName`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; + + +-- +-- Table structure for table `States` +-- + +DROP TABLE IF EXISTS `States`; +CREATE TABLE `States` ( + `Name` varchar(64) NOT NULL default '', + `Definition` text NOT NULL, + PRIMARY KEY (`Name`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Stats` +-- + +DROP TABLE IF EXISTS `Stats`; +CREATE TABLE `Stats` ( + `MonitorId` int(10) unsigned NOT NULL default '0', + `ZoneId` int(10) unsigned NOT NULL default '0', + `EventId` int(10) unsigned NOT NULL default '0', + `FrameId` int(10) unsigned NOT NULL default '0', + `PixelDiff` tinyint(3) unsigned NOT NULL default '0', + `AlarmPixels` int(10) unsigned NOT NULL default '0', + `FilterPixels` int(10) unsigned NOT NULL default '0', + `BlobPixels` int(10) unsigned NOT NULL default '0', + `Blobs` smallint(5) unsigned NOT NULL default '0', + `MinBlobSize` int(10) unsigned NOT NULL default '0', + `MaxBlobSize` int(10) unsigned NOT NULL default '0', + `MinX` smallint(5) unsigned NOT NULL default '0', + `MaxX` smallint(5) unsigned NOT NULL default '0', + `MinY` smallint(5) unsigned NOT NULL default '0', + `MaxY` smallint(5) unsigned NOT NULL default '0', + `Score` smallint(5) unsigned NOT NULL default '0', + KEY `EventId` (`EventId`), + KEY `MonitorId` (`MonitorId`), + KEY `ZoneId` (`ZoneId`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `TriggersX10` +-- + +DROP TABLE IF EXISTS `TriggersX10`; +CREATE TABLE `TriggersX10` ( + `MonitorId` int(10) unsigned NOT NULL default '0', + `Activation` varchar(32) default NULL, + `AlarmInput` varchar(32) default NULL, + `AlarmOutput` varchar(32) default NULL, + PRIMARY KEY (`MonitorId`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Users` +-- + +DROP TABLE IF EXISTS `Users`; +CREATE TABLE `Users` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Username` varchar(32) character set latin1 collate latin1_bin NOT NULL default '', + `Password` varchar(64) NOT NULL default '', + `Language` varchar(8) NOT NULL default '', + `Enabled` tinyint(3) unsigned NOT NULL default '1', + `Stream` enum('None','View') NOT NULL default 'None', + `Events` enum('None','View','Edit') NOT NULL default 'None', + `Control` enum('None','View','Edit') NOT NULL default 'None', + `Monitors` enum('None','View','Edit') NOT NULL default 'None', + `Devices` enum('None','View','Edit') NOT NULL default 'None', + `System` enum('None','View','Edit') NOT NULL default 'None', + `MaxBandwidth` varchar(16) NOT NULL default '', + `MonitorIds` tinytext NOT NULL, + PRIMARY KEY (`Id`), + UNIQUE KEY `UC_Username` (`Username`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `ZonePresets` +-- + +DROP TABLE IF EXISTS `ZonePresets`; +CREATE TABLE `ZonePresets` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `Type` enum('Active','Inclusive','Exclusive','Preclusive','Inactive') NOT NULL default 'Active', + `Units` enum('Pixels','Percent') NOT NULL default 'Pixels', + `CheckMethod` enum('AlarmedPixels','FilteredPixels','Blobs') NOT NULL default 'Blobs', + `MinPixelThreshold` smallint(5) unsigned default NULL, + `MaxPixelThreshold` smallint(5) unsigned default NULL, + `MinAlarmPixels` int(10) unsigned default NULL, + `MaxAlarmPixels` int(10) unsigned default NULL, + `FilterX` tinyint(3) unsigned default NULL, + `FilterY` tinyint(3) unsigned default NULL, + `MinFilterPixels` int(10) unsigned default NULL, + `MaxFilterPixels` int(10) unsigned default NULL, + `MinBlobPixels` int(10) unsigned default NULL, + `MaxBlobPixels` int(10) unsigned default NULL, + `MinBlobs` smallint(5) unsigned default NULL, + `MaxBlobs` smallint(5) unsigned default NULL, + `OverloadFrames` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`Id`) +) ENGINE=MyISAM; + +-- +-- Table structure for table `Zones` +-- + +DROP TABLE IF EXISTS `Zones`; +CREATE TABLE `Zones` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `MonitorId` int(10) unsigned NOT NULL default '0', + `Name` varchar(64) NOT NULL default '', + `Type` enum('Active','Inclusive','Exclusive','Preclusive','Inactive') NOT NULL default 'Active', + `Units` enum('Pixels','Percent') NOT NULL default 'Pixels', + `NumCoords` tinyint(3) unsigned NOT NULL default '0', + `Coords` tinytext NOT NULL, + `Area` int(10) unsigned NOT NULL default '0', + `AlarmRGB` int(10) unsigned default '0', + `CheckMethod` enum('AlarmedPixels','FilteredPixels','Blobs') NOT NULL default 'Blobs', + `MinPixelThreshold` smallint(5) unsigned default NULL, + `MaxPixelThreshold` smallint(5) unsigned default NULL, + `MinAlarmPixels` int(10) unsigned default NULL, + `MaxAlarmPixels` int(10) unsigned default NULL, + `FilterX` tinyint(3) unsigned default NULL, + `FilterY` tinyint(3) unsigned default NULL, + `MinFilterPixels` int(10) unsigned default NULL, + `MaxFilterPixels` int(10) unsigned default NULL, + `MinBlobPixels` int(10) unsigned default NULL, + `MaxBlobPixels` int(10) unsigned default NULL, + `MinBlobs` smallint(5) unsigned default NULL, + `MaxBlobs` smallint(5) unsigned default NULL, + `OverloadFrames` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`Id`), + KEY `MonitorId` (`MonitorId`) +) ENGINE=MyISAM; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- +-- Initial data to be loaded into ZoneMinder database +-- + +-- +-- Create a default admin user. +-- +insert into Users values ('','admin',password('admin'),'',1,'View','Edit','Edit','Edit','Edit','Edit','',''); + +-- +-- Add a sample filter to purge the oldest 5 events when the disk is 95% full, delete is disabled though +-- +insert into Filters values ('PurgeWhenFull','{"sort_field":"Id","terms":[{"val":0,"attr":"Archived","op":"="},{"cnj":"and","val":95,"attr":"DiskPercent","op":">="}],"limit":5,"sort_asc":1}',0,0,0,0,0,0,'',1,0); + +-- +-- Add in some sample control protocol definitions +-- +insert into Controls values (1,'Pelco-D','Local','PelcoD',1,1,0,1,1,0,0,1,NULL,NULL,NULL,NULL,1,0,3,1,1,0,0,1,NULL,NULL,NULL,NULL,0,NULL,NULL,1,1,0,1,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,1,0,1,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,20,1,1,1,1,0,0,0,1,1,NULL,NULL,NULL,NULL,1,0,63,1,254,1,NULL,NULL,NULL,NULL,1,0,63,1,254,0,0); +insert into Controls values (2,'Pelco-P','Local','PelcoP',1,1,0,1,1,0,0,1,NULL,NULL,NULL,NULL,1,0,3,1,1,0,0,1,NULL,NULL,NULL,NULL,0,NULL,NULL,1,1,0,1,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,1,0,1,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,20,1,1,1,1,0,0,0,1,1,NULL,NULL,NULL,NULL,1,0,63,1,254,1,NULL,NULL,NULL,NULL,1,0,63,1,254,0,0); +insert into Controls values (3,'Sony VISCA','Local','Visca',1,1,0,1,0,0,0,1,0,16384,10,4000,1,1,6,1,1,1,0,1,0,1536,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,3,1,1,1,1,0,1,1,0,1,-15578,15578,100,10000,1,1,50,1,254,1,-7789,7789,100,5000,1,1,50,1,254,0,0); +INSERT INTO Controls VALUES (4,'Axis API v2','Remote','AxisV2',0,0,0,1,0,0,1,0,0,9999,10,2500,0,NULL,NULL,1,1,0,1,0,0,9999,10,2500,0,NULL,NULL,1,1,0,1,0,0,9999,10,2500,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,12,1,1,1,1,1,0,1,0,1,-360,360,1,90,0,NULL,NULL,0,NULL,1,-360,360,1,90,0,NULL,NULL,0,NULL,0,0); +insert into Controls values (5,'Panasonic IP','Remote','PanasonicIP',0,0,0,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,8,1,1,1,0,1,0,0,1,1,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,1,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,0,0); +insert into Controls values (6,'Neu-Fusion NCS370','Remote','Ncs370',0,0,0,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,24,1,0,1,1,0,0,0,1,1,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,1,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,0,0); + +-- +-- Add some monitor preset values +-- +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, mpjpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&req_fps=5',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, mpjpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=5',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, mpjpeg, B&W','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&color=0',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, mpjpeg, B&W','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&color=0',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 320x240, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240',NULL,320,240,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 320x240, mpjpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&req_fps=5',NULL,320,240,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 320x240, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 320x240, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,5.0,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 640x480, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480',NULL,640,480,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 640x480, mpjpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=5',NULL,640,480,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 640x480, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 640x480, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,5.0,1,4,NULL,':',100,100); +INSERT into MonitorPresets VALUES ('','Axis IP, mpeg4, unicast','Remote',NULL,NULL,NULL,'rtsp','rtpUni','',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT into MonitorPresets VALUES ('','Axis IP, mpeg4, multicast','Remote',NULL,NULL,NULL,'rtsp','rtpMulti','',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT into MonitorPresets VALUES ('','Axis IP, mpeg4, RTP/RTSP','Remote',NULL,NULL,NULL,'rtsp','rtpRtsp','',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT into MonitorPresets VALUES ('','Axis IP, mpeg4, RTP/RTSP/HTTP','Remote',NULL,NULL,NULL,'rtsp','rtpRtspHttp','',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 320x240, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/nphMotionJpeg?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 320x240, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 320x240, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 640x480, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/nphMotionJpeg?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 640x480, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 640x480, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 320x240, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/nphMotionJpeg?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 320x240, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 320x240, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,5.0,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 640x480, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/nphMotionJpeg?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 640x480, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 640x480, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,5.0,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Gadspot IP, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Gadspot IP, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Gadspot IP, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/GetData.cgi',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Gadspot IP, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','VEO Observer, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Blue Net Video Server, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/cgi-bin/image.cgi?control=0&id=admin&passwd=admin',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT into MonitorPresets VALUES ('','ACTi IP, mpeg4, unicast','Remote',NULL,NULL,NULL,'rtsp','rtpUni','',7070,'','/track',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp:///axis-media/media.amp?videocodec=h264',NULL,NULL,NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Vivotek FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://:554/live.sdp',NULL,NULL,NULL,352,240,NULL,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp:///axis-media/media.amp',NULL,NULL,NULL,640,480,NULL,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','ACTi TCM FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://admin:123456@:7070',NULL,NULL,NULL,320,240,NULL,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), PAL, 320x240','Local','/dev/video','',255,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), PAL, 320x240, max 5 FPS','Local','/dev/video','',255,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), PAL, 640x480','Local','/dev/video','',255,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), PAL, 640x480, max 5 FPS','Local','/dev/video','',255,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), NTSC, 320x240','Local','/dev/video','',45056,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), NTSC, 320x240, max 5 FPS','Local','/dev/video','',45056,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), NTSC, 640x480','Local','/dev/video','',45056,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), NTSC, 640x480, max 5 FPS','Local','/dev/video','',45056,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), PAL, 320x240','Local','/dev/video','',0,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), PAL, 320x240, max 5 FPS','Local','/dev/video','',0,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), PAL, 640x480','Local','/dev/video','',0,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), PAL, 640x480, max 5 FPS','Local','/dev/video','',0,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), NTSC, 320x240','Local','/dev/video','',1,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), NTSC, 320x240, max 5 FPS','Local','/dev/video','',1,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), NTSC, 640x480','Local','/dev/video','',1,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), NTSC, 640x480, max 5 FPS','Local','/dev/video','',1,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Remote ZoneMinder','Remote',NULL,NULL,NULL,'http','simple','',80,'/cgi-bin/nph-zms?mode=jpeg&monitor=&scale=100&maxfps=5&buffer=0',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); + +-- +-- Add some zone preset values +-- +INSERT INTO ZonePresets VALUES (1,'Fast, low sensitivity','Active','Percent','AlarmedPixels',60,NULL,20,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO ZonePresets VALUES (2,'Fast, medium sensitivity','Active','Percent','AlarmedPixels',40,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO ZonePresets VALUES (3,'Fast, high sensitivity','Active','Percent','AlarmedPixels',20,NULL,5,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO ZonePresets VALUES (4,'Best, low sensitivity','Active','Percent','Blobs',60,NULL,36,NULL,7,7,24,NULL,20,NULL,1,NULL,0); +INSERT INTO ZonePresets VALUES (5,'Best, medium sensitivity','Active','Percent','Blobs',40,NULL,16,NULL,5,5,12,NULL,10,NULL,1,NULL,0); +INSERT INTO ZonePresets VALUES (6,'Best, high sensitivity','Active','Percent','Blobs',20,NULL,8,NULL,3,3,6,NULL,5,NULL,1,NULL,0); + +-- +-- Apply the initial configuration +-- +-- This section is autogenerated by zmconfgen.pl +-- Do not edit this file as any changes will be overwritten +-- + +delete from Config; + +insert into Config set Id = 0, Name = 'ZM_LANG_DEFAULT', Value = 'en_gb', Type = 'string', DefaultValue = 'en_gb', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Default language used by web interface', Help = 'ZoneMinder allows the web interface to use languages other than English if the appropriate language file has been created and is present. This option allows you to change the default language that is used from the shipped language, British English, to another language', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 1, Name = 'ZM_OPT_USE_AUTH', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Authenticate user logins to ZoneMinder', Help = 'ZoneMinder can run in two modes. The simplest is an entirely unauthenticated mode where anyone can access ZoneMinder and perform all tasks. This is most suitable for installations where the web server access is limited in other ways. The other mode enables user accounts with varying sets of permissions. Users must login or authenticate to access ZoneMinder and are limited by their defined permissions.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 2, Name = 'ZM_AUTH_TYPE', Value = 'builtin', Type = 'string', DefaultValue = 'builtin', Hint = 'builtin|remote', Pattern = '(?^i:^([br]))', Format = ' $1 =~ /^b/ ? \"builtin\" : \"remote\" ', Prompt = 'What is used to authenticate ZoneMinder users', Help = 'ZoneMinder can use two methods to authenticate users when running in authenticated mode. The first is a builtin method where ZoneMinder provides facilities for users to log in and maintains track of their identity. The second method allows interworking with other methods such as http basic authentication which passes an independently authentication \'remote\' user via http. In this case ZoneMinder would use the supplied user without additional authentication provided such a user is configured ion ZoneMinder.', Category = 'system', Readonly = '0', Requires = 'ZM_OPT_USE_AUTH=1'; +insert into Config set Id = 3, Name = 'ZM_AUTH_RELAY', Value = 'hashed', Type = 'string', DefaultValue = 'hashed', Hint = 'hashed|plain|none', Pattern = '(?^i:^([hpn]))', Format = ' ($1 =~ /^h/) ? \"hashed\" : ($1 =~ /^p/ ? \"plain\" : \"none\" ) ', Prompt = 'Method used to relay authentication information', Help = 'When ZoneMinder is running in authenticated mode it can pass user details between the web pages and the back end processes. There are two methods for doing this. This first is to use a time limited hashed string which contains no direct username or password details, the second method is to pass the username and passwords around in plaintext. This method is not recommend except where you do not have the md5 libraries available on your system or you have a completely isolated system with no external access. You can also switch off authentication relaying if your system is isolated in other ways.', Category = 'system', Readonly = '0', Requires = 'ZM_OPT_USE_AUTH=1'; +insert into Config set Id = 4, Name = 'ZM_AUTH_HASH_SECRET', Value = '...Change me to something unique...', Type = 'string', DefaultValue = '...Change me to something unique...', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Secret for encoding hashed authentication information', Help = 'When ZoneMinder is running in hashed authenticated mode it is necessary to generate hashed strings containing encrypted sensitive information such as usernames and password. Although these string are reasonably secure the addition of a random secret increases security substantially.', Category = 'system', Readonly = '0', Requires = 'ZM_OPT_USE_AUTH=1;ZM_AUTH_RELAY=hashed'; +insert into Config set Id = 5, Name = 'ZM_AUTH_HASH_IPS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Include IP addresses in the authentication hash', Help = 'When ZoneMinder is running in hashed authenticated mode it can optionally include the requesting IP address in the resultant hash. This adds an extra level of security as only requests from that address may use that authentication key. However in some circumstances, such as access over mobile networks, the requesting address can change for each request which will cause most requests to fail. This option allows you to control whether IP addresses are included in the authentication hash on your system. If you experience intermitent problems with authentication, switching this option off may help.', Category = 'system', Readonly = '0', Requires = 'ZM_OPT_USE_AUTH=1;ZM_AUTH_RELAY=hashed'; +insert into Config set Id = 6, Name = 'ZM_AUTH_HASH_LOGINS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Allow login by authentication hash', Help = 'The normal process for logging into ZoneMinder is via the login screen with username and password. In some circumstances it may be desirable to allow access directly to one or more pages, for instance from a third party application. If this option is enabled then adding an \'auth\' parameter to any request will include a shortcut login bypassing the login screen, if not already logged in. As authentication hashes are time and, optionally, IP limited this can allow short-term access to ZoneMinder screens from other web pages etc. In order to use this the calling application will hae to generate the authentication hash itself and ensure it is valid. If you use this option you should ensure that you have modified the ZM_AUTH_HASH_SECRET to somethign unique to your system.', Category = 'system', Readonly = '0', Requires = 'ZM_OPT_USE_AUTH=1;ZM_AUTH_RELAY=hashed'; +insert into Config set Id = 7, Name = 'ZM_DIR_EVENTS', Value = 'events', Type = 'string', DefaultValue = 'events', Hint = 'directory', Pattern = '(?^:^([a-zA-Z0-9-_.]+)$)', Format = ' $1 ', Prompt = 'Directory where events are stored', Help = 'This is the path to the events directory where all the event images and other miscellaneous files are stored. It is normally given as a subdirectory of the web directory you have specified earlier however if disk space is tight it can reside on another partition in which case you should create a link from that area to the path you give here.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 8, Name = 'ZM_USE_DEEP_STORAGE', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Use a deep filesystem hierarchy for events', Help = 'Traditionally ZoneMinder stores all events for a monitor in one directory for that monitor. This is simple and efficient except when you have very large amounts of events. Some filesystems are unable to store more than 32k files in one directory and even without this limitation, large numbers of files in a directory can slow creation and deletion of files. This option allows you to select an alternate method of storing events by year/month/day/hour/min/second which has the effect of separating events out into more directories, resulting in less per directory, and also making it easier to manually navigate to any events that may have happened at a particular time or date.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 9, Name = 'ZM_DIR_IMAGES', Value = 'images', Type = 'string', DefaultValue = 'images', Hint = 'directory', Pattern = '(?^:^([a-zA-Z0-9-_.]+)$)', Format = ' $1 ', Prompt = 'Directory where the images that the ZoneMinder client generates are stored', Help = 'ZoneMinder generates a myriad of images, mosty of which are associated with events. For those that aren\'t this is where they go.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 10, Name = 'ZM_DIR_SOUNDS', Value = 'sounds', Type = 'string', DefaultValue = 'sounds', Hint = 'directory', Pattern = '(?^:^([a-zA-Z0-9-_.]+)$)', Format = ' $1 ', Prompt = 'Directory to the sounds that the ZoneMinder client can use', Help = 'ZoneMinder can optionally play a sound file when an alarm is detected. This indicates where (relative to the web root) to look for this file.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 11, Name = 'ZM_PATH_ZMS', Value = '/cgi-bin/nph-zms', Type = 'string', DefaultValue = '/cgi-bin/nph-zms', Hint = 'relative/path/to/somewhere', Pattern = '(?^:^((?:[^/].*)?)/?$)', Format = ' $1 ', Prompt = 'Web path to zms streaming server', Help = 'The ZoneMinder streaming server is required to send streamed images to your browser. It will be installed into the cgi-bin path given at configuration time. This option determines what the web path to the server is rather than the local path on your machine. Ordinarily the streaming server runs in parser-header mode however if you experience problems with streaming you can change this to non-parsed-header (nph) mode by changing \'zms\' to \'nph-zms\'.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 12, Name = 'ZM_COLOUR_JPEG_FILES', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Colourise greyscale JPEG files', Help = 'Cameras that capture in greyscale can write their captured images to jpeg files with a corresponding greyscale colour space. This saves a small amount of disk space over colour ones. However some tools such as ffmpeg either fail to work with this colour space or have to convert it beforehand. Setting this option to yes uses up a little more space but makes creation of MPEG files much faster.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 13, Name = 'ZM_ADD_JPEG_COMMENTS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Add jpeg timestamp annotations as file header comments', Help = 'JPEG files may have a number of extra fields added to the file header. The comment field may have any kind of text added. This options allows you to have the same text that is used to annotate the image additionally included as a file header comment. If you archive event images to other locations this may help you locate images for particular events or times if you use software that can read comment headers.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 14, Name = 'ZM_JPEG_FILE_QUALITY', Value = '70', Type = 'integer', DefaultValue = '70', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Set the JPEG quality setting for the saved event files (1-100)', Help = 'When ZoneMinder detects an event it will save the images associated with that event to files. These files are in the JPEG format and can be viewed or streamed later. This option specifies what image quality should be used to save these files. A higher number means better quality but less compression so will take up more disk space and take longer to view over a slow connection. By contrast a low number means smaller, quicker to view, files but at the price of lower quality images. This setting applies to all images written except if the capture image has caused an alarm and the alarm file quality option is set at a higher value when that is used instead.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 15, Name = 'ZM_JPEG_ALARM_FILE_QUALITY', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Set the JPEG quality setting for the saved event files during an alarm (1-100)', Help = 'This value is equivalent to the regular jpeg file quality setting above except that it only applies to images saved while in an alarm state and then only if this value is set to a higher quality setting than the ordinary file setting. If set to a lower value then it is ignored. Thus leaving it at the default of 0 effectively means to use the regular file quality setting for all saved images. This is to prevent acccidentally saving important images at a worse quality setting.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 16, Name = 'ZM_JPEG_IMAGE_QUALITY', Value = '70', Type = 'integer', DefaultValue = '70', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Set the JPEG quality setting for the streamed \'live\' images (1-100)', Help = 'When viewing a \'live\' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.', Category = 'hidden', Readonly = '0', Requires = ''; +insert into Config set Id = 17, Name = 'ZM_JPEG_STREAM_QUALITY', Value = '70', Type = 'integer', DefaultValue = '70', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Set the JPEG quality setting for the streamed \'live\' images (1-100)', Help = 'When viewing a \'live\' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 18, Name = 'ZM_MPEG_TIMED_FRAMES', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Tag video frames with a timestamp for more realistic streaming', Help = 'When using streamed MPEG based video, either for live monitor streams or events, ZoneMinder can send the streams in two ways. If this option is selected then the timestamp for each frame, taken from it\'s capture time, is included in the stream. This means that where the frame rate varies, for instance around an alarm, the stream will still maintain it\'s \'real\' timing. If this option is not selected then an approximate frame rate is calculated and that is used to schedule frames instead. This option should be selected unless you encounter problems with your preferred streaming method.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 19, Name = 'ZM_MPEG_LIVE_FORMAT', Value = 'swf', Type = 'string', DefaultValue = 'swf', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'What format \'live\' video streams are played in', Help = 'When using MPEG mode ZoneMinder can output live video. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of \'asf\' works well under Windows with Windows Media Player but I\'m currently not sure what, if anything, works on a Linux platform. If you find out please let me know! If this option is left blank then live streams will revert to being in motion jpeg format', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 20, Name = 'ZM_MPEG_REPLAY_FORMAT', Value = 'swf', Type = 'string', DefaultValue = 'swf', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'What format \'replay\' video streams are played in', Help = 'When using MPEG mode ZoneMinder can replay events in encoded video format. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of \'asf\' works well under Windows with Windows Media Player and \'mpg\', or \'avi\' etc should work under Linux. If you know any more then please let me know! If this option is left blank then live streams will revert to being in motion jpeg format', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 21, Name = 'ZM_RAND_STREAM', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Add a random string to prevent caching of streams', Help = 'Some browsers can cache the streams used by ZoneMinder. In order to prevent his a harmless random string can be appended to the url to make each invocation of the stream appear unique.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 22, Name = 'ZM_OPT_CAMBOZOLA', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Is the (optional) cambozola java streaming client installed', Help = 'Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don\'t natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 23, Name = 'ZM_PATH_CAMBOZOLA', Value = 'cambozola.jar', Type = 'string', DefaultValue = 'cambozola.jar', Hint = 'relative/path/to/somewhere', Pattern = '(?^:^((?:[^/].*)?)/?$)', Format = ' $1 ', Prompt = 'Web path to (optional) cambozola java streaming client', Help = 'Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don\'t natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed. Leave this as \'cambozola.jar\' if cambozola is installed in the same directory as the ZoneMinder web client files.', Category = 'images', Readonly = '0', Requires = 'ZM_OPT_CAMBOZOLA=1'; +insert into Config set Id = 24, Name = 'ZM_RELOAD_CAMBOZOLA', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'After how many seconds should Cambozola be reloaded in live view', Help = 'Cambozola allows for the viewing of streaming MJPEG however it caches the entire stream into cache space on the computer, setting this to a number > 0 will cause it to automatically reload after that many seconds to avoid filling up a hard drive.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 25, Name = 'ZM_TIMESTAMP_ON_CAPTURE', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Timestamp images as soon as they are captured', Help = 'ZoneMinder can add a timestamp to images in two ways. The default method, when this option is set, is that each image is timestamped immediately when captured and so the image held in memory is marked right away. The second method does not timestamp the images until they are either saved as part of an event or accessed over the web. The timestamp used in both methods will contain the same time as this is preserved along with the image. The first method ensures that an image is timestamped regardless of any other circumstances but will result in all images being timestamped even those never saved or viewed. The second method necessitates that saved images are copied before being saved otherwise two timestamps perhaps at different scales may be applied. This has the (perhaps) desirable side effect that the timestamp is always applied at the same resolution so an image that has scaling applied will still have a legible and correctly scaled timestamp.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 26, Name = 'ZM_CPU_EXTENSIONS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Use advanced CPU extensions to increase performance', Help = 'When advanced processor extensions such as SSE2 or SSSE3 are available, ZoneMinder can use them, which should increase performance and reduce system load. Enabling this option on processors that do not support the advanced processors extensions used by ZoneMinder is harmless and will have no effect.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 27, Name = 'ZM_FAST_IMAGE_BLENDS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Use a fast algorithm to blend the reference image', Help = 'To detect alarms ZoneMinder needs to blend the captured image with the stored reference image to update it for comparison with the next image. The reference blend percentage specified for the monitor controls how much the new image affects the reference image. There are two methods that are available for this. If this option is set then fast calculation which does not use any multiplication or division is used. This calculation is extremely fast, however it limits the possible blend percentages to 50%, 25%, 12.5%, 6.25%, 3.25% and 1.5%. Any other blend percentage will be rounded to the nearest possible one. The alternative is to switch this option off and use standard blending instead, which is slower.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 28, Name = 'ZM_OPT_ADAPTIVE_SKIP', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Should frame analysis try and be efficient in skipping frames', Help = 'In previous versions of ZoneMinder the analysis daemon would attempt to keep up with the capture daemon by processing the last captured frame on each pass. This would sometimes have the undesirable side-effect of missing a chunk of the initial activity that caused the alarm because the pre-alarm frames would all have to be written to disk and the database before processing the next frame, leading to some delay between the first and second event frames. Setting this option enables a newer adaptive algorithm where the analysis daemon attempts to process as many captured frames as possible, only skipping frames when in danger of the capture daemon overwriting yet to be processed frames. This skip is variable depending on the size of the ring buffer and the amount of space left in it. Enabling this option will give you much better coverage of the beginning of alarms whilst biasing out any skipped frames towards the middle or end of the event. However you should be aware that this will have the effect of making the analysis daemon run somewhat behind the capture daemon during events and for particularly fast rates of capture it is possible for the adaptive algorithm to be overwhelmed and not have time to react to a rapid build up of pending frames and thus for a buffer overrun condition to occur.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 29, Name = 'ZM_BLEND_ALARMED_IMAGES', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Blend alarmed images to update the reference image', Help = 'To detect alarms ZoneMinder compares an image with a reference image which is formed from a composite of the previous images. This option determines whether images that cause events are included in this process. Doing so may increase the precision of the alarmed region but can cause problems if wholescale lighting changes cause alarms as this would not get fed back into the image and an alarm may persist indefinately. A better way to achive the same effect in most cases is to lower substantially the reference blend percentage in specific monitors.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 30, Name = 'ZM_MAX_SUSPEND_TIME', Value = '30', Type = 'integer', DefaultValue = '30', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Maximum time that a monitor may have motion detection suspended', Help = 'ZoneMinder allows monitors to have motion detection to be suspended, for instance while panning a camera. Ordinarily this relies on the operator resuming motion detection afterwards as failure to do so can leave a monitor in a permanently suspended state. This setting allows you to set a maximum time which a camera may be suspended for before it automatically resumes motion detection. This time can be extended by subsequent suspend indications after the first so continuous camera movement will also occur while the monitor is suspended.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 31, Name = 'ZM_OPT_REMOTE_CAMERAS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Are you going to use remote/networked cameras', Help = 'ZoneMinder can work with both local cameras, ie. those attached physically to your computer and remote or network cameras. If you will be using networked cameras select this option.', Category = 'hidden', Readonly = '0', Requires = ''; +insert into Config set Id = 32, Name = 'ZM_NETCAM_REGEXPS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Use regular expression matching with network cameras', Help = 'Traditionally ZoneMinder has used complex regular regular expressions to handle the multitude of formats that network cameras produce. In versions from 1.21.1 the default is to use a simpler and faster built in pattern matching methodology. This works well with most networks cameras but if you have problems you can try the older, but more flexible, regular expression based method by selecting this option. Note, to use this method you must have libpcre installed on your system.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_REMOTE_CAMERAS=1'; +insert into Config set Id = 33, Name = 'ZM_HTTP_VERSION', Value = '1.1', Type = 'string', DefaultValue = '1.1', Hint = '1.1|1.0', Pattern = '(?^:^(1\.[01])$)', Format = ' $1?$1:\"\" ', Prompt = 'The version of HTTP that ZoneMinder will use to connect', Help = 'ZoneMinder can communicate with network cameras using either of the HTTP/1.1 or HTTP/1.0 standard. A server will normally fall back to the version it supports iwht no problem so this should usually by left at the default. However it can be changed to HTTP/1.0 if necessary to resolve particular issues.', Category = 'network', Readonly = '0', Requires = ''; +insert into Config set Id = 34, Name = 'ZM_HTTP_UA', Value = 'ZoneMinder', Type = 'string', DefaultValue = 'ZoneMinder', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'The user agent that ZoneMinder uses to identify itself', Help = 'When ZoneMinder communicates with remote cameras it will identify itself using this string and it\'s version number. This is normally sufficient, however if a particular cameras expects only to communicate with certain browsers then this can be changed to a different string identifying ZoneMinder as Internet Explorer or Netscape etc.', Category = 'network', Readonly = '0', Requires = ''; +insert into Config set Id = 35, Name = 'ZM_HTTP_TIMEOUT', Value = '2500', Type = 'integer', DefaultValue = '2500', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How long ZoneMinder waits before giving up on images (milliseconds)', Help = 'When retrieving remote images ZoneMinder will wait for this length of time before deciding that an image is not going to arrive and taking steps to retry. This timeout is in milliseconds (1000 per second) and will apply to each part of an image if it is not sent in one whole chunk.', Category = 'network', Readonly = '0', Requires = ''; +insert into Config set Id = 36, Name = 'ZM_MIN_RTP_PORT', Value = '40200', Type = 'integer', DefaultValue = '40200', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Minimum port that ZoneMinder will listen for RTP traffic on', Help = 'When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the minimum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting.', Category = 'network', Readonly = '0', Requires = ''; +insert into Config set Id = 37, Name = 'ZM_MAX_RTP_PORT', Value = '40499', Type = 'integer', DefaultValue = '40499', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Maximum port that ZoneMinder will listen for RTP traffic on', Help = 'When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the maximum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting. You should also ensure that you have opened up at least two ports for each monitor that will be connecting to unicasting network cameras.', Category = 'network', Readonly = '0', Requires = ''; +insert into Config set Id = 38, Name = 'ZM_OPT_FFMPEG', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Is the ffmpeg video encoder/decoder installed', Help = 'ZoneMinder can optionally encode a series of video images into an MPEG encoded movie file for viewing, downloading or storage. This option allows you to specify whether you have the ffmpeg tools installed. Note that creating MPEG files can be fairly CPU and disk intensive and is not a required option as events can still be reviewed as video streams without it.', Category = 'images', Readonly = '0', Requires = ''; +insert into Config set Id = 39, Name = 'ZM_PATH_FFMPEG', Value = '/usr/bin/ffmpeg', Type = 'string', DefaultValue = '/usr/bin/ffmpeg', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'Path to (optional) ffmpeg mpeg encoder', Help = 'This path should point to where ffmpeg has been installed.', Category = 'images', Readonly = '0', Requires = 'ZM_OPT_FFMPEG=1'; +insert into Config set Id = 40, Name = 'ZM_FFMPEG_INPUT_OPTIONS', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Additional input options to ffmpeg', Help = 'Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the input to ffmpeg (options that are given before the -i option). Check the ffmpeg documentation for a full list of options which may be used here.', Category = 'images', Readonly = '0', Requires = 'ZM_OPT_FFMPEG=1'; +insert into Config set Id = 41, Name = 'ZM_FFMPEG_OUTPUT_OPTIONS', Value = '-r 25', Type = 'string', DefaultValue = '-r 25', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Additional output options to ffmpeg', Help = 'Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the output from ffmpeg (options that are given after the -i option). Check the ffmpeg documentation for a full list of options which may be used here. The most common one will often be to force an output frame rate supported by the video encoder.', Category = 'images', Readonly = '0', Requires = 'ZM_OPT_FFMPEG=1'; +insert into Config set Id = 42, Name = 'ZM_FFMPEG_FORMATS', Value = 'mpg mpeg wmv asf avi* mov swf 3gp**', Type = 'string', DefaultValue = 'mpg mpeg wmv asf avi* mov swf 3gp**', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Formats to allow for ffmpeg video generation', Help = 'Ffmpeg can generate video in many different formats. This option allows you to list the ones you want to be able to select. As new formats are supported by ffmpeg you can add them here and be able to use them immediately. Adding a \'*\' after a format indicates that this will be the default format used for web video, adding \'**\' defines the default format for phone video.', Category = 'images', Readonly = '0', Requires = 'ZM_OPT_FFMPEG=1'; +insert into Config set Id = 43, Name = 'ZM_LOG_LEVEL_SYSLOG', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Save logging output to the system log', Help = 'ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to the system log. ZoneMinder binaries have always logged to the system log but now scripts and web logging is also included. To preserve the previous behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 44, Name = 'ZM_LOG_LEVEL_FILE', Value = '-5', Type = 'integer', DefaultValue = '-5', Hint = 'None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Save logging output to component files', Help = 'ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to individual log files written by specific components. This is how logging worked previously and although useful for tracking down issues in specific components it also resulted in many disparate log files. To preserve this behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance though file output has less impact than the other options. If you want debug you will also need to set a level and component below', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 45, Name = 'ZM_LOG_LEVEL_WEBLOG', Value = '-5', Type = 'integer', DefaultValue = '-5', Hint = 'None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Save logging output to the weblog', Help = 'ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output from the web interface that goes to the httpd error log. Note that only web logging from PHP and JavaScript files is included and so this option is really only useful for investigating specific issues with those components. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 46, Name = 'ZM_LOG_LEVEL_DATABASE', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Save logging output to the database', Help = 'ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that is written to the database. This is a new option which can make viewing logging output easier and more intuitive and also makes it easier to get an overall impression of how the system is performing. If you have a large or very busy system then it is possible that use of this option may slow your system down if the table becomes very large. Ensure you use the LOG_DATABASE_LIMIT option to keep the table to a manageable size. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 47, Name = 'ZM_LOG_DATABASE_LIMIT', Value = '7 day', Type = 'string', DefaultValue = '7 day', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Maximum number of log entries to retain', Help = 'If you are using database logging then it is possible to quickly build up a large number of entries in the Logs table. This option allows you to specify how many of these entries are kept. If you set this option to a number greater than zero then that number is used to determine the maximum number of rows, less than or equal to zero indicates no limit and is not recommended. You can also set this value to time values such as \' day\' which will limit the log entries to those newer than that time. You can specify \'hour\', \'day\', \'week\', \'month\' and \'year\', note that the values should be singular (no \'s\' at the end). The Logs table is pruned periodically so it is possible for more than the expected number of rows to be present briefly in the meantime.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 48, Name = 'ZM_LOG_DEBUG', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Switch debugging on', Help = 'ZoneMinder components usually support debug logging available to help with diagnosing problems. Binary components have several levels of debug whereas more other components have only one. Normally this is disabled to minimise performance penalties and avoid filling logs too quickly. This option lets you switch on other options that allow you to configure additional debug information to be output. Components will pick up this instruction when they are restarted.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 49, Name = 'ZM_LOG_DEBUG_TARGET', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'What components should have extra debug enabled', Help = 'There are three scopes of debug available. Leaving this option blank means that all components will use extra debug (not recommended). Setting this option to \'_\', e.g. _zmc, will limit extra debug to that component only. Setting this option to \'__\', e.g. \'_zmc_m1\' will limit extra debug to that instance of the component only. This is ordinarily what you probably want to do. To debug scripts use their names without the .pl extension, e.g. \'_zmvideo\' and to debug issues with the web interface use \'_web\'. You can specify multiple targets by separating them with \'|\' characters.', Category = 'logging', Readonly = '0', Requires = 'ZM_LOG_DEBUG=1'; +insert into Config set Id = 50, Name = 'ZM_LOG_DEBUG_LEVEL', Value = '1', Type = 'integer', DefaultValue = '1', Hint = '1|2|3|4|5|6|7|8|9', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What level of extra debug should be enabled', Help = 'There are 9 levels of debug available, with higher numbers being more debug and level 0 being no debug. However not all levels are used by all components. Also if there is debug at a high level it is usually likely to be output at such a volume that it may obstruct normal operation. For this reason you should set the level carefully and cautiously until the degree of debug you wish to see is present. Scripts and the web interface only have one level so this is an on/off type option for them.', Category = 'logging', Readonly = '0', Requires = 'ZM_LOG_DEBUG=1'; +insert into Config set Id = 51, Name = 'ZM_LOG_DEBUG_FILE', Value = '/tmp/zm/zm_debug.log+', Type = 'string', DefaultValue = '/tmp/zm/zm_debug.log+', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Where extra debug is output to', Help = 'This option allows you to specify a different target for debug output. All components have a default log file which will norally be in /tmp or /var/log and this is where debug will be written to if this value is empty. Adding a path here will temporarily redirect debug, and other logging output, to this file. This option is a simple filename and you are debugging several components then they will all try and write to the same file with undesirable consequences. Appending a \'+\' to the filename will cause the file to be created with a \'.\' suffix containing your process id. In this way debug from each run of a component is kept separate. This is the recommended setting as it will also prevent subsequent runs from overwriting the same log. You should ensure that permissions are set up to allow writing to the file and directory specified here.', Category = 'logging', Readonly = '0', Requires = 'ZM_LOG_DEBUG=1'; +insert into Config set Id = 52, Name = 'ZM_LOG_CHECK_PERIOD', Value = '900', Type = 'integer', DefaultValue = '900', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Time period used when calculating overall system health', Help = 'When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to indicate what period of historical events are used in this calculation. This value is expressed in seconds and is ignored if LOG_LEVEL_DATABASE is set to None.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 53, Name = 'ZM_LOG_ALERT_WAR_COUNT', Value = '1', Type = 'integer', DefaultValue = '1', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Number of warnings indicating system alert state', Help = 'When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alert state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 54, Name = 'ZM_LOG_ALERT_ERR_COUNT', Value = '1', Type = 'integer', DefaultValue = '1', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Number of errors indicating system alert state', Help = 'When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alert state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 55, Name = 'ZM_LOG_ALERT_FAT_COUNT', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Number of fatal error indicating system alert state', Help = 'When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alert state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 56, Name = 'ZM_LOG_ALARM_WAR_COUNT', Value = '100', Type = 'integer', DefaultValue = '100', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Number of warnings indicating system alarm state', Help = 'When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alarm state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 57, Name = 'ZM_LOG_ALARM_ERR_COUNT', Value = '10', Type = 'integer', DefaultValue = '10', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Number of errors indicating system alarm state', Help = 'When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alarm state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 58, Name = 'ZM_LOG_ALARM_FAT_COUNT', Value = '1', Type = 'integer', DefaultValue = '1', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Number of fatal error indicating system alarm state', Help = 'When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alarm state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 59, Name = 'ZM_RECORD_EVENT_STATS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Record event statistical information, switch off if too slow', Help = 'This version of ZoneMinder records detailed information about events in the Stats table. This can help in profiling what the optimum settings are for Zones though this is tricky at present. However in future releases this will be done more easily and intuitively, especially with a large sample of events. The default option of \'yes\' allows this information to be collected now in readiness for this but if you are concerned about performance you can switch this off in which case no Stats information will be saved.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 60, Name = 'ZM_RECORD_DIAG_IMAGES', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Record intermediate alarm diagnostic images, can be very slow', Help = 'In addition to recording event statistics you can also record the intermediate diagnostic images that display the results of the various checks and processing that occur when trying to determine if an alarm event has taken place. There are several of these images generated for each frame and zone for each alarm or alert frame so this can have a massive impact on performance. Only switch this setting on for debug or analysis purposes and remember to switch it off again once no longer required.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 61, Name = 'ZM_DUMP_CORES', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Create core files on unexpected process failure.', Help = 'When an unrecoverable error occurs in a ZoneMinder binary process is has traditionally been trapped and the details written to logs to aid in remote analysis. However in some cases it is easier to diagnose the error if a core file, which is a memory dump of the process at the time of the error, is created. This can be interactively analysed in the debugger and may reveal more or better information than that available from the logs. This option is recommended for advanced users only otherwise leave at the default. Note using this option to trigger core files will mean that there will be no indication in the binary logs that a process has died, they will just stop, however the zmdc log will still contain an entry. Also note that you may have to explicitly enable core file creation on your system via the \'ulimit -c\' command or other means otherwise no file will be created regardless of the value of this option.', Category = 'logging', Readonly = '0', Requires = ''; +insert into Config set Id = 62, Name = 'ZM_PATH_MAP', Value = '/dev/shm', Type = 'string', DefaultValue = '/dev/shm', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'Path to the mapped memory files that that ZoneMinder can use', Help = 'ZoneMinder has historically used IPC shared memory for shared data between processes. This has it\'s advantages and limitations. This version of ZoneMinder can use an alternate method, mapped memory, instead with can be enabled with the --enable--mmap directive to configure. This requires less system configuration and is generally more flexible. However it requires each shared data segment to map onto a filesystem file. This option indicates where those mapped files go. You should ensure that this location has sufficient space for these files and for the best performance it should be a tmpfs file system or ramdisk otherwise disk access may render this method slower than the regular shared memory one.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 63, Name = 'ZM_PATH_SOCKS', Value = '/tmp/zm', Type = 'string', DefaultValue = '/tmp/zm', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'Path to the various Unix domain socket files that ZoneMinder uses', Help = 'ZoneMinder generally uses Unix domain sockets where possible. This reduces the need for port assignments and prevents external applications from possibly compromising the daemons. However each Unix socket requires a .sock file to be created. This option indicates where those socket files go.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 64, Name = 'ZM_PATH_LOGS', Value = '/var/log/zm', Type = 'string', DefaultValue = '/var/log/zm', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'Path to the various logs that the ZoneMinder daemons generate', Help = 'There are various daemons that are used by ZoneMinder to perform various tasks. Most generate helpful log files and this is where they go. They can be deleted if not required for debugging.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 65, Name = 'ZM_PATH_SWAP', Value = '/tmp/zm', Type = 'string', DefaultValue = '/tmp/zm', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'Path to location for temporary swap images used in streaming', Help = 'Buffered playback requires temporary swap images to be stored for each instance of the streaming daemons. This option determines where these images will be stored. The images will actually be stored in sub directories beneath this location and will be automatically cleaned up after a period of time.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 66, Name = 'ZM_WEB_TITLE_PREFIX', Value = 'ZM', Type = 'string', DefaultValue = 'ZM', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'The title prefix displayed on each window', Help = 'If you have more than one installation of ZoneMinder it can be helpful to display different titles for each one. Changing this option allows you to customise the window titles to include further information to aid identification.', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 67, Name = 'ZM_WEB_RESIZE_CONSOLE', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Should the console window resize itself to fit', Help = 'Traditionally the main ZoneMinder web console window has resized itself to shrink to a size small enough to list only the monitors that are actually present. This is intended to make the window more unobtrusize but may not be to everyones tastes, especially if opened in a tab in browsers which support this kind if layout. Switch this option off to have the console window size left to the users preference', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 68, Name = 'ZM_WEB_POPUP_ON_ALARM', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Should the monitor window jump to the top if an alarm occurs', Help = 'When viewing a live monitor stream you can specify whether you want the window to pop to the front if an alarm occurs when the window is minimised or behind another window. This is most useful if your monitors are over doors for example when they can pop up if someone comes to the doorway.', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 69, Name = 'ZM_OPT_X10', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Support interfacing with X10 devices', Help = 'If you have an X10 Home Automation setup in your home you can use ZoneMinder to initiate or react to X10 signals if your computer has the appropriate interface controller. This option indicates whether X10 options will be available in the browser client.', Category = 'x10', Readonly = '0', Requires = ''; +insert into Config set Id = 70, Name = 'ZM_X10_DEVICE', Value = '/dev/ttyS0', Type = 'string', DefaultValue = '/dev/ttyS0', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'What device is your X10 controller connected on', Help = 'If you have an X10 controller device (e.g. XM10U) connected to your computer this option details which port it is conected on, the default of /dev/ttyS0 maps to serial or com port 1.', Category = 'x10', Readonly = '0', Requires = 'ZM_OPT_X10=1'; +insert into Config set Id = 71, Name = 'ZM_X10_HOUSE_CODE', Value = 'A', Type = 'string', DefaultValue = 'A', Hint = 'A-P', Pattern = '(?^i:^([A-P]))', Format = ' uc($1) ', Prompt = 'What X10 house code should be used', Help = 'X10 devices are grouped together by identifying them as all belonging to one House Code. This option details what that is. It should be a single letter between A and P.', Category = 'x10', Readonly = '0', Requires = 'ZM_OPT_X10=1'; +insert into Config set Id = 72, Name = 'ZM_X10_DB_RELOAD_INTERVAL', Value = '60', Type = 'integer', DefaultValue = '60', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the X10 daemon reloads the monitors from the database', Help = 'The zmx10 daemon periodically checks the database to find out what X10 events trigger, or result from, alarms. This option determines how frequently this check occurs, unless you change this area frequently this can be a fairly large value.', Category = 'x10', Readonly = '0', Requires = 'ZM_OPT_X10=1'; +insert into Config set Id = 73, Name = 'ZM_WEB_SOUND_ON_ALARM', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Should the monitor window play a sound if an alarm occurs', Help = 'When viewing a live monitor stream you can specify whether you want the window to play a sound to alert you if an alarm occurs.', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 74, Name = 'ZM_WEB_ALARM_SOUND', Value = '', Type = 'string', DefaultValue = '', Hint = 'filename', Pattern = '(?^:^([a-zA-Z0-9-_.]+)$)', Format = ' $1 ', Prompt = 'The sound to play on alarm, put this in the sounds directory', Help = 'You can specify a sound file to play if an alarm occurs whilst you are watching a live monitor stream. So long as your browser understands the format it does not need to be any particular type. This file should be placed in the sounds directory defined earlier.', Category = 'web', Readonly = '0', Requires = 'ZM_WEB_SOUND_ON_ALARM=1'; +insert into Config set Id = 75, Name = 'ZM_WEB_COMPACT_MONTAGE', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Compact the montage view by removing extra detail', Help = 'The montage view shows the output of all of your active monitors in one window. This include a small menu and status information for each one. This can increase the web traffic and make the window larger than may be desired. Setting this option on removes all this extraneous information and just displays the images.', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 76, Name = 'ZM_OPT_FAST_DELETE', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Delete only event database records for speed', Help = 'Normally an event created as the result of an alarm consists of entries in one or more database tables plus the various files associated with it. When deleting events in the browser it can take a long time to remove all of this if your are trying to do a lot of events at once. It is recommended that you set this option which means that the browser client only deletes the key entries in the events table, which means the events will no longer appear in the listing, and leaves the zmaudit daemon to clear up the rest later.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 77, Name = 'ZM_STRICT_VIDEO_CONFIG', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Allow errors in setting video config to be fatal', Help = 'With some video devices errors can be reported in setting the various video attributes when in fact the operation was successful. Switching this option off will still allow these errors to be reported but will not cause them to kill the video capture daemon. Note however that doing this will cause all errors to be ignored including those which are genuine and which may cause the video capture to not function correctly. Use this option with caution.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 78, Name = 'ZM_SIGNAL_CHECK_POINTS', Value = '10', Type = 'integer', DefaultValue = '10', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How many points in a captured image to check for signal loss', Help = 'For locally attached video cameras ZoneMinder can check for signal loss by looking at a number of random points on each captured image. If all of these points are set to the same fixed colour then the camera is assumed to have lost signal. When this happens any open events are closed and a short one frame signal loss event is generated, as is another when the signal returns. This option defines how many points on each image to check. Note that this is a maximum, any points found to not have the check colour will abort any further checks so in most cases on a couple of points will actually be checked. Network and file based cameras are never checked.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 79, Name = 'ZM_V4L_MULTI_BUFFER', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Use more than one buffer for Video 4 Linux devices', Help = 'Performance when using Video 4 Linux devices is usually best if multiple buffers are used allowing the next image to be captured while the previous one is being processed. If you have multiple devices on a card sharing one input that requires switching then this approach can sometimes cause frames from one source to be mixed up with frames from another. Switching this option off prevents multi buffering resulting in slower but more stable image capture. This option is ignored for non-local cameras or if only one input is present on a capture chip. This option addresses a similar problem to the ZM_CAPTURES_PER_FRAME option and you should normally change the value of only one of the options at a time.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 80, Name = 'ZM_CAPTURES_PER_FRAME', Value = '1', Type = 'integer', DefaultValue = '1', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How many images are captured per returned frame, for shared local cameras', Help = 'If you are using cameras attached to a video capture card which forces multiple inputs to share one capture chip, it can sometimes produce images with interlaced frames reversed resulting in poor image quality and a distinctive comb edge appearance. Increasing this setting allows you to force additional image captures before one is selected as the captured frame. This allows the capture hardware to \'settle down\' and produce better quality images at the price of lesser capture rates. This option has no effect on (a) network cameras, or (b) where multiple inputs do not share a capture chip. This option addresses a similar problem to the ZM_V4L_MULTI_BUFFER option and you should normally change the value of only one of the options at a time.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 81, Name = 'ZM_FILTER_RELOAD_DELAY', Value = '300', Type = 'integer', DefaultValue = '300', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) filters are reloaded in zmfilter', Help = 'ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are reloaded from the database to get the latest versions or new filters. If you don\'t change filters very often this value can be set to a large value.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 82, Name = 'ZM_FILTER_EXECUTE_INTERVAL', Value = '60', Type = 'integer', DefaultValue = '60', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) to run automatic saved filters', Help = 'ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are executed on the saved event in the database. If you want a rapid response to new events this should be a smaller value, however this may increase the overall load on the system and affect performance of other elements.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 83, Name = 'ZM_OPT_UPLOAD', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Should ZoneMinder support uploading events from filters', Help = 'In ZoneMinder you can create event filters that specify whether events that match certain criteria should be uploaded to a remote server for archiving. This option specifies whether this functionality should be available', Category = 'upload', Readonly = '0', Requires = ''; +insert into Config set Id = 84, Name = 'ZM_UPLOAD_ARCH_FORMAT', Value = 'tar', Type = 'string', DefaultValue = 'tar', Hint = 'tar|zip', Pattern = '(?^i:^([tz]))', Format = ' $1 =~ /^t/ ? \"tar\" : \"zip\" ', Prompt = 'What format the uploaded events should be created in.', Help = 'Uploaded events may be stored in either .tar or .zip format, this option specifies which. Note that to use this you will need to have the Archive::Tar and/or Archive::Zip perl modules installed.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 85, Name = 'ZM_UPLOAD_ARCH_COMPRESS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Should archive files be compressed', Help = 'When the archive files are created they can be compressed. However in general since the images are compressed already this saves only a minimal amount of space versus utilising more CPU in their creation. Only enable if you have CPU to waste and are limited in disk space on your remote server or bandwidth.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 86, Name = 'ZM_UPLOAD_ARCH_ANALYSE', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Include the analysis files in the archive', Help = 'When the archive files are created they can contain either just the captured frames or both the captured frames and, for frames that caused an alarm, the analysed image with the changed area highlighted. This option controls files are included. Only include analysed frames if you have a high bandwidth connection to the remote server or if you need help in figuring out what caused an alarm in the first place as archives with these files in can be considerably larger.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 87, Name = 'ZM_UPLOAD_PROTOCOL', Value = 'ftp', Type = 'string', DefaultValue = 'ftp', Hint = 'ftp|sftp', Pattern = '(?^i:^([tz]))', Format = ' $1 =~ /^f/ ? \"ftp\" : \"sftp\" ', Prompt = 'What protocol to use to upload events', Help = 'ZoneMinder can upload events to a remote server using either FTP or SFTP. Regular FTP is widely supported but not necessarily very secure whereas SFTP (Secure FTP) runs over an ssh connection and so is encrypted and uses regular ssh ports. Note that to use this you will need to have the appropriate perl module, either Net::FTP or Net::SFTP installed depending on your choice.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 88, Name = 'ZM_UPLOAD_FTP_HOST', Value = '', Type = 'string', DefaultValue = '', Hint = 'host.your.domain', Pattern = '(?^:^([a-zA-Z0-9_.-]+)$)', Format = ' $1 ', Prompt = 'The remote server to upload to', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the name, or ip address, of the server to use.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 89, Name = 'ZM_UPLOAD_HOST', Value = '', Type = 'string', DefaultValue = '', Hint = 'host.your.domain', Pattern = '(?^:^([a-zA-Z0-9_.-]+)$)', Format = ' $1 ', Prompt = 'The remote server to upload events to', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the name, or ip address, of the server to use.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 90, Name = 'ZM_UPLOAD_PORT', Value = '', Type = 'integer', DefaultValue = '', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'The port on the remote upload server, if not the default (SFTP only)', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote server. If you are using the SFTP protocol then this option allows you to specify a particular port to use for connection. If this option is left blank then the default, port 22, is used. This option is ignored for FTP uploads.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 91, Name = 'ZM_UPLOAD_FTP_USER', Value = '', Type = 'string', DefaultValue = '', Hint = 'alphanumeric', Pattern = '(?^:^([a-zA-Z0-9-_]+)$)', Format = ' $1 ', Prompt = 'Your ftp username', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the username that ZoneMinder should use to log in for ftp transfer.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 92, Name = 'ZM_UPLOAD_USER', Value = '', Type = 'string', DefaultValue = '', Hint = 'alphanumeric', Pattern = '(?^:^([a-zA-Z0-9-_]+)$)', Format = ' $1 ', Prompt = 'Remote server username', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the username that ZoneMinder should use to log in for transfer.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 93, Name = 'ZM_UPLOAD_FTP_PASS', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Your ftp password', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the password that ZoneMinder should use to log in for ftp transfer.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 94, Name = 'ZM_UPLOAD_PASS', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Remote server password', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the password that ZoneMinder should use to log in for transfer. If you are using certicate based logins for SFTP servers you can leave this option blank.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 95, Name = 'ZM_UPLOAD_FTP_LOC_DIR', Value = '/tmp/zm', Type = 'string', DefaultValue = '/tmp/zm', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'The local directory in which to create upload files', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 96, Name = 'ZM_UPLOAD_LOC_DIR', Value = '/tmp/zm', Type = 'string', DefaultValue = '/tmp/zm', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'The local directory in which to create upload files', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 97, Name = 'ZM_UPLOAD_FTP_REM_DIR', Value = '', Type = 'string', DefaultValue = '', Hint = 'relative/path/to/somewhere', Pattern = '(?^:^((?:[^/].*)?)/?$)', Format = ' $1 ', Prompt = 'The remote directory to upload to', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the remote directory that ZoneMinder should use to upload event files to.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 98, Name = 'ZM_UPLOAD_REM_DIR', Value = '', Type = 'string', DefaultValue = '', Hint = 'relative/path/to/somewhere', Pattern = '(?^:^((?:[^/].*)?)/?$)', Format = ' $1 ', Prompt = 'The remote directory to upload to', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the remote directory that ZoneMinder should use to upload event files to.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 99, Name = 'ZM_UPLOAD_FTP_TIMEOUT', Value = '120', Type = 'integer', DefaultValue = '120', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How long to allow the transfer to take for each file', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the maximum ftp inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 100, Name = 'ZM_UPLOAD_TIMEOUT', Value = '120', Type = 'integer', DefaultValue = '120', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How long to allow the transfer to take for each file', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the maximum inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 101, Name = 'ZM_UPLOAD_FTP_PASSIVE', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Use passive ftp when uploading', Help = 'If your computer is behind a firewall or proxy you may need to set FTP to passive mode. In fact for simple transfers it makes little sense to do otherwise anyway but you can set this to \'No\' if you wish.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 102, Name = 'ZM_UPLOAD_FTP_DEBUG', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Switch ftp debugging on', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote ftp server. If you are having (or expecting) troubles with uploading events then setting this to \'yes\' permits additional information to be included in the zmfilter log file.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 103, Name = 'ZM_UPLOAD_DEBUG', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Switch upload debugging on', Help = 'You can use filters to instruct ZoneMinder to upload events to a remote server. If you are having (or expecting) troubles with uploading events then setting this to \'yes\' permits additional information to be generated by the underlying transfer modules and included in the logs.', Category = 'upload', Readonly = '0', Requires = 'ZM_OPT_UPLOAD=1'; +insert into Config set Id = 104, Name = 'ZM_OPT_EMAIL', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Should ZoneMinder email you details of events that match corresponding filters', Help = 'In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details emailed to you at a designated email address. This will allow you to be notified of events as soon as they occur and also to quickly view the events directly. This option specifies whether this functionality should be available. The email created with this option can be any size and is intended to be sent to a regular email reader rather than a mobile device.', Category = 'mail', Readonly = '0', Requires = ''; +insert into Config set Id = 105, Name = 'ZM_EMAIL_ADDRESS', Value = '', Type = 'string', DefaultValue = '', Hint = 'your.name@your.domain', Pattern = '(?^:^([a-zA-Z0-9_.-]+)\@([a-zA-Z0-9_.-]+)$)', Format = ' $1\@$2 ', Prompt = 'The email address to send matching event details to', Help = 'This option is used to define the email address that any events that match the appropriate filters will be sent to.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1'; +insert into Config set Id = 106, Name = 'ZM_EMAIL_TEXT', Value = 'subject = \"ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)\" +body = \" +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder\"', Type = 'text', DefaultValue = 'subject = \"ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)\" +body = \" +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder\"', Hint = 'free text', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'The text of the email used to send matching event details', Help = 'This option is used to define the content of the email that is sent for any events that match the appropriate filters.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1'; +insert into Config set Id = 107, Name = 'ZM_EMAIL_SUBJECT', Value = 'ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)', Type = 'string', DefaultValue = 'ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'The subject of the email used to send matching event details', Help = 'This option is used to define the subject of the email that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1'; +insert into Config set Id = 108, Name = 'ZM_EMAIL_BODY', Value = ' +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder', Type = 'text', DefaultValue = ' +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder', Hint = 'free text', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'The body of the email used to send matching event details', Help = 'This option is used to define the content of the email that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1'; +insert into Config set Id = 109, Name = 'ZM_OPT_MESSAGE', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Should ZoneMinder message you with details of events that match corresponding filters', Help = 'In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details sent to you at a designated short message email address. This will allow you to be notified of events as soon as they occur. This option specifies whether this functionality should be available. The email created by this option will be brief and is intended to be sent to an SMS gateway or a minimal mail reader such as a mobile device or phone rather than a regular email reader.', Category = 'mail', Readonly = '0', Requires = ''; +insert into Config set Id = 110, Name = 'ZM_MESSAGE_ADDRESS', Value = '', Type = 'string', DefaultValue = '', Hint = 'your.name@your.domain', Pattern = '(?^:^([a-zA-Z0-9_.-]+)\@([a-zA-Z0-9_.-]+)$)', Format = ' $1\@$2 ', Prompt = 'The email address to send matching event details to', Help = 'This option is used to define the short message email address that any events that match the appropriate filters will be sent to.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_MESSAGE=1'; +insert into Config set Id = 111, Name = 'ZM_MESSAGE_TEXT', Value = 'subject = \"ZoneMinder: Alarm - %MN%-%EI%\" +body = \"ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.\"', Type = 'text', DefaultValue = 'subject = \"ZoneMinder: Alarm - %MN%-%EI%\" +body = \"ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.\"', Hint = 'free text', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'The text of the message used to send matching event details', Help = 'This option is used to define the content of the message that is sent for any events that match the appropriate filters.', Category = 'hidden', Readonly = '0', Requires = 'ZM_OPT_MESSAGE=1'; +insert into Config set Id = 112, Name = 'ZM_MESSAGE_SUBJECT', Value = 'ZoneMinder: Alarm - %MN%-%EI%', Type = 'string', DefaultValue = 'ZoneMinder: Alarm - %MN%-%EI%', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'The subject of the message used to send matching event details', Help = 'This option is used to define the subject of the message that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_MESSAGE=1'; +insert into Config set Id = 113, Name = 'ZM_MESSAGE_BODY', Value = 'ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.', Type = 'text', DefaultValue = 'ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.', Hint = 'free text', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'The body of the message used to send matching event details', Help = 'This option is used to define the content of the message that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_MESSAGE=1'; +insert into Config set Id = 114, Name = 'ZM_NEW_MAIL_MODULES', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Use a newer perl method to send emails', Help = 'Traditionally ZoneMinder has used the MIME::Entity perl module to construct and send notification emails and messages. Some people have reported problems with this module not being present at all or flexible enough for their needs. If you are one of those people this option allows you to select a new mailing method using MIME::Lite and Net::SMTP instead. This method was contributed by Ross Melin and should work for everyone but has not been extensively tested so currently is not selected by default.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1;ZM_OPT_MESSAGE=1'; +insert into Config set Id = 115, Name = 'ZM_EMAIL_HOST', Value = 'localhost', Type = 'string', DefaultValue = 'localhost', Hint = 'host.your.domain', Pattern = '(?^:^([a-zA-Z0-9_.-]+)$)', Format = ' $1 ', Prompt = 'The host address of your SMTP mail server', Help = 'If you have chosen SMTP as the method by which to send notification emails or messages then this option allows you to choose which SMTP server to use to send them. The default of localhost may work if you have the sendmail, exim or a similar daemon running however you may wish to enter your ISP\'s SMTP mail server here.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1;ZM_OPT_MESSAGE=1'; +insert into Config set Id = 116, Name = 'ZM_FROM_EMAIL', Value = '', Type = 'string', DefaultValue = '', Hint = 'your.name@your.domain', Pattern = '(?^:^([a-zA-Z0-9_.-]+)\@([a-zA-Z0-9_.-]+)$)', Format = ' $1\@$2 ', Prompt = 'The email address you wish your event notifications to originate from', Help = 'The emails or messages that will be sent to you informing you of events can appear to come from a designated email address to help you with mail filtering etc. An address of something like ZoneMinder@your.domain is recommended.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1;ZM_OPT_MESSAGE=1'; +insert into Config set Id = 117, Name = 'ZM_URL', Value = '', Type = 'string', DefaultValue = '', Hint = 'http://host.your.domain/', Pattern = '(?^:^(?:http://)?(.+)$)', Format = ' \"http://\".$1 ', Prompt = 'The URL of your ZoneMinder installation', Help = 'The emails or messages that will be sent to you informing you of events can include a link to the events themselves for easy viewing. If you intend to use this feature then set this option to the url of your installation as it would appear from where you read your email, e.g. http://host.your.domain/zm.php.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1;ZM_OPT_MESSAGE=1'; +insert into Config set Id = 118, Name = 'ZM_MAX_RESTART_DELAY', Value = '600', Type = 'integer', DefaultValue = '600', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Maximum delay (in seconds) for daemon restart attempts.', Help = 'The zmdc (zm daemon control) process controls when processeses are started or stopped and will attempt to restart any that fail. If a daemon fails frequently then a delay is introduced between each restart attempt. If the daemon stills fails then this delay is increased to prevent extra load being placed on the system by continual restarts. This option controls what this maximum delay is.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 119, Name = 'ZM_WATCH_CHECK_INTERVAL', Value = '10', Type = 'integer', DefaultValue = '10', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often to check the capture daemons have not locked up', Help = 'The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines how often the daemons are checked.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 120, Name = 'ZM_WATCH_MAX_DELAY', Value = '5', Type = 'decimal', DefaultValue = '5', Hint = 'decimal', Pattern = '(?^:^(\d+(?:\.\d+)?)$)', Format = ' $1 ', Prompt = 'The maximum delay allowed since the last captured image', Help = 'The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines the maximum delay to allow since the last captured frame. The daemon will be restarted if it has not captured any images after this period though the actual restart may take slightly longer in conjunction with the check interval value above.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 121, Name = 'ZM_RUN_AUDIT', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Run zmaudit to check data consistency', Help = 'The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using \'fast deletes\' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. This option controls whether zmaudit is run in the background and performs these checks and fixes continuously. This is recommended for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to not have zmaudit running unconditionally and schedule occasional checks at other, more convenient, times.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 122, Name = 'ZM_AUDIT_CHECK_INTERVAL', Value = '900', Type = 'integer', DefaultValue = '900', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often to check database and filesystem consistency', Help = 'The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using \'fast deletes\' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. The default check interval of 900 seconds (15 minutes) is fine for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to make this interval much larger to reduce the impact on your system. This option determines how often these checks are performed.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 123, Name = 'ZM_FORCED_ALARM_SCORE', Value = '255', Type = 'integer', DefaultValue = '255', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Score to give forced alarms', Help = 'The \'zmu\' utility can be used to force an alarm on a monitor rather than rely on the motion detection algorithms. This option determines what score to give these alarms to distinguish them from regular ones. It must be 255 or less.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 124, Name = 'ZM_BULK_FRAME_INTERVAL', Value = '100', Type = 'integer', DefaultValue = '100', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often a bulk frame should be written to the database', Help = 'Traditionally ZoneMinder writes an entry into the Frames database table for each frame that is captured and saved. This works well in motion detection scenarios but when in a DVR situation (\'Record\' or \'Mocord\' mode) this results in a huge number of frame writes and a lot of database and disk bandwidth for very little additional information. Setting this to a non-zero value will enabled ZoneMinder to group these non-alarm frames into one \'bulk\' frame entry which saves a lot of bandwidth and space. The only disadvantage of this is that timing information for individual frames is lost but in constant frame rate situations this is usually not significant. This setting is ignored in Modect mode and individual frames are still written if an alarm occurs in Mocord mode also.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 125, Name = 'ZM_EVENT_CLOSE_MODE', Value = 'idle', Type = 'string', DefaultValue = 'idle', Hint = 'time|idle|alarm', Pattern = '(?^i:^([tia]))', Format = ' ($1 =~ /^t/) ? \"time\" : ($1 =~ /^i/ ? \"idle\" : \"time\" ) ', Prompt = 'When continuous events are closed.', Help = 'When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section. This option controls what happens when an alarm occurs in Mocord mode. The \'time\' setting means that the event will be closed at the end of the section regardless of alarm activity. The \'idle\' setting means that the event will be closed at the end of the section if there is no alarm activity occuring at the time otherwise it will be closed once the alarm is over meaning the event may end up being longer than the normal section length. The \'alarm\' setting means that if an alarm occurs during the event, the event will be closed once the alarm is over regardless of when this occurs. This has the effect of limiting the number of alarms to one per event and the events will be shorter than the section length if an alarm has occurred.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 126, Name = 'ZM_FORCE_CLOSE_EVENTS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Close events at section ends.', Help = 'When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section and ordinarily this will prevent the event being closed until the motion has ceased. Switching this option on will force the event closed at the specified time regardless of any motion activity.', Category = 'hidden', Readonly = '0', Requires = ''; +insert into Config set Id = 127, Name = 'ZM_CREATE_ANALYSIS_IMAGES', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Create analysed alarm images with motion outlined', Help = 'By default during an alarm ZoneMinder records both the raw captured image and one that has been analysed and had areas where motion was detected outlined. This can be very useful during zone configuration or in analysing why events occured. However it also incurs some overhead and in a stable system may no longer be necessary. This parameter allows you to switch the generation of these images off.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 128, Name = 'ZM_WEIGHTED_ALARM_CENTRES', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Use a weighted algorithm to calculate the centre of an alarm', Help = 'ZoneMinder will always calculate the centre point of an alarm in a zone to give some indication of where on the screen it is. This can be used by the experimental motion tracking feature or your own custom extensions. In the alarmed or filtered pixels mode this is a simple midpoint between the extents of the detected pxiesl. However in the blob method this can instead be calculated using weighted pixel locations to give more accurate positioning for irregularly shaped blobs. This method, while more precise is also slower and so is turned off by default.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 129, Name = 'ZM_EVENT_IMAGE_DIGITS', Value = '3', Type = 'integer', DefaultValue = '3', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How many significant digits are used in event image numbering', Help = 'As event images are captured they are stored to the filesystem with a numerical index. By default this index has three digits so the numbers start 001, 002 etc. This works works for most scenarios as events with more than 999 frames are rarely captured. However if you have extremely long events and use external applications then you may wish to increase this to ensure correct sorting of images in listings etc. Warning, increasing this value on a live system may render existing events unviewable as the event will have been saved with the previous scheme. Decreasing this value should have no ill effects.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 130, Name = 'ZM_DEFAULT_ASPECT_RATIO', Value = '4:3', Type = 'string', DefaultValue = '4:3', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'The default width:height aspect ratio used in monitors', Help = 'When specifying the dimensions of monitors you can click a checkbox to ensure that the width stays in the correct ratio to the height, or vice versa. This setting allows you to indicate what the ratio of these settings should be. This should be specified in the format : and the default of 4:3 normally be acceptable but 11:9 is another common setting. If the checkbox is not clicked when specifying monitor dimensions this setting has no effect.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 131, Name = 'ZM_USER_SELF_EDIT', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Allow unprivileged users to change their details', Help = 'Ordinarily only users with system edit privilege are able to change users details. Switching this option on allows ordinary users to change their passwords and their language settings', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 132, Name = 'ZM_OPT_FRAME_SERVER', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Should analysis farm out the writing of images to disk', Help = 'In some circumstances it is possible for a slow disk to take so long writing images to disk that it causes the analysis daemon to fall behind especially during high frame rate events. Setting this option to yes enables a frame server daemon (zmf) which will be sent the images from the analysis daemon and will do the actual writing of images itself freeing up the analysis daemon to get on with other things. Should this transmission fail or other permanent or transient error occur, this function will fall back to the analysis daemon.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 133, Name = 'ZM_FRAME_SOCKET_SIZE', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'Specify the frame server socket buffer size if non-standard', Help = 'For large captured images it is possible for the writes from the analysis daemon to the frame server to fail as the amount to be written exceeds the default buffer size. While the images are then written by the analysis daemon so no data is lost, it defeats the object of the frame server daemon in the first place. You can use this option to indicate that a larger buffer size should be used. Note that you may have to change the existing maximum socket buffer size on your system via sysctl (or in /proc/sys/net/core/wmem_max) to allow this new size to be set. Alternatively you can change the default buffer size on your system in the same way in which case that will be used with no change necessary in this option', Category = 'system', Readonly = '0', Requires = 'ZM_OPT_FRAME_SERVER=1'; +insert into Config set Id = 134, Name = 'ZM_OPT_CONTROL', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Support controllable (e.g. PTZ) cameras', Help = 'ZoneMinder includes limited support for controllable cameras. A number of sample protocols are included and others can easily be added. If you wish to control your cameras via ZoneMinder then select this option otherwise if you only have static cameras or use other control methods then leave this option off.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 135, Name = 'ZM_OPT_TRIGGERS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Interface external event triggers via socket or device files', Help = 'ZoneMinder can interact with external systems which prompt or cancel alarms. This is done via the zmtrigger.pl script. This option indicates whether you want to use these external triggers. Most people will say no here.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 136, Name = 'ZM_CHECK_FOR_UPDATES', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Check with zoneminder.com for updated versions', Help = 'From ZoneMinder version 1.17.0 onwards new versions are expected to be more frequent. To save checking manually for each new version ZoneMinder can check with the zoneminder.com website to determine the most recent release. These checks are infrequent, about once per week, and no personal or system information is transmitted other than your current version number. If you do not wish these checks to take place or your ZoneMinder system has no internet access you can switch these check off with this configuration variable', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 137, Name = 'ZM_UPDATE_CHECK_PROXY', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Proxy url if required to access zoneminder.com', Help = 'If you use a proxy to access the internet then ZoneMinder needs to know so it can access zoneminder.com to check for updates. If you do use a proxy enter the full proxy url here in the form of http://:/', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 138, Name = 'ZM_SHM_KEY', Value = '0x7a6d0000', Type = 'hexadecimal', DefaultValue = '0x7a6d0000', Hint = 'hexadecimal', Pattern = '(?^:^(?:0x)?([0-9a-f]{1,8})$)', Format = ' \"0x\".$1 ', Prompt = 'Shared memory root key to use', Help = 'ZoneMinder uses shared memory to speed up communication between modules. To identify the right area to use shared memory keys are used. This option controls what the base key is, each monitor will have it\'s Id or\'ed with this to get the actual key used. You will not normally need to change this value unless it clashes with another instance of ZoneMinder on the same machine. Only the first four hex digits are used, the lower four will be masked out and ignored.', Category = 'system', Readonly = '0', Requires = ''; +insert into Config set Id = 139, Name = 'ZM_WEB_REFRESH_METHOD', Value = 'javascript', Type = 'string', DefaultValue = 'javascript', Hint = 'javascript|http', Pattern = '(?^i:^([jh]))', Format = ' $1 =~ /^j/ ? \"javascript\" : \"http\" ', Prompt = 'What method windows should use to refresh themselves', Help = 'Many windows in Javascript need to refresh themselves to keep their information current. This option determines what method they should use to do this. Choosing \'javascript\' means that each window will have a short JavaScript statement in with a timer to prompt the refresh. This is the most compatible method. Choosing \'http\' means the refresh instruction is put in the HTTP header. This is a cleaner method but refreshes are interrupted or cancelled when a link in the window is clicked meaning that the window will no longer refresh and this would have to be done manually.', Category = 'hidden', Readonly = '0', Requires = ''; +insert into Config set Id = 140, Name = 'ZM_WEB_EVENT_SORT_FIELD', Value = 'DateTime', Type = 'string', DefaultValue = 'DateTime', Hint = 'Id|Name|Cause|MonitorName|DateTime|Length|Frames|AlarmFrames|TotScore|AvgScore|MaxScore', Pattern = '(?^:.)', Format = ' $1 ', Prompt = 'Default field the event lists are sorted by', Help = 'Events in lists can be initially ordered in any way you want. This option controls what field is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the \'Prev\' and \'Next\' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 141, Name = 'ZM_WEB_EVENT_SORT_ORDER', Value = 'asc', Type = 'string', DefaultValue = 'asc', Hint = 'asc|desc', Pattern = '(?^i:^([ad]))', Format = ' $1 =~ /^a/i ? \"asc\" : \"desc\" ', Prompt = 'Default order the event lists are sorted by', Help = 'Events in lists can be initially ordered in any way you want. This option controls what order (ascending or descending) is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the \'Prev\' and \'Next\' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 142, Name = 'ZM_WEB_EVENTS_PER_PAGE', Value = '25', Type = 'integer', DefaultValue = '25', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How many events to list per page in paged mode', Help = 'In the event list view you can either list all events or just a page at a time. This option controls how many events are listed per page in paged mode and how often to repeat the column headers in non-paged mode.', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 143, Name = 'ZM_WEB_LIST_THUMBS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Display mini-thumbnails of event images in event lists', Help = 'Ordinarily the event lists just display text details of the events to save space and time. By switching this option on you can also display small thumbnails to help you identify events of interest. The size of these thumbnails is controlled by the following two options.', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 144, Name = 'ZM_WEB_LIST_THUMB_WIDTH', Value = '48', Type = 'integer', DefaultValue = '48', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'The width of the thumbnails that appear in the event lists', Help = 'This options controls the width of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a height instead in the next option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.', Category = 'web', Readonly = '0', Requires = 'ZM_WEB_LIST_THUMBS=1'; +insert into Config set Id = 145, Name = 'ZM_WEB_LIST_THUMB_HEIGHT', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'The height of the thumbnails that appear in the event lists', Help = 'This options controls the height of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a width instead in the previous option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.', Category = 'web', Readonly = '0', Requires = 'ZM_WEB_LIST_THUMBS=1'; +insert into Config set Id = 146, Name = 'ZM_WEB_USE_OBJECT_TAGS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Wrap embed in object tags for media content', Help = 'There are two methods of including media content in web pages. The most common way is use the EMBED tag which is able to give some indication of the type of content. However this is not a standard part of HTML. The official method is to use OBJECT tags which are able to give more information allowing the correct media viewers etc to be loaded. However these are less widely supported and content may be specifically tailored to a particular platform or player. This option controls whether media content is enclosed in EMBED tags only or whether, where appropriate, it is additionally wrapped in OBJECT tags. Currently OBJECT tags are only used in a limited number of circumstances but they may become more widespread in the future. It is suggested that you leave this option on unless you encounter problems playing some content.', Category = 'web', Readonly = '0', Requires = ''; +insert into Config set Id = 147, Name = 'ZM_WEB_H_REFRESH_MAIN', Value = '300', Type = 'integer', DefaultValue = '300', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the main console window should refresh itself', Help = 'The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 148, Name = 'ZM_WEB_H_REFRESH_CYCLE', Value = '10', Type = 'integer', DefaultValue = '10', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the cycle watch window swaps to the next monitor', Help = 'The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 149, Name = 'ZM_WEB_H_REFRESH_IMAGE', Value = '5', Type = 'integer', DefaultValue = '5', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the watched image is refreshed (if not streaming)', Help = 'The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 150, Name = 'ZM_WEB_H_REFRESH_STATUS', Value = '3', Type = 'integer', DefaultValue = '3', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the status refreshes itself in the watch window', Help = 'The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 151, Name = 'ZM_WEB_H_REFRESH_EVENTS', Value = '30', Type = 'integer', DefaultValue = '30', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the event listing is refreshed in the watch window', Help = 'The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 152, Name = 'ZM_WEB_H_CAN_STREAM', Value = 'auto', Type = 'string', DefaultValue = 'auto', Hint = 'auto|yes|no', Pattern = '(?^i:^([ayn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : ($1 =~ /^n/ ? \"no\" : \"auto\" ) ', Prompt = 'Override the automatic detection of browser streaming capability', Help = 'If you know that your browser can handle image streams of the type \'multipart/x-mixed-replace\' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting \'yes\' will tell ZoneMinder that your browser can handle the streams natively, \'no\' means that it can\'t and so the plugin will be used while \'auto\' lets ZoneMinder decide.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 153, Name = 'ZM_WEB_H_STREAM_METHOD', Value = 'jpeg', Type = 'string', DefaultValue = 'jpeg', Hint = 'mpeg|jpeg', Pattern = '(?^i:^([mj]))', Format = ' $1 =~ /^m/ ? \"mpeg\" : \"jpeg\" ', Prompt = 'Which method should be used to send video streams to your browser.', Help = 'ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 154, Name = 'ZM_WEB_H_DEFAULT_SCALE', Value = '100', Type = 'integer', DefaultValue = '100', Hint = '25|33|50|75|100|150|200|300|400', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the default scaling factor applied to \'live\' or \'event\' views is (%)', Help = 'Normally ZoneMinder will display \'live\' or \'event\' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 155, Name = 'ZM_WEB_H_DEFAULT_RATE', Value = '100', Type = 'integer', DefaultValue = '100', Hint = '25|50|100|150|200|400|1000|2500|5000|10000', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the default replay rate factor applied to \'event\' views is (%)', Help = 'Normally ZoneMinder will display \'event\' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 156, Name = 'ZM_WEB_H_VIDEO_BITRATE', Value = '150000', Type = 'integer', DefaultValue = '150000', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the bitrate of the video encoded stream should be set to', Help = 'When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a \'quality\' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 157, Name = 'ZM_WEB_H_VIDEO_MAXFPS', Value = '15', Type = 'integer', DefaultValue = '15', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the maximum frame rate for streamed video should be', Help = 'When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 158, Name = 'ZM_WEB_H_SCALE_THUMBS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Scale thumbnails in events, bandwidth versus cpu in rescaling', Help = 'If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 159, Name = 'ZM_WEB_H_EVENTS_VIEW', Value = 'events', Type = 'string', DefaultValue = 'events', Hint = 'events|timeline', Pattern = '(?^i:^([lt]))', Format = ' $1 =~ /^e/ ? \"events\" : \"timeline\" ', Prompt = 'What the default view of multiple events should be.', Help = 'Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 160, Name = 'ZM_WEB_H_SHOW_PROGRESS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Show the progress of replay in event view.', Help = 'When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 161, Name = 'ZM_WEB_H_AJAX_TIMEOUT', Value = '3000', Type = 'integer', DefaultValue = '3000', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How long to wait for Ajax request responses (ms)', Help = 'The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.', Category = 'highband', Readonly = '0', Requires = ''; +insert into Config set Id = 162, Name = 'ZM_WEB_M_REFRESH_MAIN', Value = '300', Type = 'integer', DefaultValue = '300', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the main console window should refresh itself', Help = 'The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 163, Name = 'ZM_WEB_M_REFRESH_CYCLE', Value = '20', Type = 'integer', DefaultValue = '20', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the cycle watch window swaps to the next monitor', Help = 'The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 164, Name = 'ZM_WEB_M_REFRESH_IMAGE', Value = '10', Type = 'integer', DefaultValue = '10', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the watched image is refreshed (if not streaming)', Help = 'The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 165, Name = 'ZM_WEB_M_REFRESH_STATUS', Value = '5', Type = 'integer', DefaultValue = '5', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the status refreshes itself in the watch window', Help = 'The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 166, Name = 'ZM_WEB_M_REFRESH_EVENTS', Value = '60', Type = 'integer', DefaultValue = '60', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the event listing is refreshed in the watch window', Help = 'The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 167, Name = 'ZM_WEB_M_CAN_STREAM', Value = 'auto', Type = 'string', DefaultValue = 'auto', Hint = 'auto|yes|no', Pattern = '(?^i:^([ayn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : ($1 =~ /^n/ ? \"no\" : \"auto\" ) ', Prompt = 'Override the automatic detection of browser streaming capability', Help = 'If you know that your browser can handle image streams of the type \'multipart/x-mixed-replace\' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting \'yes\' will tell ZoneMinder that your browser can handle the streams natively, \'no\' means that it can\'t and so the plugin will be used while \'auto\' lets ZoneMinder decide.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 168, Name = 'ZM_WEB_M_STREAM_METHOD', Value = 'jpeg', Type = 'string', DefaultValue = 'jpeg', Hint = 'mpeg|jpeg', Pattern = '(?^i:^([mj]))', Format = ' $1 =~ /^m/ ? \"mpeg\" : \"jpeg\" ', Prompt = 'Which method should be used to send video streams to your browser.', Help = 'ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 169, Name = 'ZM_WEB_M_DEFAULT_SCALE', Value = '100', Type = 'integer', DefaultValue = '100', Hint = '25|33|50|75|100|150|200|300|400', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the default scaling factor applied to \'live\' or \'event\' views is (%)', Help = 'Normally ZoneMinder will display \'live\' or \'event\' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 170, Name = 'ZM_WEB_M_DEFAULT_RATE', Value = '100', Type = 'integer', DefaultValue = '100', Hint = '25|50|100|150|200|400|1000|2500|5000|10000', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the default replay rate factor applied to \'event\' views is (%)', Help = 'Normally ZoneMinder will display \'event\' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 171, Name = 'ZM_WEB_M_VIDEO_BITRATE', Value = '75000', Type = 'integer', DefaultValue = '75000', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the bitrate of the video encoded stream should be set to', Help = 'When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a \'quality\' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 172, Name = 'ZM_WEB_M_VIDEO_MAXFPS', Value = '10', Type = 'integer', DefaultValue = '10', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the maximum frame rate for streamed video should be', Help = 'When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 173, Name = 'ZM_WEB_M_SCALE_THUMBS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Scale thumbnails in events, bandwidth versus cpu in rescaling', Help = 'If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 174, Name = 'ZM_WEB_M_EVENTS_VIEW', Value = 'events', Type = 'string', DefaultValue = 'events', Hint = 'events|timeline', Pattern = '(?^i:^([lt]))', Format = ' $1 =~ /^e/ ? \"events\" : \"timeline\" ', Prompt = 'What the default view of multiple events should be.', Help = 'Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 175, Name = 'ZM_WEB_M_SHOW_PROGRESS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Show the progress of replay in event view.', Help = 'When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 176, Name = 'ZM_WEB_M_AJAX_TIMEOUT', Value = '5000', Type = 'integer', DefaultValue = '5000', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How long to wait for Ajax request responses (ms)', Help = 'The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.', Category = 'medband', Readonly = '0', Requires = ''; +insert into Config set Id = 177, Name = 'ZM_WEB_L_REFRESH_MAIN', Value = '300', Type = 'integer', DefaultValue = '300', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the main console window should refresh itself', Help = 'The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 178, Name = 'ZM_WEB_L_REFRESH_CYCLE', Value = '30', Type = 'integer', DefaultValue = '30', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the cycle watch window swaps to the next monitor', Help = 'The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 179, Name = 'ZM_WEB_L_REFRESH_IMAGE', Value = '15', Type = 'integer', DefaultValue = '15', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the watched image is refreshed (if not streaming)', Help = 'The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 180, Name = 'ZM_WEB_L_REFRESH_STATUS', Value = '10', Type = 'integer', DefaultValue = '10', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the status refreshes itself in the watch window', Help = 'The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 181, Name = 'ZM_WEB_L_REFRESH_EVENTS', Value = '180', Type = 'integer', DefaultValue = '180', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How often (in seconds) the event listing is refreshed in the watch window', Help = 'The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 182, Name = 'ZM_WEB_L_CAN_STREAM', Value = 'auto', Type = 'string', DefaultValue = 'auto', Hint = 'auto|yes|no', Pattern = '(?^i:^([ayn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : ($1 =~ /^n/ ? \"no\" : \"auto\" ) ', Prompt = 'Override the automatic detection of browser streaming capability', Help = 'If you know that your browser can handle image streams of the type \'multipart/x-mixed-replace\' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting \'yes\' will tell ZoneMinder that your browser can handle the streams natively, \'no\' means that it can\'t and so the plugin will be used while \'auto\' lets ZoneMinder decide.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 183, Name = 'ZM_WEB_L_STREAM_METHOD', Value = 'jpeg', Type = 'string', DefaultValue = 'jpeg', Hint = 'mpeg|jpeg', Pattern = '(?^i:^([mj]))', Format = ' $1 =~ /^m/ ? \"mpeg\" : \"jpeg\" ', Prompt = 'Which method should be used to send video streams to your browser.', Help = 'ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 184, Name = 'ZM_WEB_L_DEFAULT_SCALE', Value = '100', Type = 'integer', DefaultValue = '100', Hint = '25|33|50|75|100|150|200|300|400', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the default scaling factor applied to \'live\' or \'event\' views is (%)', Help = 'Normally ZoneMinder will display \'live\' or \'event\' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 185, Name = 'ZM_WEB_L_DEFAULT_RATE', Value = '100', Type = 'integer', DefaultValue = '100', Hint = '25|50|100|150|200|400|1000|2500|5000|10000', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the default replay rate factor applied to \'event\' views is (%)', Help = 'Normally ZoneMinder will display \'event\' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 186, Name = 'ZM_WEB_L_VIDEO_BITRATE', Value = '25000', Type = 'integer', DefaultValue = '25000', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the bitrate of the video encoded stream should be set to', Help = 'When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a \'quality\' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 187, Name = 'ZM_WEB_L_VIDEO_MAXFPS', Value = '5', Type = 'integer', DefaultValue = '5', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the maximum frame rate for streamed video should be', Help = 'When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 188, Name = 'ZM_WEB_L_SCALE_THUMBS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Scale thumbnails in events, bandwidth versus cpu in rescaling', Help = 'If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 189, Name = 'ZM_WEB_L_EVENTS_VIEW', Value = 'events', Type = 'string', DefaultValue = 'events', Hint = 'events|timeline', Pattern = '(?^i:^([lt]))', Format = ' $1 =~ /^e/ ? \"events\" : \"timeline\" ', Prompt = 'What the default view of multiple events should be.', Help = 'Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 190, Name = 'ZM_WEB_L_SHOW_PROGRESS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Show the progress of replay in event view.', Help = 'When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 191, Name = 'ZM_WEB_L_AJAX_TIMEOUT', Value = '10000', Type = 'integer', DefaultValue = '10000', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How long to wait for Ajax request responses (ms)', Help = 'The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.', Category = 'lowband', Readonly = '0', Requires = ''; +insert into Config set Id = 192, Name = 'ZM_WEB_P_CAN_STREAM', Value = 'auto', Type = 'string', DefaultValue = 'auto', Hint = 'auto|yes|no', Pattern = '(?^i:^([ayn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : ($1 =~ /^n/ ? \"no\" : \"auto\" ) ', Prompt = 'Override the automatic detection of browser streaming capability', Help = 'If you know that your browser can handle image streams of the type \'multipart/x-mixed-replace\' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting \'yes\' will tell ZoneMinder that your browser can handle the streams natively, \'no\' means that it can\'t and so the plugin will be used while \'auto\' lets ZoneMinder decide.', Category = 'phoneband', Readonly = '0', Requires = ''; +insert into Config set Id = 193, Name = 'ZM_WEB_P_STREAM_METHOD', Value = 'jpeg', Type = 'string', DefaultValue = 'jpeg', Hint = 'mpeg|jpeg', Pattern = '(?^i:^([mj]))', Format = ' $1 =~ /^m/ ? \"mpeg\" : \"jpeg\" ', Prompt = 'Which method should be used to send video streams to your browser.', Help = 'ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer', Category = 'phoneband', Readonly = '0', Requires = ''; +insert into Config set Id = 194, Name = 'ZM_WEB_P_DEFAULT_SCALE', Value = '100', Type = 'integer', DefaultValue = '100', Hint = '25|33|50|75|100|150|200|300|400', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the default scaling factor applied to \'live\' or \'event\' views is (%)', Help = 'Normally ZoneMinder will display \'live\' or \'event\' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.', Category = 'phoneband', Readonly = '0', Requires = ''; +insert into Config set Id = 195, Name = 'ZM_WEB_P_DEFAULT_RATE', Value = '100', Type = 'integer', DefaultValue = '100', Hint = '25|50|100|150|200|400|1000|2500|5000|10000', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the default replay rate factor applied to \'event\' views is (%)', Help = 'Normally ZoneMinder will display \'event\' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.', Category = 'phoneband', Readonly = '0', Requires = ''; +insert into Config set Id = 196, Name = 'ZM_WEB_P_VIDEO_BITRATE', Value = '8000', Type = 'integer', DefaultValue = '8000', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the bitrate of the video encoded stream should be set to', Help = 'When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a \'quality\' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.', Category = 'phoneband', Readonly = '0', Requires = ''; +insert into Config set Id = 197, Name = 'ZM_WEB_P_VIDEO_MAXFPS', Value = '5', Type = 'integer', DefaultValue = '5', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'What the maximum frame rate for streamed video should be', Help = 'When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.', Category = 'phoneband', Readonly = '0', Requires = ''; +insert into Config set Id = 198, Name = 'ZM_WEB_P_SCALE_THUMBS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Scale thumbnails in events, bandwidth versus cpu in rescaling', Help = 'If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.', Category = 'phoneband', Readonly = '0', Requires = ''; +insert into Config set Id = 199, Name = 'ZM_WEB_P_AJAX_TIMEOUT', Value = '10000', Type = 'integer', DefaultValue = '10000', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'How long to wait for Ajax request responses (ms)', Help = 'The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.', Category = 'phoneband', Readonly = '0', Requires = ''; +insert into Config set Id = 200, Name = 'ZM_DYN_LAST_VERSION', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'What the last version of ZoneMinder recorded from zoneminder.com is', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; +insert into Config set Id = 201, Name = 'ZM_DYN_CURR_VERSION', Value = '1.25.0', Type = 'string', DefaultValue = '1.25.0', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'What the effective current version of ZoneMinder is, might be different from actual if versions ignored', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; +insert into Config set Id = 202, Name = 'ZM_DYN_DB_VERSION', Value = '1.25.0', Type = 'string', DefaultValue = '1.25.0', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'What the version of the database is, from zmupdate', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; +insert into Config set Id = 203, Name = 'ZM_DYN_LAST_CHECK', Value = '', Type = 'integer', DefaultValue = '', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'When the last check for version from zoneminder.com was', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; +insert into Config set Id = 204, Name = 'ZM_DYN_NEXT_REMINDER', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'When the earliest time to remind about versions will be', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; +insert into Config set Id = 205, Name = 'ZM_DYN_DONATE_REMINDER_TIME', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'integer', Pattern = '(?^:^(\d+)$)', Format = ' $1 ', Prompt = 'When the earliest time to remind about donations will be', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; +insert into Config set Id = 206, Name = 'ZM_DYN_SHOW_DONATE_REMINDER', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Remind about donations or not', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; +insert into Config set Id = 207, Name = 'ZM_EYEZM_DEBUG', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Switch additional debugging on for eyeZm Plugin', Help = 'Enable or Disable extra debugging from the eyeZm Plugin. Extra debugging information will be displayed in it\'s own file (EYEZM_LOG_TO_FILE is set), or your Apache error log', Category = 'eyeZm', Readonly = '0', Requires = ''; +insert into Config set Id = 208, Name = 'ZM_EYEZM_LOG_TO_FILE', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'When eyeZm Debugging is enabled, enabling this logs output to it\'s own file', Help = 'When EYEZM_DEBUG is on and EYEZM_LOG_TO_FILE is on, output generated from the eyeZm Plugin will go to it\'s own file. Otherwise it will go to the apache error log.', Category = 'eyeZm', Readonly = '0', Requires = ''; +insert into Config set Id = 209, Name = 'ZM_EYEZM_LOG_FILE', Value = '/var/log/zm/zm_xml.log', Type = 'string', DefaultValue = '/var/log/zm/zm_xml.log', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Default filename to use when logging eyeZm Output and EYEZM_LOG_TO_FILE is enabled', Help = 'This file will contain it\'s own output from the eyeZm Plugin when EYEZM_LOG_TO_FILE and EYEZM_DEBUG are both enabled', Category = 'eyeZm', Readonly = '0', Requires = ''; +insert into Config set Id = 210, Name = 'ZM_EYEZM_EVENT_VCODEC', Value = 'mpeg4', Type = 'string', DefaultValue = 'mpeg4', Hint = 'mpeg4|h264', Pattern = '(?^i:^([mh]))', Format = ' $1 =~ /^m/ ? \"mpeg4\" : \"h264\" ', Prompt = 'Default video-codec to use for encoding events', Help = 'The eyeZm Plugin calls FFMPEG externally to encode the captured images. If your FFMPEG is not built with support for H264, change this to MPEG-4. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+).', Category = 'eyeZm', Readonly = '0', Requires = ''; +insert into Config set Id = 211, Name = 'ZM_EYEZM_FEED_VCODEC', Value = 'mjpeg', Type = 'string', DefaultValue = 'mjpeg', Hint = 'mjpeg|h264', Pattern = '(?^i:^([mh]))', Format = ' $1 =~ /^m/ ? \"mjpeg\" : \"h264\" ', Prompt = 'Default video-codec to use for streaming the live feed', Help = 'Determines whether the live stream is generated using native MJPEG streaming with ZoneMinder, or H264 using FFMPEG and HTML-5 streaming. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+). This is just a default parameter, and can be overridden with eyeZm.', Category = 'eyeZm', Readonly = '0', Requires = ''; +insert into Config set Id = 212, Name = 'ZM_EYEZM_H264_DEFAULT_BR', Value = '96k', Type = 'string', DefaultValue = '96k', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Default bit-rate to use with FFMPEG for H264 streaming', Help = 'When using the eyeZm Plugin to stream H264 data, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.', Category = 'eyeZm', Readonly = '0', Requires = ''; +insert into Config set Id = 213, Name = 'ZM_EYEZM_H264_DEFAULT_EVBR', Value = '128k', Type = 'string', DefaultValue = '128k', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Default bit-rate to use with FFMPEG for H264 event viewing', Help = 'When using the eyeZm Plugin to view events in H264, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.', Category = 'eyeZm', Readonly = '0', Requires = ''; +insert into Config set Id = 214, Name = 'ZM_EYEZM_H264_TIMEOUT', Value = '20', Type = 'string', DefaultValue = '20', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Timeout (sec) to wait for H264 stream to start before terminating', Help = 'The eyeZm Plugin will attempt to spawn an H264 stream when requested, and require that it complete within the timeout specified. If you have a slow system or find through the logs that the H264 stream is not starting because the timeout is expiring, even though FFMPEG is running, try increasing this value. If you have a fast system, decreasing this value can improve the responsiveness when there are issues starting H264 streams', Category = 'eyeZm', Readonly = '0', Requires = ''; +insert into Config set Id = 215, Name = 'ZM_EYEZM_SEG_DURATION', Value = '3', Type = 'string', DefaultValue = '3', Hint = 'string', Pattern = '(?^:^(.+)$)', Format = ' $1 ', Prompt = 'Segment duration used for streaming using HTTP-5 Streaming protocol', Help = 'The HTTP-5 Live Streaming Protocol segments the input video stream into small chunks of a duration specified by this parameter. Increasing the segment duration will help with choppy connections on the other end, but will increase the latency in starting a stream.', Category = 'eyeZm', Readonly = '0', Requires = ''; +insert into Config set Id = 216, Name = 'ZM_PATH_PLUGINS', Value = '/usr/share/zm', Type = 'string', DefaultValue = '/usr/share/zm', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'Path to the plugin folder', Help = '3d-party plugins have to be placed here.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 217, Name = 'ZM_PLUGIN_EXTENSION', Value = '.zmpl', Type = 'string', DefaultValue = '.zmpl', Hint = 'relative/path/to/somewhere', Pattern = '(?^:^((?:[^/].*)?)/?$)', Format = ' $1 ', Prompt = 'Default extension of plugins to found.', Help = 'Default extension of plugins to found.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 218, Name = 'ZM_PLUGINS_CONFIG_PATH', Value = '/usr/share/zm/plugins.conf', Type = 'string', DefaultValue = '/usr/share/zm/plugins.conf', Hint = '/absolute/path/to/somewhere', Pattern = '(?^:^((?:/[^/]*)+?)/?$)', Format = ' $1 ', Prompt = 'Path to the config file for plugins.', Help = 'Path to the config file for plugins.', Category = 'paths', Readonly = '0', Requires = ''; +insert into Config set Id = 219, Name = 'ZM_LOAD_PLUGINS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Load and use 3d-party plugins', Help = '3d-party plugins will be loaded and used for analysing.', Category = 'config', Readonly = '0', Requires = ''; +insert into Config set Id = 220, Name = 'ZM_TURNOFF_NATIVE_ANALYSIS', Value = '0', Type = 'boolean', DefaultValue = 'no', Hint = 'yes|no', Pattern = '(?^i:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Turn native ZM\'s image analysis possibility off', Help = 'Image analysis with ZM\'s motion detected function will be turned off. Only detection functions from loaded plugins will be used. Note, that if no plugins have be loaded, no detection will be done.', Category = 'config', Readonly = '0', Requires = ''; + diff --git a/db/zm_create.sql.in b/db/zm_create.sql.in index 3a2b2eb33..d26be4ab7 100644 --- a/db/zm_create.sql.in +++ b/db/zm_create.sql.in @@ -368,6 +368,8 @@ CREATE TABLE `Monitors` ( `SignalCheckColour` varchar(32) NOT NULL default '#0000BE', `WebColour` varchar(32) NOT NULL default 'red', `Sequence` smallint(5) unsigned default NULL, + `UsedPl` varchar(88) NOT NULL default '', + `DoNativeMotDet` tinyint(3) unsigned NOT NULL default '1', PRIMARY KEY (`Id`) ) ENGINE=@ZM_MYSQL_ENGINE@; diff --git a/db/zm_create.sql.in.orig b/db/zm_create.sql.in.orig new file mode 100644 index 000000000..0c48e7ca3 --- /dev/null +++ b/db/zm_create.sql.in.orig @@ -0,0 +1,621 @@ +-- MySQL dump 10.9 +-- +-- Host: localhost Database: @ZM_DB_NAME@ +-- ------------------------------------------------------ +-- Server version 4.1.16-log + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Current Database: `@ZM_DB_NAME@` +-- + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `@ZM_DB_NAME@`; + +USE `@ZM_DB_NAME@`; + +-- +-- Table structure for table `Config` +-- + +DROP TABLE IF EXISTS `Config`; +CREATE TABLE `Config` ( + `Id` smallint(5) unsigned NOT NULL default '0', + `Name` varchar(32) NOT NULL default '', + `Value` text NOT NULL, + `Type` tinytext NOT NULL, + `DefaultValue` tinytext, + `Hint` tinytext, + `Pattern` tinytext, + `Format` tinytext, + `Prompt` tinytext, + `Help` text, + `Category` varchar(32) NOT NULL default '', + `Readonly` tinyint(3) unsigned NOT NULL default '0', + `Requires` text, + PRIMARY KEY (`Name`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `ControlPresets` +-- + +DROP TABLE IF EXISTS `ControlPresets`; +CREATE TABLE `ControlPresets` ( + `MonitorId` int(10) unsigned NOT NULL default '0', + `Preset` int(10) unsigned NOT NULL default '0', + `Label` varchar(64) NOT NULL default '', + PRIMARY KEY (`MonitorId`,`Preset`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Controls` +-- + +DROP TABLE IF EXISTS `Controls`; +CREATE TABLE `Controls` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `Type` enum('Local','Remote') NOT NULL default 'Local', + `Protocol` varchar(64) default NULL, + `CanWake` tinyint(3) unsigned NOT NULL default '0', + `CanSleep` tinyint(3) unsigned NOT NULL default '0', + `CanReset` tinyint(3) unsigned NOT NULL default '0', + `CanZoom` tinyint(3) unsigned NOT NULL default '0', + `CanAutoZoom` tinyint(3) unsigned NOT NULL default '0', + `CanZoomAbs` tinyint(3) unsigned NOT NULL default '0', + `CanZoomRel` tinyint(3) unsigned NOT NULL default '0', + `CanZoomCon` tinyint(3) unsigned NOT NULL default '0', + `MinZoomRange` int(10) unsigned default NULL, + `MaxZoomRange` int(10) unsigned default NULL, + `MinZoomStep` int(10) unsigned default NULL, + `MaxZoomStep` int(10) unsigned default NULL, + `HasZoomSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinZoomSpeed` int(10) unsigned default NULL, + `MaxZoomSpeed` int(10) unsigned default NULL, + `CanFocus` tinyint(3) unsigned NOT NULL default '0', + `CanAutoFocus` tinyint(3) unsigned NOT NULL default '0', + `CanFocusAbs` tinyint(3) unsigned NOT NULL default '0', + `CanFocusRel` tinyint(3) unsigned NOT NULL default '0', + `CanFocusCon` tinyint(3) unsigned NOT NULL default '0', + `MinFocusRange` int(10) unsigned default NULL, + `MaxFocusRange` int(10) unsigned default NULL, + `MinFocusStep` int(10) unsigned default NULL, + `MaxFocusStep` int(10) unsigned default NULL, + `HasFocusSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinFocusSpeed` int(10) unsigned default NULL, + `MaxFocusSpeed` int(10) unsigned default NULL, + `CanIris` tinyint(3) unsigned NOT NULL default '0', + `CanAutoIris` tinyint(3) unsigned NOT NULL default '0', + `CanIrisAbs` tinyint(3) unsigned NOT NULL default '0', + `CanIrisRel` tinyint(3) unsigned NOT NULL default '0', + `CanIrisCon` tinyint(3) unsigned NOT NULL default '0', + `MinIrisRange` int(10) unsigned default NULL, + `MaxIrisRange` int(10) unsigned default NULL, + `MinIrisStep` int(10) unsigned default NULL, + `MaxIrisStep` int(10) unsigned default NULL, + `HasIrisSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinIrisSpeed` int(10) unsigned default NULL, + `MaxIrisSpeed` int(10) unsigned default NULL, + `CanGain` tinyint(3) unsigned NOT NULL default '0', + `CanAutoGain` tinyint(3) unsigned NOT NULL default '0', + `CanGainAbs` tinyint(3) unsigned NOT NULL default '0', + `CanGainRel` tinyint(3) unsigned NOT NULL default '0', + `CanGainCon` tinyint(3) unsigned NOT NULL default '0', + `MinGainRange` int(10) unsigned default NULL, + `MaxGainRange` int(10) unsigned default NULL, + `MinGainStep` int(10) unsigned default NULL, + `MaxGainStep` int(10) unsigned default NULL, + `HasGainSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinGainSpeed` int(10) unsigned default NULL, + `MaxGainSpeed` int(10) unsigned default NULL, + `CanWhite` tinyint(3) unsigned NOT NULL default '0', + `CanAutoWhite` tinyint(3) unsigned NOT NULL default '0', + `CanWhiteAbs` tinyint(3) unsigned NOT NULL default '0', + `CanWhiteRel` tinyint(3) unsigned NOT NULL default '0', + `CanWhiteCon` tinyint(3) unsigned NOT NULL default '0', + `MinWhiteRange` int(10) unsigned default NULL, + `MaxWhiteRange` int(10) unsigned default NULL, + `MinWhiteStep` int(10) unsigned default NULL, + `MaxWhiteStep` int(10) unsigned default NULL, + `HasWhiteSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinWhiteSpeed` int(10) unsigned default NULL, + `MaxWhiteSpeed` int(10) unsigned default NULL, + `HasPresets` tinyint(3) unsigned NOT NULL default '0', + `NumPresets` tinyint(3) unsigned NOT NULL default '0', + `HasHomePreset` tinyint(3) unsigned NOT NULL default '0', + `CanSetPresets` tinyint(3) unsigned NOT NULL default '0', + `CanMove` tinyint(3) unsigned NOT NULL default '0', + `CanMoveDiag` tinyint(3) unsigned NOT NULL default '0', + `CanMoveMap` tinyint(3) unsigned NOT NULL default '0', + `CanMoveAbs` tinyint(3) unsigned NOT NULL default '0', + `CanMoveRel` tinyint(3) unsigned NOT NULL default '0', + `CanMoveCon` tinyint(3) unsigned NOT NULL default '0', + `CanPan` tinyint(3) unsigned NOT NULL default '0', + `MinPanRange` int(10) default NULL, + `MaxPanRange` int(10) default NULL, + `MinPanStep` int(10) default NULL, + `MaxPanStep` int(10) default NULL, + `HasPanSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinPanSpeed` int(10) default NULL, + `MaxPanSpeed` int(10) default NULL, + `HasTurboPan` tinyint(3) unsigned NOT NULL default '0', + `TurboPanSpeed` int(10) default NULL, + `CanTilt` tinyint(3) unsigned NOT NULL default '0', + `MinTiltRange` int(10) default NULL, + `MaxTiltRange` int(10) default NULL, + `MinTiltStep` int(10) default NULL, + `MaxTiltStep` int(10) default NULL, + `HasTiltSpeed` tinyint(3) unsigned NOT NULL default '0', + `MinTiltSpeed` int(10) default NULL, + `MaxTiltSpeed` int(10) default NULL, + `HasTurboTilt` tinyint(3) unsigned NOT NULL default '0', + `TurboTiltSpeed` int(10) default NULL, + `CanAutoScan` tinyint(3) unsigned NOT NULL default '0', + `NumScanPaths` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`Id`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Devices` +-- + +DROP TABLE IF EXISTS `Devices`; +CREATE TABLE `Devices` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` tinytext NOT NULL, + `Type` enum('X10') NOT NULL default 'X10', + `KeyString` varchar(32) NOT NULL default '', + PRIMARY KEY (`Id`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Events` +-- + +DROP TABLE IF EXISTS `Events`; +CREATE TABLE `Events` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `MonitorId` int(10) unsigned NOT NULL default '0', + `Name` varchar(64) NOT NULL default '', + `Cause` varchar(32) NOT NULL default '', + `StartTime` datetime default NULL, + `EndTime` datetime default NULL, + `Width` smallint(5) unsigned NOT NULL default '0', + `Height` smallint(5) unsigned NOT NULL default '0', + `Length` decimal(10,2) NOT NULL default '0.00', + `Frames` int(10) unsigned default NULL, + `AlarmFrames` int(10) unsigned default NULL, + `TotScore` int(10) unsigned NOT NULL default '0', + `AvgScore` smallint(5) unsigned default '0', + `MaxScore` smallint(5) unsigned default '0', + `Archived` tinyint(3) unsigned NOT NULL default '0', + `Videoed` tinyint(3) unsigned NOT NULL default '0', + `Uploaded` tinyint(3) unsigned NOT NULL default '0', + `Emailed` tinyint(3) unsigned NOT NULL default '0', + `Messaged` tinyint(3) unsigned NOT NULL default '0', + `Executed` tinyint(3) unsigned NOT NULL default '0', + `Notes` text, + PRIMARY KEY (`Id`,`MonitorId`), + KEY `MonitorId` (`MonitorId`), + KEY `StartTime` (`StartTime`), + KEY `Frames` (`Frames`), + KEY `Archived` (`Archived`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Filters` +-- + +DROP TABLE IF EXISTS `Filters`; +CREATE TABLE `Filters` ( + `Name` varchar(64) NOT NULL default '', + `Query` text NOT NULL, + `AutoArchive` tinyint(3) unsigned NOT NULL default '0', + `AutoVideo` tinyint(3) unsigned NOT NULL default '0', + `AutoUpload` tinyint(3) unsigned NOT NULL default '0', + `AutoEmail` tinyint(3) unsigned NOT NULL default '0', + `AutoMessage` tinyint(3) unsigned NOT NULL default '0', + `AutoExecute` tinyint(3) unsigned NOT NULL default '0', + `AutoExecuteCmd` tinytext, + `AutoDelete` tinyint(3) unsigned NOT NULL default '0', + `Background` tinyint(1) unsigned NOT NULL default '0', + PRIMARY KEY (`Name`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Frames` +-- + +DROP TABLE IF EXISTS `Frames`; +CREATE TABLE `Frames` ( + `EventId` int(10) unsigned NOT NULL default '0', + `FrameId` int(10) unsigned NOT NULL default '0', + `Type` enum('Normal','Bulk','Alarm') NOT NULL default 'Normal', + `TimeStamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, + `Delta` decimal(8,2) NOT NULL default '0.00', + `Score` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`EventId`,`FrameId`), + KEY `Type` (`Type`), + KEY `TimeStamp` (`TimeStamp`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Groups` +-- + +DROP TABLE IF EXISTS `Groups`; +CREATE TABLE `Groups` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `MonitorIds` tinytext NOT NULL, + PRIMARY KEY (`Id`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Logs` +-- +CREATE TABLE `Logs` ( + `TimeKey` decimal(16,6) NOT NULL, + `Component` varchar(32) NOT NULL, + `Pid` smallint(6) DEFAULT NULL, + `Level` tinyint(3) NOT NULL, + `Code` char(3) NOT NULL, + `Message` varchar(255) NOT NULL, + `File` varchar(255) DEFAULT NULL, + `Line` smallint(5) unsigned DEFAULT NULL, + KEY `TimeKey` (`TimeKey`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `MonitorPresets` +-- + +DROP TABLE IF EXISTS `MonitorPresets`; +CREATE TABLE `MonitorPresets` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `Type` enum('Local','Remote','File','Ffmpeg') NOT NULL default 'Local', + `Device` tinytext, + `Channel` tinyint(3) unsigned default NULL, + `Format` int(10) unsigned default NULL, + `Protocol` varchar(16) default NULL, + `Method` varchar(16) default NULL, + `Host` varchar(64) default NULL, + `Port` varchar(8) default NULL, + `Path` varchar(255) default NULL, + `SubPath` varchar(64) default NULL, + `Width` smallint(5) unsigned default NULL, + `Height` smallint(5) unsigned default NULL, + `Palette` int(10) unsigned default NULL, + `MaxFPS` decimal(5,2) default NULL, + `Controllable` tinyint(3) unsigned NOT NULL default '0', + `ControlId` varchar(16) default NULL, + `ControlDevice` varchar(255) default NULL, + `ControlAddress` varchar(255) default NULL, + `DefaultRate` smallint(5) unsigned NOT NULL default '100', + `DefaultScale` smallint(5) unsigned NOT NULL default '100', + PRIMARY KEY (`Id`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Monitors` +-- + +DROP TABLE IF EXISTS `Monitors`; +CREATE TABLE `Monitors` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `Type` enum('Local','Remote','File','Ffmpeg') NOT NULL default 'Local', + `Function` enum('None','Monitor','Modect','Record','Mocord','Nodect') NOT NULL default 'Monitor', + `Enabled` tinyint(3) unsigned NOT NULL default '1', + `LinkedMonitors` varchar(255) NOT NULL default '', + `Triggers` set('X10') NOT NULL default '', + `Device` varchar(64) NOT NULL default '', + `Channel` tinyint(3) unsigned NOT NULL default '0', + `Format` int(10) unsigned NOT NULL default '0', + `Protocol` varchar(16) NOT NULL default '', + `Method` varchar(16) NOT NULL default '', + `Host` varchar(64) NOT NULL default '', + `Port` varchar(8) NOT NULL default '', + `SubPath` varchar(64) NOT NULL default '', + `Path` varchar(255) NOT NULL default '', + `Width` smallint(5) unsigned NOT NULL default '0', + `Height` smallint(5) unsigned NOT NULL default '0', + `Colours` tinyint(3) unsigned NOT NULL default '1', + `Palette` int(10) unsigned NOT NULL default '0', + `Orientation` enum('0','90','180','270','hori','vert') NOT NULL default '0', + `Deinterlacing` int(10) unsigned NOT NULL default '0', + `Brightness` mediumint(7) NOT NULL default '-1', + `Contrast` mediumint(7) NOT NULL default '-1', + `Hue` mediumint(7) NOT NULL default '-1', + `Colour` mediumint(7) NOT NULL default '-1', + `EventPrefix` varchar(32) NOT NULL default 'Event-', + `LabelFormat` varchar(64) NOT NULL default '%N - %y/%m/%d %H:%M:%S', + `LabelX` smallint(5) unsigned NOT NULL default '0', + `LabelY` smallint(5) unsigned NOT NULL default '0', + `ImageBufferCount` smallint(5) unsigned NOT NULL default '100', + `WarmupCount` smallint(5) unsigned NOT NULL default '25', + `PreEventCount` smallint(5) unsigned NOT NULL default '10', + `PostEventCount` smallint(5) unsigned NOT NULL default '10', + `StreamReplayBuffer` int(10) unsigned NOT NULL default '1000', + `AlarmFrameCount` smallint(5) unsigned NOT NULL default '1', + `SectionLength` int(10) unsigned NOT NULL default '600', + `FrameSkip` smallint(5) unsigned NOT NULL default '0', + `MaxFPS` decimal(5,2) default NULL, + `AlarmMaxFPS` decimal(5,2) default NULL, + `FPSReportInterval` smallint(5) unsigned NOT NULL default '250', + `RefBlendPerc` tinyint(3) unsigned NOT NULL default '10', + `Controllable` tinyint(3) unsigned NOT NULL default '0', + `ControlId` int(10) unsigned NOT NULL default '0', + `ControlDevice` varchar(255) default NULL, + `ControlAddress` varchar(255) default NULL, + `AutoStopTimeout` decimal(5,2) default NULL, + `TrackMotion` tinyint(3) unsigned NOT NULL default '0', + `TrackDelay` smallint(5) unsigned NOT NULL default '0', + `ReturnLocation` tinyint(3) NOT NULL default '-1', + `ReturnDelay` smallint(5) unsigned NOT NULL default '0', + `DefaultView` enum('Events','Control') NOT NULL default 'Events', + `DefaultRate` smallint(5) unsigned NOT NULL default '100', + `DefaultScale` smallint(5) unsigned NOT NULL default '100', + `SignalCheckColour` varchar(32) NOT NULL default '#0000BE', + `WebColour` varchar(32) NOT NULL default 'red', + `Sequence` smallint(5) unsigned default NULL, + PRIMARY KEY (`Id`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `States` +-- + +DROP TABLE IF EXISTS `States`; +CREATE TABLE `States` ( + `Name` varchar(64) NOT NULL default '', + `Definition` text NOT NULL, + PRIMARY KEY (`Name`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Stats` +-- + +DROP TABLE IF EXISTS `Stats`; +CREATE TABLE `Stats` ( + `MonitorId` int(10) unsigned NOT NULL default '0', + `ZoneId` int(10) unsigned NOT NULL default '0', + `EventId` int(10) unsigned NOT NULL default '0', + `FrameId` int(10) unsigned NOT NULL default '0', + `PixelDiff` tinyint(3) unsigned NOT NULL default '0', + `AlarmPixels` int(10) unsigned NOT NULL default '0', + `FilterPixels` int(10) unsigned NOT NULL default '0', + `BlobPixels` int(10) unsigned NOT NULL default '0', + `Blobs` smallint(5) unsigned NOT NULL default '0', + `MinBlobSize` int(10) unsigned NOT NULL default '0', + `MaxBlobSize` int(10) unsigned NOT NULL default '0', + `MinX` smallint(5) unsigned NOT NULL default '0', + `MaxX` smallint(5) unsigned NOT NULL default '0', + `MinY` smallint(5) unsigned NOT NULL default '0', + `MaxY` smallint(5) unsigned NOT NULL default '0', + `Score` smallint(5) unsigned NOT NULL default '0', + KEY `EventId` (`EventId`), + KEY `MonitorId` (`MonitorId`), + KEY `ZoneId` (`ZoneId`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `TriggersX10` +-- + +DROP TABLE IF EXISTS `TriggersX10`; +CREATE TABLE `TriggersX10` ( + `MonitorId` int(10) unsigned NOT NULL default '0', + `Activation` varchar(32) default NULL, + `AlarmInput` varchar(32) default NULL, + `AlarmOutput` varchar(32) default NULL, + PRIMARY KEY (`MonitorId`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Users` +-- + +DROP TABLE IF EXISTS `Users`; +CREATE TABLE `Users` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Username` varchar(32) character set latin1 collate latin1_bin NOT NULL default '', + `Password` varchar(64) NOT NULL default '', + `Language` varchar(8) NOT NULL default '', + `Enabled` tinyint(3) unsigned NOT NULL default '1', + `Stream` enum('None','View') NOT NULL default 'None', + `Events` enum('None','View','Edit') NOT NULL default 'None', + `Control` enum('None','View','Edit') NOT NULL default 'None', + `Monitors` enum('None','View','Edit') NOT NULL default 'None', + `Devices` enum('None','View','Edit') NOT NULL default 'None', + `System` enum('None','View','Edit') NOT NULL default 'None', + `MaxBandwidth` varchar(16) NOT NULL default '', + `MonitorIds` tinytext NOT NULL, + PRIMARY KEY (`Id`), + UNIQUE KEY `UC_Username` (`Username`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `ZonePresets` +-- + +DROP TABLE IF EXISTS `ZonePresets`; +CREATE TABLE `ZonePresets` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `Type` enum('Active','Inclusive','Exclusive','Preclusive','Inactive') NOT NULL default 'Active', + `Units` enum('Pixels','Percent') NOT NULL default 'Pixels', + `CheckMethod` enum('AlarmedPixels','FilteredPixels','Blobs') NOT NULL default 'Blobs', + `MinPixelThreshold` smallint(5) unsigned default NULL, + `MaxPixelThreshold` smallint(5) unsigned default NULL, + `MinAlarmPixels` int(10) unsigned default NULL, + `MaxAlarmPixels` int(10) unsigned default NULL, + `FilterX` tinyint(3) unsigned default NULL, + `FilterY` tinyint(3) unsigned default NULL, + `MinFilterPixels` int(10) unsigned default NULL, + `MaxFilterPixels` int(10) unsigned default NULL, + `MinBlobPixels` int(10) unsigned default NULL, + `MaxBlobPixels` int(10) unsigned default NULL, + `MinBlobs` smallint(5) unsigned default NULL, + `MaxBlobs` smallint(5) unsigned default NULL, + `OverloadFrames` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`Id`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +-- +-- Table structure for table `Zones` +-- + +DROP TABLE IF EXISTS `Zones`; +CREATE TABLE `Zones` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `MonitorId` int(10) unsigned NOT NULL default '0', + `Name` varchar(64) NOT NULL default '', + `Type` enum('Active','Inclusive','Exclusive','Preclusive','Inactive') NOT NULL default 'Active', + `Units` enum('Pixels','Percent') NOT NULL default 'Pixels', + `NumCoords` tinyint(3) unsigned NOT NULL default '0', + `Coords` tinytext NOT NULL, + `Area` int(10) unsigned NOT NULL default '0', + `AlarmRGB` int(10) unsigned default '0', + `CheckMethod` enum('AlarmedPixels','FilteredPixels','Blobs') NOT NULL default 'Blobs', + `MinPixelThreshold` smallint(5) unsigned default NULL, + `MaxPixelThreshold` smallint(5) unsigned default NULL, + `MinAlarmPixels` int(10) unsigned default NULL, + `MaxAlarmPixels` int(10) unsigned default NULL, + `FilterX` tinyint(3) unsigned default NULL, + `FilterY` tinyint(3) unsigned default NULL, + `MinFilterPixels` int(10) unsigned default NULL, + `MaxFilterPixels` int(10) unsigned default NULL, + `MinBlobPixels` int(10) unsigned default NULL, + `MaxBlobPixels` int(10) unsigned default NULL, + `MinBlobs` smallint(5) unsigned default NULL, + `MaxBlobs` smallint(5) unsigned default NULL, + `OverloadFrames` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`Id`), + KEY `MonitorId` (`MonitorId`) +) ENGINE=@ZM_MYSQL_ENGINE@; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- +-- Initial data to be loaded into ZoneMinder database +-- + +-- +-- Create a default admin user. +-- +insert into Users values ('','admin',password('admin'),'',1,'View','Edit','Edit','Edit','Edit','Edit','',''); + +-- +-- Add a sample filter to purge the oldest 5 events when the disk is 95% full, delete is disabled though +-- +insert into Filters values ('PurgeWhenFull','{"sort_field":"Id","terms":[{"val":0,"attr":"Archived","op":"="},{"cnj":"and","val":95,"attr":"DiskPercent","op":">="}],"limit":5,"sort_asc":1}',0,0,0,0,0,0,'',1,0); + +-- +-- Add in some sample control protocol definitions +-- +insert into Controls values (1,'Pelco-D','Local','PelcoD',1,1,0,1,1,0,0,1,NULL,NULL,NULL,NULL,1,0,3,1,1,0,0,1,NULL,NULL,NULL,NULL,0,NULL,NULL,1,1,0,1,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,1,0,1,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,20,1,1,1,1,0,0,0,1,1,NULL,NULL,NULL,NULL,1,0,63,1,254,1,NULL,NULL,NULL,NULL,1,0,63,1,254,0,0); +insert into Controls values (2,'Pelco-P','Local','PelcoP',1,1,0,1,1,0,0,1,NULL,NULL,NULL,NULL,1,0,3,1,1,0,0,1,NULL,NULL,NULL,NULL,0,NULL,NULL,1,1,0,1,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,1,0,1,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,20,1,1,1,1,0,0,0,1,1,NULL,NULL,NULL,NULL,1,0,63,1,254,1,NULL,NULL,NULL,NULL,1,0,63,1,254,0,0); +insert into Controls values (3,'Sony VISCA','Local','Visca',1,1,0,1,0,0,0,1,0,16384,10,4000,1,1,6,1,1,1,0,1,0,1536,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,3,1,1,1,1,0,1,1,0,1,-15578,15578,100,10000,1,1,50,1,254,1,-7789,7789,100,5000,1,1,50,1,254,0,0); +INSERT INTO Controls VALUES (4,'Axis API v2','Remote','AxisV2',0,0,0,1,0,0,1,0,0,9999,10,2500,0,NULL,NULL,1,1,0,1,0,0,9999,10,2500,0,NULL,NULL,1,1,0,1,0,0,9999,10,2500,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,12,1,1,1,1,1,0,1,0,1,-360,360,1,90,0,NULL,NULL,0,NULL,1,-360,360,1,90,0,NULL,NULL,0,NULL,0,0); +insert into Controls values (5,'Panasonic IP','Remote','PanasonicIP',0,0,0,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,8,1,1,1,0,1,0,0,1,1,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,1,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,0,0); +insert into Controls values (6,'Neu-Fusion NCS370','Remote','Ncs370',0,0,0,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL,NULL,0,NULL,NULL,1,24,1,0,1,1,0,0,0,1,1,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,1,NULL,NULL,NULL,NULL,0,NULL,NULL,0,NULL,0,0); + +-- +-- Add some monitor preset values +-- +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, mpjpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&req_fps=5',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, mpjpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=5',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 320x240, mpjpeg, B&W','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&color=0',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP, 640x480, mpjpeg, B&W','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&color=0',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 320x240, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240',NULL,320,240,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 320x240, mpjpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=320x240&req_fps=5',NULL,320,240,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 320x240, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 320x240, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=320x240',NULL,320,240,3,5.0,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 640x480, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480',NULL,640,480,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 640x480, mpjpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=5',NULL,640,480,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 640x480, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,NULL,1,4,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Axis IP PTZ, 640x480, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/axis-cgi/jpg/image.cgi?resolution=640x480',NULL,640,480,3,5.0,1,4,NULL,':',100,100); +INSERT into MonitorPresets VALUES ('','Axis IP, mpeg4, unicast','Remote',NULL,NULL,NULL,'rtsp','rtpUni','',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT into MonitorPresets VALUES ('','Axis IP, mpeg4, multicast','Remote',NULL,NULL,NULL,'rtsp','rtpMulti','',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT into MonitorPresets VALUES ('','Axis IP, mpeg4, RTP/RTSP','Remote',NULL,NULL,NULL,'rtsp','rtpRtsp','',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT into MonitorPresets VALUES ('','Axis IP, mpeg4, RTP/RTSP/HTTP','Remote',NULL,NULL,NULL,'rtsp','rtpRtspHttp','',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 320x240, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/nphMotionJpeg?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 320x240, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 320x240, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 640x480, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/nphMotionJpeg?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 640x480, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP, 640x480, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 320x240, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/nphMotionJpeg?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 320x240, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 320x240, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,5.0,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 640x480, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/nphMotionJpeg?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 640x480, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,NULL,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Panasonic IP PTZ, 640x480, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/SnapshotJPEG?Resolution=640x480&Quality=Standard',NULL,640,480,3,5.0,1,5,NULL,':',100,100); +INSERT INTO MonitorPresets VALUES ('','Gadspot IP, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Gadspot IP, jpeg, max 5 FPS','Remote','http','simple',NULL,NULL,NULL,'',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Gadspot IP, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/GetData.cgi',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Gadspot IP, mpjpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','VEO Observer, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/Jpeg/CamImg.jpg',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Blue Net Video Server, jpeg','Remote','http','simple',NULL,NULL,NULL,'',80,'/cgi-bin/image.cgi?control=0&id=admin&passwd=admin',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT into MonitorPresets VALUES ('','ACTi IP, mpeg4, unicast','Remote',NULL,NULL,NULL,'rtsp','rtpUni','',7070,'','/track',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis FFMPEG H.264','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp:///axis-media/media.amp?videocodec=h264',NULL,NULL,NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Vivotek FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://:554/live.sdp',NULL,NULL,NULL,352,240,NULL,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Axis FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp:///axis-media/media.amp',NULL,NULL,NULL,640,480,NULL,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','ACTi TCM FFMPEG','Ffmpeg',NULL,NULL,NULL,NULL,NULL,'rtsp://admin:123456@:7070',NULL,NULL,NULL,320,240,NULL,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), PAL, 320x240','Local','/dev/video','',255,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), PAL, 320x240, max 5 FPS','Local','/dev/video','',255,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), PAL, 640x480','Local','/dev/video','',255,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), PAL, 640x480, max 5 FPS','Local','/dev/video','',255,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), NTSC, 320x240','Local','/dev/video','',45056,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), NTSC, 320x240, max 5 FPS','Local','/dev/video','',45056,NULL,'v4l2',NULL,NULL,NULL,NULL,320,240,1345466932,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), NTSC, 640x480','Local','/dev/video','',45056,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L2), NTSC, 640x480, max 5 FPS','Local','/dev/video','',45056,NULL,'v4l2',NULL,NULL,NULL,NULL,640,480,1345466932,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), PAL, 320x240','Local','/dev/video','',0,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), PAL, 320x240, max 5 FPS','Local','/dev/video','',0,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), PAL, 640x480','Local','/dev/video','',0,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), PAL, 640x480, max 5 FPS','Local','/dev/video','',0,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), NTSC, 320x240','Local','/dev/video','',1,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), NTSC, 320x240, max 5 FPS','Local','/dev/video','',1,NULL,'v4l1',NULL,NULL,NULL,NULL,320,240,13,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), NTSC, 640x480','Local','/dev/video','',1,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,NULL,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','BTTV Video (V4L1), NTSC, 640x480, max 5 FPS','Local','/dev/video','',1,NULL,'v4l1',NULL,NULL,NULL,NULL,640,480,13,5.0,0,NULL,NULL,NULL,100,100); +INSERT INTO MonitorPresets VALUES ('','Remote ZoneMinder','Remote',NULL,NULL,NULL,'http','simple','',80,'/cgi-bin/nph-zms?mode=jpeg&monitor=&scale=100&maxfps=5&buffer=0',NULL,NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100); + +-- +-- Add some zone preset values +-- +INSERT INTO ZonePresets VALUES (1,'Fast, low sensitivity','Active','Percent','AlarmedPixels',60,NULL,20,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO ZonePresets VALUES (2,'Fast, medium sensitivity','Active','Percent','AlarmedPixels',40,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO ZonePresets VALUES (3,'Fast, high sensitivity','Active','Percent','AlarmedPixels',20,NULL,5,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); +INSERT INTO ZonePresets VALUES (4,'Best, low sensitivity','Active','Percent','Blobs',60,NULL,36,NULL,7,7,24,NULL,20,NULL,1,NULL,0); +INSERT INTO ZonePresets VALUES (5,'Best, medium sensitivity','Active','Percent','Blobs',40,NULL,16,NULL,5,5,12,NULL,10,NULL,1,NULL,0); +INSERT INTO ZonePresets VALUES (6,'Best, high sensitivity','Active','Percent','Blobs',20,NULL,8,NULL,3,3,6,NULL,5,NULL,1,NULL,0); + +-- +-- Apply the initial configuration +-- +-- This section is autogenerated by zmconfgen.pl +-- Do not edit this file as any changes will be overwritten +-- diff --git a/db/zm_update-kfir-to-zum.sql b/db/zm_update-kfir-to-zum.sql new file mode 100644 index 000000000..be23f33f3 --- /dev/null +++ b/db/zm_update-kfir-to-zum.sql @@ -0,0 +1,24 @@ +-- +-- Table structure for table `PluginsConfig` +-- + +CREATE TABLE IF NOT EXISTS `PluginsConfig` ( + `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `Name` varchar(32) NOT NULL DEFAULT '', + `Value` text NOT NULL, + `Type` tinytext NOT NULL, + `Choices` text NOT NULL, + `MonitorId` int(10) unsigned NOT NULL, + `ZoneId` int(10) unsigned NOT NULL, + `pluginName` tinytext NOT NULL, + PRIMARY KEY (`Id`), + KEY `ZoneId` (`ZoneId`), + KEY `MonitorId` (`MonitorId`), + KEY `Name` (`Name`), + FULLTEXT KEY `pluginName` (`pluginName`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; + + +ALTER TABLE `Monitors` ADD `UsedPl` varchar(88) NOT NULL default '' AFTER `Sequence`; +ALTER TABLE `Monitors` ADD `DoNativeMotDet` varchar(5) NOT NULL default 'yes' AFTER `UsedPl`; + diff --git a/db/zm_update_1.25.0-to-zum.sql b/db/zm_update_1.25.0-to-zum.sql new file mode 100644 index 000000000..e1b7b1575 --- /dev/null +++ b/db/zm_update_1.25.0-to-zum.sql @@ -0,0 +1,26 @@ +-- +-- Table structure for table `PluginsConfig` +-- + +CREATE TABLE IF NOT EXISTS `PluginsConfig` ( + `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `Name` varchar(32) NOT NULL DEFAULT '', + `Value` text NOT NULL, + `Type` tinytext NOT NULL, + `Choices` text NOT NULL, + `MonitorId` int(10) unsigned NOT NULL, + `ZoneId` int(10) unsigned NOT NULL, + `pluginName` tinytext NOT NULL, + PRIMARY KEY (`Id`), + KEY `ZoneId` (`ZoneId`), + KEY `MonitorId` (`MonitorId`), + KEY `Name` (`Name`), + FULLTEXT KEY `pluginName` (`pluginName`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; + + +ALTER TABLE `Monitors` ADD `UsedPl` varchar(88) NOT NULL default '' AFTER `Sequence`; +ALTER TABLE `Monitors` ADD `DoNativeMotDet` varchar(5) NOT NULL default 'yes' AFTER `UsedPl`; +ALTER TABLE `Monitors` ADD `Colours` TINYINT UNSIGNED NOT NULL DEFAULT '1' AFTER `Height`; +ALTER TABLE `Monitors` ADD `Deinterlacing` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `Orientation`; + diff --git a/description-pak b/description-pak new file mode 100644 index 000000000..368e50fce --- /dev/null +++ b/description-pak @@ -0,0 +1 @@ +Zoneminder with kfir performances patches and plugin patches from UnixMedia diff --git a/doc-pak/AUTHORS b/doc-pak/AUTHORS new file mode 100644 index 000000000..7f0362072 --- /dev/null +++ b/doc-pak/AUTHORS @@ -0,0 +1,6 @@ +ZoneMinder - A Linux based camera monitoring and analysis tool. + +This project was imagined and created by Philip Coombes in +September 2002, shortly after being burglarised of his power tools. + +mailto:philip.coombes@zoneminder.com diff --git a/doc-pak/BUGS b/doc-pak/BUGS new file mode 100644 index 000000000..3160e2dce --- /dev/null +++ b/doc-pak/BUGS @@ -0,0 +1 @@ +Please see README file. diff --git a/doc-pak/COPYING b/doc-pak/COPYING new file mode 100644 index 000000000..d60c31a97 --- /dev/null +++ b/doc-pak/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/doc-pak/ChangeLog b/doc-pak/ChangeLog new file mode 100644 index 000000000..3160e2dce --- /dev/null +++ b/doc-pak/ChangeLog @@ -0,0 +1 @@ +Please see README file. diff --git a/doc-pak/INSTALL b/doc-pak/INSTALL new file mode 100644 index 000000000..1de0ac2ad --- /dev/null +++ b/doc-pak/INSTALL @@ -0,0 +1,185 @@ +Basic Installation +================== + + These are generic installation instructions. + + Please see http://www.zoneminder.com/wiki/index.php/Documentation + for full details. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/doc-pak/NEWS b/doc-pak/NEWS new file mode 100644 index 000000000..3160e2dce --- /dev/null +++ b/doc-pak/NEWS @@ -0,0 +1 @@ +Please see README file. diff --git a/doc-pak/README b/doc-pak/README new file mode 100644 index 000000000..e3dfa62e1 --- /dev/null +++ b/doc-pak/README @@ -0,0 +1,5 @@ + +All documentation for ZoneMinder is now online at + +http://www.zoneminder.com/wiki/index.php/Documentation + diff --git a/doc-pak/TODO b/doc-pak/TODO new file mode 100644 index 000000000..69af9c87e --- /dev/null +++ b/doc-pak/TODO @@ -0,0 +1,2 @@ +Please see README file. + diff --git a/misc/apache.conf b/misc/apache.conf new file mode 100644 index 000000000..61b3df80e --- /dev/null +++ b/misc/apache.conf @@ -0,0 +1,39 @@ +# +# PLEASE NOTE THAT THIS FILE IS INTENDED FOR GUIDANCE ONLY AND MAY NOT BE APPROPRIATE FOR YOUR DISTRIBUTION +# +# Sample configuration file for running ZoneMinder as name based virtual host +# Some values may need to manually adjusted to suit your setup +# + + ServerName zm.local + ServerAdmin webmaster@localhost + + DocumentRoot "/usr/share/zoneminder" + + Options FollowSymLinks + AllowOverride All + + + ScriptAlias /cgi-bin/ "/usr/lib/cgi-bin" + + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + AllowOverride All + + + # Use the first option to have Apache logs written to the general log + # directory, or the second to have them written to the regular Apache + # directory (you may have to change the path to that used on your system) + ErrorLog /var/log/zm/apache-error.log + ErrorLog /var/log/httpd/zm-error.log + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + # Use the first option to have Apache logs written to the general log + # directory, or the second to have them written to the regular Apache + # directory (you may have to change the path to that used on your system) + CustomLog /var/log/zm/apache-access.log combined + CustomLog /var/log/httpd/zm-access.log combined + + diff --git a/misc/logrotate.conf b/misc/logrotate.conf new file mode 100644 index 000000000..4205ab899 --- /dev/null +++ b/misc/logrotate.conf @@ -0,0 +1,19 @@ +# +# PLEASE NOTE THAT THIS FILE IS INTENDED FOR GUIDANCE ONLY AND MAY NOT BE APPROPRIATE FOR YOUR DISTRIBUTION +# +# Sample logrotate file for ZoneMinder. Copy this to /etc/logrotate.d/zm or similar +# if you wish your system to prevent your log files from growing too large. +# You can remove the 'kill' of syslogd if you have another logrotate file that does +# this but in that case you will want this file run first, so it will need to be +# named something lexically ahead of the other logrotate file, for example 0zm to +# ensure it is executed first. +# +/var/log/zm/*.log { + missingok + notifempty + sharedscripts + postrotate + /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true + /usr/bin/zmpkg.pl logrot 2> /dev/null > /dev/null || true + endscript +} diff --git a/misc/syslog.conf b/misc/syslog.conf new file mode 100644 index 000000000..79e8f8dcd --- /dev/null +++ b/misc/syslog.conf @@ -0,0 +1,19 @@ +# +# PLEASE NOTE THAT THIS FILE IS INTENDED FOR GUIDANCE ONLY AND MAY NOT BE APPROPRIATE FOR YOUR DISTRIBUTION +# +# Sample instruction to put in /etc/syslog.conf (or rsyslog.conf) to redirect +# ZoneMinder syslog message to a separate file, apart from warnings and errors. +# This is done by assigning ZoneMinder messages to one of the user logging facilities +# which are local0-7. In this example local1 is used but if this is used by other +# packages then this can be changed to another which is unused (e.g. local3). +# + +# Save ZoneMinder messages to zm.log, this uses the local1 facility, +local1.* /var/log/zm/zm.log + +# You will need to edit the existing config line that directs to /var/log/messages +# or /var/log/syslog and insert the 'local1.!*;local1.warning' directives. This +# first excludes all local1 messages, and then re-enables local1 messages of warning +# level or above. Remove the second part if you want no ZoneMinder messages to go +# to your system logs at all. +*.info;local1.!*;local1.warning;mail.none;news.none;authpriv.none;cron.none /var/log/messages diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 000000000..6b3b5fc5d --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id$ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/plugins/.sconsign.dblite b/plugins/.sconsign.dblite new file mode 100644 index 000000000..fd10c8412 Binary files /dev/null and b/plugins/.sconsign.dblite differ diff --git a/plugins/libzm_plugin_anpr/Makefile b/plugins/libzm_plugin_anpr/Makefile new file mode 100644 index 000000000..b6ec92f59 --- /dev/null +++ b/plugins/libzm_plugin_anpr/Makefile @@ -0,0 +1,60 @@ +#/*********************************************************************** +# This file is part of libzm_anpr_plugin, License Plate REcognition. +# +# Copyright (C) 2012 Franco (nextime) Lanza +# +# LiPRec is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# LiPRec 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with LiPRec. If not, see . +#************************************************************************/ + + +OBJECTS = anpr_plugin.o +SOBJ=anpr_plugin.so + +ZMSRC = zm_detector.cpp zm_config.cpp zm_poly.cpp zm_zone.cpp zm_image.cpp zm_db.cpp +ZMSRC+= zm_logger.cpp zm_utils.cpp zm_thread.cpp zm_jpeg.cpp +ZMOBJ = $(ZMSRC:.cpp=.o) + +#CPPFLAGS= -fpermissive -O3 -march=native -Wall -lliprec -msse2 +CPPFLAGS= -fpermissive -O3 -Wall -lliprec -msse2 +CPPFLAGS+=-D__STDC_CONSTANT_MACROS -DZM_FFMPEG_CVS -DHAVE_LIBCRYPTO +CPPFLAGS+=-DJPEG_INCLUDE_DIR=../../../../../libjpeg-turbo-1.2.1/.libs/ +LDFLAGS=-L. -L../../../../../libjpeg-turbo-1.2.1/.libs/ +LDFLAGS+=-I../../src/ -I../../ -I./ +LDFLAGS+=-L/usr/lib -I/usr/include -I../../../../../libjpeg-turbo-1.2.1/ +LDFLAGS+=$(shell pkg-config --cflags opencv) + +LINKFLAGS=$(shell pkg-config --libs opencv) +LINKFLAGS+= -lliprec -lboost_program_options -lmysqlclient -lpthread -ljpeg -lz + + +all: anpr_plugin.o $(SOBJ) + + +$(ZMOBJ): %.o : ../../src/%.cpp + $(CXX) $^ -fPIC -c -o $@ ${LDFLAGS} $(CPPFLAGS) + +anpr_plugin.o: anpr_plugin.cpp + $(CXX) anpr_plugin.cpp -fPIC -c -o anpr_plugin.o ${LDFLAGS} $(CPPFLAGS) + +anpr_plugin.so: $(ZMOBJ) anpr_plugin.o + $(CXX) -o anpr_plugin.so -Wall anpr_plugin.o -shared $(ZMOBJ) $(LINKFLAGS) + cp anpr_plugin.so libzm_plugin_anpr.zmpl + +install: anpr_plugin.o $(SOBJ) + install -m 0644 libzm_plugin_anpr.zmpl /usr/share/zm/libzm_plugin_anpr.zmpl + $(shell cat plugin.conf >> /usr/share/zm/plugin.conf) + +clean: + rm -f $(OBJECTS) $(ZMOBJ) $(SOBJ) libzm_plugin_anpr.zmpl + diff --git a/plugins/libzm_plugin_anpr/anpr_plugin.cpp b/plugins/libzm_plugin_anpr/anpr_plugin.cpp new file mode 100644 index 000000000..987e4c748 --- /dev/null +++ b/plugins/libzm_plugin_anpr/anpr_plugin.cpp @@ -0,0 +1,250 @@ +/*********************************************************************** + This file is part of libzm_anpr_plugin, License Plate REcognition. + + Copyright (C) 2012 Franco (nextime) Lanza + + LiPRec is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LiPRec 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with LiPRec. If not, see . +************************************************************************/ + + +#define LIST LIPREC_LIST // This is a workaround to avoid the conflict +#include // of typedef LIST in both mysql and tesseract headers... +//#include "opencv2/highgui/highgui.hpp" +#undef LIST +#include "anpr_plugin.h" + +//! Retrieve the engine version we're going to expect +extern "C" int getEngineVersion() +{ + return ZM_ENGINE_VERSION; +} + +//! Tells us to register our functionality to an engine kernel +extern "C" void registerPlugin(PluginManager &PlM, string sPluginName) +{ + PlM.getImageAnalyser().addDetector( + auto_ptr(new ANPRPlugin(sPluginName)) + ); +} + + +using namespace cv; +//using namespace liprec; + +ANPRPlugin::ANPRPlugin() + : Detector(), + m_nMinObjSize(DEFAULT_DETECTOR_MIN_OBJECT_SIZE), + m_nMaxObjSize(DEFAULT_DETECTOR_MAX_OBJECT_SIZE) +{ + m_sDetectionCause = DETECTED_CAUSE; + m_sLogPrefix = LOG_PREFIX; + + + log(LOG_NOTICE, "License Plate Recognition Plugin\'s Object has been created."); +} + + + + +ANPRPlugin::ANPRPlugin(string sPluginName) + : Detector(sPluginName), + m_nMinObjSize(DEFAULT_DETECTOR_MIN_OBJECT_SIZE), + m_nMaxObjSize(DEFAULT_DETECTOR_MAX_OBJECT_SIZE) +{ + m_sDetectionCause = DETECTED_CAUSE; + m_sLogPrefix = LOG_PREFIX; + + log(LOG_NOTICE, "License Plate Recognition Plugin\'s Object has been created."); +} + + + +/*! \fn ANPRPlugin::loadConfig(string sConfigFileName) + * \param sConfigFileName is path to configuration to load parameters from + */ +void ANPRPlugin::loadConfig(string sConfigFileName) +{ + options_description config_file("Configuration file options."); + variables_map vm; + config_file.add_options() + ((m_sConfigSectionName + string(".min-obj-size")).c_str(), + value()->default_value(DEFAULT_DETECTOR_MIN_OBJECT_SIZE)) + ((m_sConfigSectionName + string(".max-obj-size")).c_str(), + value()->default_value(DEFAULT_DETECTOR_MAX_OBJECT_SIZE)) + ((m_sConfigSectionName + string(".alarm-score")).c_str(), + value()->default_value(DEFAULT_ALARM_SCORE)) + ((m_sConfigSectionName + string(".det-cause")).c_str(), + value()->default_value(DETECTED_CAUSE)) + ((m_sConfigSectionName + string(".log-prefix")).c_str(), + value()->default_value(LOG_PREFIX)) + ; + ifstream ifs(sConfigFileName.c_str()); + store(parse_config_file(ifs, config_file, true), vm); + notify(vm); + + m_nMinObjSize = vm[(m_sConfigSectionName + string(".min-obj-size")).c_str()].as(); + m_nMaxObjSize = vm[(m_sConfigSectionName + string(".max-obj-size")).c_str()].as(); + m_nAlarmScore = vm[(m_sConfigSectionName + string(".alarm-score")).c_str()].as(); + + m_sDetectionCause = vm[(m_sConfigSectionName + string(".det-cause")).c_str()].as(); + m_sLogPrefix = vm[(m_sConfigSectionName + string(".log-prefix")).c_str()].as(); + zmLoadConfig(); + log(LOG_NOTICE, "License Plate Recognition Plugin\'s Object is configured."); +} + + + +ANPRPlugin::~ANPRPlugin() +{ +} + + +/*! \fn ANPRPlugin::ANPRPlugin(const ANPRPlugin& source) + * \param source is the object for copying + */ +ANPRPlugin::ANPRPlugin(const ANPRPlugin& source) + : Detector(source), + m_nMinObjSize(source.m_nMinObjSize), + m_nMaxObjSize(source.m_nMaxObjSize) +{ +} + + + +/*! \fn ANPRPlugin:: operator=(const ANPRPlugin& source) + * \param source is the object for copying + */ +ANPRPlugin & ANPRPlugin:: operator=(const ANPRPlugin& source) +{ + Detector::operator=(source); + m_nMinObjSize = source.m_nMinObjSize; + m_nMaxObjSize = source.m_nMaxObjSize; + return *this; +} + + + + +/*! \fn ANPRPlugin::checkZone(Zone *zone, const Image *zmImage) + * \param zone is a zone where faces will be detected + * \param zmImage is an image to perform face detection (in the form of ZM' Image) + * \return true if there were objects detected in given image and + * false otherwise + */ +bool ANPRPlugin::checkZone(Zone *zone, const Image *zmImage) +{ + + double score; + Polygon zone_polygon = Polygon(zone->GetPolygon()); // Polygon of interest of the processed zone. + + Image *pMaskImage = new Image(zmImage->Width(), zmImage->Height(), ZM_COLOUR_GRAY8, ZM_SUBPIX_ORDER_NONE ); + pMaskImage->Fill(BLACK); + // An temporary image in the form of ZM for making from it CvMat. + // If don't use temp image, after rgb->bgr it will change. + Image *tempZmImage = new Image(*zmImage); + int imgtype=CV_8UC1; + if (tempZmImage->Colours() == ZM_COLOUR_RGB24) + imgtype=CV_8UC3; + Mat cvInputImage = Mat( + tempZmImage->Height(), + tempZmImage->Width(), + imgtype, (unsigned char*)tempZmImage->Buffer()).clone(); + //Mat cvInputImage = cvtmpInputImage.reshape(0, tempZmImage->Colours()); + //Mat cvInputImage = cvtmpInputImage.reshape(0, tempZmImage->Height()); + if (tempZmImage->Colours() == ZM_COLOUR_RGB24) + { + cvtColor(cvInputImage, cvInputImage, CV_RGB2BGR); + } + //imwrite("/tmp/sarca.jpg", cvInputImage); + //Process image + liprec::LiPRec plateDetector; + liprec::PlatesImage plates; + plateDetector.detectPlates(cvInputImage, &plates); + score = 0; + if(plates.plates.size() > 0) { + log(LOG_INFO, "PLATES WERE DETECTED"); + for(unsigned int i=0;iFill(WHITE, plateBox); + score=m_nAlarmScore; + delete plateBox; + } + } + + + if (score == 0) + { + //log(LOG_DEBUG, "No objects found. Exit."); + delete pMaskImage; + delete tempZmImage; + + // XXX We need to delete Mats? + + return( false ); + } + /* + else + { + zone->SetOverloadCount(zone->GetOverloadFrames()); + delete pMaskImage; + delete tempZmImage; + + return( false ); + }*/ + + + zone->SetScore((int)score); + + //Get mask by highlighting contours of objects and overlaying them with previous contours. + Rgb alarm_colour = RGB_GREEN; + Image *hlZmImage = pMaskImage->HighlightEdges(alarm_colour, ZM_COLOUR_RGB24, + ZM_SUBPIX_ORDER_RGB, &zone_polygon.Extent()); + + if (zone->Alarmed()) + { + // if there were previous detection and they have already set up alarm image + // then overlay it with current mask + Image* pPrevZoneMask = new Image(*(zone->AlarmImage())); + pPrevZoneMask->Overlay(*hlZmImage); + zone->SetAlarmImage(pPrevZoneMask); + delete pPrevZoneMask; + } + else + zone->SetAlarmImage(hlZmImage); + + delete pMaskImage; + delete hlZmImage; + delete tempZmImage; + + return true; +} + + diff --git a/plugins/libzm_plugin_anpr/anpr_plugin.h b/plugins/libzm_plugin_anpr/anpr_plugin.h new file mode 100644 index 000000000..ccab00eb2 --- /dev/null +++ b/plugins/libzm_plugin_anpr/anpr_plugin.h @@ -0,0 +1,89 @@ +/*********************************************************************** + This file is part of libzm_anpr_plugin, License Plate REcognition. + + Copyright (C) 2012 Franco (nextime) Lanza + + LiPRec is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LiPRec 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with LiPRec. If not, see . +************************************************************************/ + +#ifndef ANPR_PLUGIN_H +#define ANPR_PLUGIN_H + +#include +//#include +#include +#include +#include + + +#include +#include +#include +#include + +#include "zm_plugin_manager.h" +#include "zm_detector.h" +#include "zm_rgb.h" + +#define DETECTED_CAUSE "Plate Detected" +#define LOG_PREFIX "ZM PLATEDEC PLUGIN" + + +#define DEFAULT_DETECTOR_MIN_OBJECT_SIZE 600 +#define DEFAULT_DETECTOR_MAX_OBJECT_SIZE 6000 +#define DEFAULT_ALARM_SCORE 99 + +using namespace std; +using namespace boost::program_options; + + +//! Face detector plugin class. +/*! The class derived from Detector. + * This class provides face detection based on OpenCV's implementation of Haar cascade classifier detector. + */ +class ANPRPlugin : public Detector { + public: + + //! Default Constructor. + ANPRPlugin(); + + //! Constructor. + ANPRPlugin(string sConfigSectionName); + + //! Destructor. + virtual ~ANPRPlugin(); + + //! Copy constructor. + ANPRPlugin(const ANPRPlugin& source); + + //! Overloaded operator=. + ANPRPlugin& operator=(const ANPRPlugin& source); + + void loadConfig(string sConfigFileName); + +protected: + + bool checkZone(Zone *zone, const Image *zmImage); + + int m_nMinObjSize; + int m_nMaxObjSize; + + int m_nAlarmScore; + +}; + + + +#endif // ANPR_PLUGIN_H + diff --git a/plugins/libzm_plugin_anpr/plugin.conf b/plugins/libzm_plugin_anpr/plugin.conf new file mode 100644 index 000000000..b947346a1 --- /dev/null +++ b/plugins/libzm_plugin_anpr/plugin.conf @@ -0,0 +1,8 @@ +[libzm_plugin_anpr] + +min-obj-size = 600 +max-obj-size = 6000 +alarm-score = 99 +det-cause = Plate Detected +log-prefix = PLATEDET PLUGIN + diff --git a/plugins/libzm_plugin_face_haar/.sconsign.dblite b/plugins/libzm_plugin_face_haar/.sconsign.dblite new file mode 100644 index 000000000..d992fa609 Binary files /dev/null and b/plugins/libzm_plugin_face_haar/.sconsign.dblite differ diff --git a/plugins/libzm_plugin_face_haar/SConstruct b/plugins/libzm_plugin_face_haar/SConstruct new file mode 100644 index 000000000..e864f6ce7 --- /dev/null +++ b/plugins/libzm_plugin_face_haar/SConstruct @@ -0,0 +1,78 @@ +import os, glob, sys +env = Environment() + +# Short messages while compiling and linking. +if ARGUMENTS.get('VERBOSE') != "1": + env.Append(CXXCOMSTR = "Compiling static object $TARGET") + env.Append(LINKCOMSTR = "Linking $TARGET") + env.Append(SHCXXCOMSTR = "Compiling shared object $TARGET") + env.Append(SHLINKCOMSTR = "Linking shared $TARGET" ) + + +# CXXFLAGS +if ARGUMENTS.get('debug', 0): + env.Append(CXXFLAGS = ['-g']) + build_dir = 'debug/' +else: + build_dir = 'release/' + +env.BuildDir(build_dir, 'src/', duplicate=0) + + + +env.Append(CXXFLAGS=['-msse2', '-march=native','-Wno-write-strings','-D__STDC_CONSTANT_MACROS']) +env.Append(CXXFLAGS=['-DZM_FFMPEG_CVS','-DHAVE_LIBCRYPTO','-DJPEG_INCLUDE_DIR=../../../../../libjpeg-turbo-1.2.1/']) +env.Append(LINKFLAGS = ['-Wl,--no-undefined']) +env.Append(LDFLAGS = [" -L../../../../../libjpeg-turbo-1.2.1/.libs "]) + + +# Headers and libs +env['CPPPATH'] = [ build_dir, + 'src', + '../../src', + '../../', + '../../../../../libjpeg-turbo-1.2.1/', + '/usr/include/opencv', '/usr/local/include/opencv', + '/usr/local/include/boost', + '.' + ] + +env['LIBPATH'] = [ + '../../../../../libjpeg-turbo-1.2.1/.libs/', + '/usr/local/lib', + '/usr/lib', + './'] + +env['LIBS'] = [ + 'opencv_core', + 'opencv_highgui', + 'opencv_objdetect', + 'opencv_imgproc', + 'boost_program_options', + 'mysqlclient', + 'pthread', + 'jpeg', + 'z' +] + +# Common sources. +# common_src = env.Glob( build_dir + '*.cpp') + +zoneminder_src = env.Glob('../../src/' + 'zm_detector.cpp') +zoneminder_src += env.Glob('../../src/' + 'zm_config.cpp') +zoneminder_src += env.Glob('../../src/' + 'zm_poly.cpp') +zoneminder_src += env.Glob('../../src/' + 'zm_zone.cpp') +zoneminder_src += env.Glob('../../src/' + 'zm_image.cpp') +zoneminder_src += env.Glob('../../src/' + 'zm_db.cpp') +zoneminder_src += env.Glob('../../src/' + 'zm_jpeg.cpp') +zoneminder_src += env.Glob('../../src/' + 'zm_logger.cpp') +zoneminder_src += env.Glob('../../src/' + 'zm_utils.cpp') +zoneminder_src += env.Glob('../../src/' + 'zm_thread.cpp') + + +# Face detector sources. +face_haar_src = env.Glob( build_dir + 'face_detector_plugin.cpp') + +# Shared lib +env.SharedLibrary(target = 'zm_plugin_face_haar', source = [face_haar_src, zoneminder_src]) + diff --git a/plugins/libzm_plugin_face_haar/data/haarcascade_frontalface_alt2.xml b/plugins/libzm_plugin_face_haar/data/haarcascade_frontalface_alt2.xml new file mode 100644 index 000000000..caa86f6c3 --- /dev/null +++ b/plugins/libzm_plugin_face_haar/data/haarcascade_frontalface_alt2.xml @@ -0,0 +1,23550 @@ + + + + + 20 20 + + <_> + + + <_> + + <_> + + + + <_>2 7 16 4 -1. + <_>2 9 16 2 2. + 0 + 4.3272329494357109e-003 + 0.0383819006383419 + 1 + <_> + + + + <_>8 4 3 14 -1. + <_>8 11 3 7 2. + 0 + 0.0130761601030827 + 0.8965256810188294 + 0.2629314064979553 + <_> + + <_> + + + + <_>13 6 1 6 -1. + <_>13 9 1 3 2. + 0 + 5.2434601821005344e-004 + 0.1021663025021553 + 1 + <_> + + + + <_>4 2 12 8 -1. + <_>8 2 4 8 3. + 0 + 4.4573000632226467e-003 + 0.1238401979207993 + 0.6910383105278015 + <_> + + <_> + + + + <_>6 3 1 9 -1. + <_>6 6 1 3 3. + 0 + -9.2708261217921972e-004 + 1 + 0.1953697055578232 + <_> + + + + <_>3 7 14 9 -1. + <_>3 10 14 3 3. + 0 + 3.3989109215326607e-004 + 0.2101441025733948 + 0.8258674740791321 + 0.3506923019886017 + -1 + -1 + <_> + + + <_> + + <_> + + + + <_>4 7 4 4 -1. + <_>4 9 4 2 2. + 0 + 2.3025739938020706e-003 + 0.1018375977873802 + 1 + <_> + + + + <_>9 4 2 16 -1. + <_>9 12 2 8 2. + 0 + 4.4174338690936565e-003 + 0.8219057917594910 + 0.1956554949283600 + <_> + + <_> + + + + <_>1 1 18 5 -1. + <_>7 1 6 5 3. + 0 + 0.0222032107412815 + 0.2205407023429871 + 1 + <_> + + + + <_>4 5 13 8 -1. + <_>4 9 13 4 2. + 0 + -1.7283110355492681e-004 + 0.0732632577419281 + 0.5931484103202820 + <_> + + <_> + + + + <_>1 7 16 9 -1. + <_>1 10 16 3 3. + 0 + 4.3567270040512085e-003 + 0.1844114959239960 + 1 + <_> + + + + <_>2 0 15 4 -1. + <_>2 2 15 2 2. + 0 + -2.6032889727503061e-003 + 0.4032213985919952 + 0.8066521286964417 + <_> + + <_> + + + + <_>7 5 6 4 -1. + <_>9 5 2 4 3. + 0 + 1.7309630056843162e-003 + 0.2548328042030335 + 1 + <_> + + + + <_>6 3 8 9 -1. + <_>6 6 8 3 3. + 0 + -7.8146401792764664e-003 + 0.6057069897651672 + 0.2779063880443573 + <_> + + <_> + + + + <_>8 12 3 8 -1. + <_>8 16 3 4 2. + 0 + -8.7343417108058929e-003 + 0.2889980077743530 + 1 + <_> + + + + <_>3 16 2 2 -1. + <_>3 17 2 1 2. + 0 + 9.4522320432588458e-004 + 0.7616587281227112 + 0.3495643138885498 + <_> + + <_> + + + + <_>14 1 6 12 -1. + <_>14 1 3 12 2. + 0 + 0.0494148582220078 + 1 + 0.8151652812957764 + <_> + + + + <_>4 4 12 6 -1. + <_>8 4 4 6 3. + 0 + 4.4891750440001488e-003 + 0.2808783054351807 + 0.6027774810791016 + <_> + + <_> + + + + <_>0 2 6 15 -1. + <_>3 2 3 15 2. + 0 + 0.0603136196732521 + 1 + 0.7607501745223999 + <_> + + + + <_>5 4 9 6 -1. + <_>5 6 9 2 3. + 0 + -1.0762850288301706e-003 + 0.4444035887718201 + 0.1437312066555023 + <_> + + <_> + + + + <_>13 11 6 3 -1. + <_>13 12 6 1 3. + 0 + -9.5083238556981087e-003 + 1 + 0.5318170189857483 + <_> + + + + <_>12 12 6 4 -1. + <_>12 14 6 2 2. + 0 + 7.6601309701800346e-003 + 0.5411052107810974 + 0.2180687040090561 + <_> + + <_> + + + + <_>1 11 6 3 -1. + <_>1 12 6 1 3. + 0 + 7.6467678882181644e-003 + 1 + 0.1158960014581680 + <_> + + + + <_>2 5 5 8 -1. + <_>2 9 5 4 2. + 0 + -8.4662932204082608e-004 + 0.2340679019689560 + 0.5990381836891174 + 3.4721779823303223 + 0 + -1 + <_> + + + <_> + + <_> + + + + <_>5 4 10 4 -1. + <_>5 6 10 2 2. + 0 + -4.8506218008697033e-003 + 1 + 0.1805496066808701 + <_> + + + + <_>2 4 16 12 -1. + <_>2 8 16 4 3. + 0 + -4.6141650527715683e-003 + 0.2177893966436386 + 0.8018236756324768 + <_> + + <_> + + + + <_>4 5 12 6 -1. + <_>8 5 4 6 3. + 0 + -2.4301309604197741e-003 + 0.1141354963183403 + 1 + <_> + + + + <_>13 7 2 9 -1. + <_>13 10 2 3 3. + 0 + 4.1787960799410939e-004 + 0.1203093975782394 + 0.6108530759811401 + <_> + + <_> + + + + <_>5 7 2 9 -1. + <_>5 10 2 3 3. + 0 + 1.0010929545387626e-003 + 0.2079959958791733 + 1 + <_> + + + + <_>7 1 6 8 -1. + <_>9 1 2 8 3. + 0 + 1.0577100329101086e-003 + 0.3302054107189179 + 0.7511094212532044 + <_> + + <_> + + + + <_>12 0 4 12 -1. + <_>14 0 2 6 2. + <_>12 6 2 6 2. + 0 + 1.2376549420878291e-003 + 1 + 0.2768222093582153 + <_> + + + + <_>5 8 10 2 -1. + <_>5 9 10 1 2. + 0 + 3.5315038985572755e-004 + 0.1668293029069901 + 0.5829476714134216 + <_> + + <_> + + + + <_>5 1 6 4 -1. + <_>7 1 2 4 3. + 0 + -0.0119536602869630 + 0.1508788019418716 + 1 + <_> + + + + <_>0 3 9 12 -1. + <_>3 3 3 12 3. + 0 + 1.4182999730110168e-003 + 0.4391227960586548 + 0.7646595239639282 + <_> + + <_> + + + + <_>9 8 3 12 -1. + <_>9 12 3 4 3. + 0 + 3.4642980899661779e-003 + 1 + 0.2651556134223938 + <_> + + + + <_>0 5 20 15 -1. + <_>0 10 20 5 3. + 0 + -0.0149489501491189 + 0.2298053056001663 + 0.5442165732383728 + <_> + + <_> + + + + <_>2 2 6 8 -1. + <_>2 2 3 4 2. + <_>5 6 3 4 2. + 0 + -1.0506849503144622e-003 + 1 + 0.3622843921184540 + <_> + + + + <_>2 1 6 2 -1. + <_>2 2 6 1 2. + 0 + -4.0782918222248554e-003 + 0.2601259946823120 + 0.7233657836914063 + <_> + + <_> + + + + <_>10 15 6 4 -1. + <_>13 15 3 2 2. + <_>10 17 3 2 2. + 0 + 5.4242828628048301e-004 + 0.3849678933620453 + 1 + <_> + + + + <_>12 14 2 6 -1. + <_>12 16 2 2 3. + 0 + -7.3204059153795242e-003 + 0.2965512871742249 + 0.5480309128761292 + <_> + + <_> + + + + <_>5 15 4 4 -1. + <_>5 15 2 2 2. + <_>7 17 2 2 2. + 0 + 1.1421289527788758e-003 + 0.4104770123958588 + 1 + <_> + + + + <_>7 18 1 2 -1. + <_>7 19 1 1 2. + 0 + 1.1783400550484657e-003 + 0.7239024043083191 + 0.2787283957004547 + <_> + + <_> + + + + <_>4 5 12 10 -1. + <_>10 5 6 5 2. + <_>4 10 6 5 2. + 0 + 0.0440771095454693 + 0.5640516281127930 + 1 + <_> + + + + <_>7 4 8 12 -1. + <_>11 4 4 6 2. + <_>7 10 4 6 2. + 0 + 3.7900090683251619e-003 + 0.5947548151016235 + 0.3312020003795624 + <_> + + <_> + + + + <_>9 11 2 3 -1. + <_>9 12 2 1 3. + 0 + -2.4291418958455324e-003 + 0.6603232026100159 + 1 + <_> + + + + <_>3 3 12 12 -1. + <_>3 3 6 6 2. + <_>9 9 6 6 2. + 0 + 9.4262324273586273e-003 + 0.4680665135383606 + 0.2064338028430939 + <_> + + <_> + + + + <_>15 11 5 3 -1. + <_>15 12 5 1 3. + 0 + 8.0630257725715637e-003 + 0.5298851132392883 + 1 + <_> + + + + <_>10 18 3 2 -1. + <_>11 18 1 2 3. + 0 + 5.2240812219679356e-003 + 0.5281602740287781 + 0.1909549981355667 + <_> + + <_> + + + + <_>0 11 5 3 -1. + <_>0 12 5 1 3. + 0 + -7.0630568079650402e-003 + 0.1380645930767059 + 1 + <_> + + + + <_>7 18 3 2 -1. + <_>8 18 1 2 3. + 0 + 5.6897541508078575e-003 + 0.5490636825561523 + 0.1260281056165695 + <_> + + <_> + + + + <_>2 8 16 2 -1. + <_>2 9 16 1 2. + 0 + 1.2472929665818810e-003 + 0.2372663021087647 + 1 + <_> + + + + <_>9 6 5 12 -1. + <_>9 12 5 6 2. + 0 + 0.0495434887707233 + 0.5240166187286377 + 0.1769216060638428 + 5.9844889640808105 + 1 + -1 + <_> + + + <_> + + <_> + + + + <_>6 3 8 6 -1. + <_>6 6 8 3 2. + 0 + -4.9326149746775627e-003 + 1 + 0.1998064965009689 + <_> + + + + <_>4 7 12 2 -1. + <_>8 7 4 2 3. + 0 + 2.7918140403926373e-005 + 0.2299380004405975 + 0.7393211126327515 + <_> + + <_> + + + + <_>10 9 6 8 -1. + <_>10 13 6 4 2. + 0 + 3.0876200180500746e-003 + 1 + 0.1533840000629425 + <_> + + + + <_>12 5 3 10 -1. + <_>12 10 3 5 2. + 0 + 7.4669660534709692e-006 + 0.2036858946084976 + 0.5854915976524353 + <_> + + <_> + + + + <_>4 6 3 9 -1. + <_>4 9 3 3 3. + 0 + 1.8739729421213269e-003 + 0.2049895972013474 + 1 + <_> + + + + <_>7 4 6 4 -1. + <_>9 4 2 4 3. + 0 + 9.3380251200869679e-004 + 0.3234199881553650 + 0.7323014140129089 + <_> + + <_> + + + + <_>12 3 8 3 -1. + <_>12 3 4 3 2. + 0 + 1.9151850137859583e-003 + 0.3045149147510529 + 1 + <_> + + + + <_>15 0 3 6 -1. + <_>15 3 3 3 2. + 0 + -5.9683797881007195e-003 + 0.2932133972644806 + 0.5621296167373657 + <_> + + <_> + + + + <_>2 12 10 8 -1. + <_>2 12 5 4 2. + <_>7 16 5 4 2. + 0 + -7.2115601506084204e-004 + 0.3658036887645721 + 1 + <_> + + + + <_>5 5 6 8 -1. + <_>5 9 6 4 2. + 0 + -5.9663117863237858e-003 + 0.2712155878543854 + 0.7226334810256958 + <_> + + <_> + + + + <_>12 3 8 3 -1. + <_>12 3 4 3 2. + 0 + 0.0308741796761751 + 0.4419837892055512 + 1 + <_> + + + + <_>15 0 3 6 -1. + <_>15 3 3 3 2. + 0 + -0.0110997101292014 + 0.3612976968288422 + 0.5251451134681702 + <_> + + <_> + + + + <_>0 3 8 3 -1. + <_>4 3 4 3 2. + 0 + 2.1164179779589176e-003 + 0.3628616929054260 + 1 + <_> + + + + <_>2 1 4 4 -1. + <_>2 3 4 2 2. + 0 + -9.4317439943552017e-003 + 0.1601095050573349 + 0.7052276730537415 + <_> + + <_> + + + + <_>10 2 3 2 -1. + <_>11 2 1 2 3. + 0 + -3.5266019403934479e-003 + 0.1301288008689880 + 1 + <_> + + + + <_>10 3 3 1 -1. + <_>11 3 1 1 3. + 0 + -1.6907559474930167e-003 + 0.1786323934793472 + 0.5521529912948608 + <_> + + <_> + + + + <_>7 15 3 4 -1. + <_>7 17 3 2 2. + 0 + 4.6470930101349950e-004 + 0.3487383127212524 + 1 + <_> + + + + <_>4 13 3 6 -1. + <_>4 15 3 2 3. + 0 + -0.0102155702188611 + 0.2673991024494171 + 0.6667919158935547 + <_> + + <_> + + + + <_>10 5 1 14 -1. + <_>10 12 1 7 2. + 0 + 1.2634709710255265e-003 + 1 + 0.3437863886356354 + <_> + + + + <_>5 4 10 6 -1. + <_>5 6 10 2 3. + 0 + -0.0118752997368574 + 0.5995336174964905 + 0.3497717976570129 + <_> + + <_> + + + + <_>5 0 6 3 -1. + <_>7 0 2 3 3. + 0 + -0.0107323396950960 + 0.2150489985942841 + 1 + <_> + + + + <_>6 0 3 5 -1. + <_>7 0 1 5 3. + 0 + 7.1836481802165508e-003 + 0.6271436214447022 + 0.2519541978836060 + <_> + + <_> + + + + <_>7 15 6 5 -1. + <_>9 15 2 5 3. + 0 + -0.0283408891409636 + 0.0824118927121162 + 1 + <_> + + + + <_>9 10 2 6 -1. + <_>9 12 2 2 3. + 0 + -4.5813230099156499e-004 + 0.5910056829452515 + 0.3705201148986816 + <_> + + <_> + + + + <_>8 17 3 2 -1. + <_>9 17 1 2 3. + 0 + 4.2940340936183929e-003 + 1 + 0.1594727933406830 + <_> + + + + <_>1 12 7 6 -1. + <_>1 14 7 2 3. + 0 + 0.0107510797679424 + 0.5980480909347534 + 0.2832508087158203 + <_> + + <_> + + + + <_>9 6 3 7 -1. + <_>10 6 1 7 3. + 0 + 0.0224651191383600 + 1 + 0.7877091169357300 + <_> + + + + <_>16 3 4 9 -1. + <_>16 6 4 3 3. + 0 + -0.0579885393381119 + 0.1555740982294083 + 0.5239657163619995 + <_> + + <_> + + + + <_>8 6 3 7 -1. + <_>9 6 1 7 3. + 0 + 7.2110891342163086e-003 + 1 + 0.6620365977287293 + <_> + + + + <_>0 5 18 8 -1. + <_>0 5 9 4 2. + <_>9 9 9 4 2. + 0 + -0.0483675710856915 + 0.1424719989299774 + 0.4429833889007568 + <_> + + <_> + + + + <_>13 5 2 10 -1. + <_>13 10 2 5 2. + 0 + -0.0144180599600077 + 0.1588540971279144 + 1 + <_> + + + + <_>12 10 2 6 -1. + <_>12 13 2 3 2. + 0 + -0.0231563895940781 + 0.2375798970460892 + 0.5217134952545166 + <_> + + <_> + + + + <_>7 0 3 5 -1. + <_>8 0 1 5 3. + 0 + 7.6985340565443039e-003 + 1 + 0.1941725015640259 + <_> + + + + <_>6 5 8 6 -1. + <_>6 7 8 2 3. + 0 + -5.6248619221150875e-003 + 0.6278405785560608 + 0.3746044933795929 + <_> + + <_> + + + + <_>10 3 6 14 -1. + <_>13 3 3 7 2. + <_>10 10 3 7 2. + 0 + -7.2936748620122671e-004 + 1 + 0.3840922117233276 + <_> + + + + <_>13 5 1 8 -1. + <_>13 9 1 4 2. + 0 + 6.1783898854628205e-004 + 0.3106493055820465 + 0.5537847280502319 + <_> + + <_> + + + + <_>4 3 6 14 -1. + <_>4 3 3 7 2. + <_>7 10 3 7 2. + 0 + -4.5803939428878948e-005 + 1 + 0.3444449007511139 + <_> + + + + <_>6 5 1 8 -1. + <_>6 9 1 4 2. + 0 + -1.4719359569426160e-005 + 0.2729552090167999 + 0.6428951025009155 + 8.5117864608764648 + 2 + -1 + <_> + + + <_> + + <_> + + + + <_>8 1 1 6 -1. + <_>8 3 1 2 3. + 0 + -1.3469370314851403e-003 + 0.1657086014747620 + 1 + <_> + + + + <_>2 0 15 2 -1. + <_>2 1 15 1 2. + 0 + -2.4774789344519377e-003 + 0.2273851037025452 + 0.6989349722862244 + <_> + + <_> + + + + <_>0 7 20 6 -1. + <_>0 9 20 2 3. + 0 + 5.2632777951657772e-003 + 0.1512074023485184 + 1 + <_> + + + + <_>10 10 6 8 -1. + <_>10 14 6 4 2. + 0 + 4.9075339920818806e-003 + 0.5564470291137695 + 0.1605442017316818 + <_> + + <_> + + + + <_>7 1 3 2 -1. + <_>8 1 1 2 3. + 0 + -2.3254349362105131e-003 + 0.1880259066820145 + 1 + <_> + + + + <_>8 1 2 2 -1. + <_>9 1 1 2 2. + 0 + -1.4665479538962245e-003 + 0.3122498989105225 + 0.7165396213531494 + <_> + + <_> + + + + <_>4 3 12 9 -1. + <_>4 6 12 3 3. + 0 + -0.1231169030070305 + 1 + 0.3859583139419556 + <_> + + + + <_>6 5 9 5 -1. + <_>9 5 3 5 3. + 0 + 2.2108340635895729e-003 + 0.2455293983221054 + 0.5695710182189941 + <_> + + <_> + + + + <_>5 5 9 5 -1. + <_>8 5 3 5 3. + 0 + 2.0661531016230583e-003 + 0.2716520130634308 + 1 + <_> + + + + <_>4 6 6 12 -1. + <_>4 10 6 4 3. + 0 + 3.6130280932411551e-004 + 0.2293362021446228 + 0.7208629846572876 + <_> + + <_> + + + + <_>13 0 6 18 -1. + <_>13 0 3 18 2. + 0 + 0.0799578726291656 + 1 + 0.7833620905876160 + <_> + + + + <_>10 8 1 12 -1. + <_>10 12 1 4 3. + 0 + 2.6064720004796982e-003 + 0.5545232295989990 + 0.2550689876079559 + <_> + + <_> + + + + <_>3 2 6 10 -1. + <_>3 2 3 5 2. + <_>6 7 3 5 2. + 0 + 6.5699010156095028e-003 + 1 + 0.1819390058517456 + <_> + + + + <_>1 2 4 6 -1. + <_>3 2 2 6 2. + 0 + 1.6259610420092940e-003 + 0.3529875874519348 + 0.6552819013595581 + <_> + + <_> + + + + <_>9 18 3 2 -1. + <_>10 18 1 2 3. + 0 + 3.6204981151968241e-003 + 0.5462309718132019 + 1 + <_> + + + + <_>10 18 3 2 -1. + <_>11 18 1 2 3. + 0 + -4.4391951523721218e-003 + 0.1359843015670776 + 0.5415815114974976 + <_> + + <_> + + + + <_>2 8 2 6 -1. + <_>2 10 2 2 3. + 0 + -9.0540945529937744e-003 + 0.1115119978785515 + 1 + <_> + + + + <_>7 5 6 6 -1. + <_>7 7 6 2 3. + 0 + -4.6067481162026525e-004 + 0.5846719741821289 + 0.2598348855972290 + <_> + + <_> + + + + <_>7 19 6 1 -1. + <_>9 19 2 1 3. + 0 + -5.6621041148900986e-003 + 0.1610569059848785 + 1 + <_> + + + + <_>10 18 3 2 -1. + <_>11 18 1 2 3. + 0 + 5.1165837794542313e-003 + 0.5376678705215454 + 0.1739455014467239 + <_> + + <_> + + + + <_>8 3 3 1 -1. + <_>9 3 1 1 3. + 0 + -2.1362339612096548e-003 + 0.1902073025703430 + 1 + <_> + + + + <_>2 2 16 2 -1. + <_>2 2 8 1 2. + <_>10 3 8 1 2. + 0 + -5.4809921421110630e-003 + 0.3272008001804352 + 0.6364840865135193 + <_> + + <_> + + + + <_>8 11 5 3 -1. + <_>8 12 5 1 3. + 0 + -8.1061907112598419e-003 + 0.6914852857589722 + 1 + <_> + + + + <_>7 13 6 3 -1. + <_>7 14 6 1 3. + 0 + 6.0048708692193031e-003 + 0.4327326118946075 + 0.6963843107223511 + <_> + + <_> + + + + <_>0 1 6 15 -1. + <_>2 1 2 15 3. + 0 + -0.0870285481214523 + 0.8594133853912354 + 1 + <_> + + + + <_>2 12 2 3 -1. + <_>2 13 2 1 3. + 0 + -4.7809639945626259e-003 + 0.0973944664001465 + 0.4587030112743378 + <_> + + <_> + + + + <_>16 13 1 3 -1. + <_>16 14 1 1 3. + 0 + -2.2166660055518150e-003 + 0.2554625868797302 + 1 + <_> + + + + <_>13 7 6 4 -1. + <_>16 7 3 2 2. + <_>13 9 3 2 2. + 0 + 1.3642730191349983e-003 + 0.3319090902805328 + 0.5964102745056152 + <_> + + <_> + + + + <_>7 13 3 6 -1. + <_>7 16 3 3 2. + 0 + -9.0077864006161690e-003 + 0.2666594982147217 + 1 + <_> + + + + <_>7 5 1 14 -1. + <_>7 12 1 7 2. + 0 + -0.0154941203072667 + 0.1848185956478119 + 0.6245970726013184 + <_> + + <_> + + + + <_>15 12 2 3 -1. + <_>15 13 2 1 3. + 0 + -4.2165028862655163e-003 + 1 + 0.5379927158355713 + <_> + + + + <_>10 5 3 14 -1. + <_>10 12 3 7 2. + 0 + 0.0432497598230839 + 0.5183029174804688 + 0.2170419991016388 + <_> + + <_> + + + + <_>6 10 2 6 -1. + <_>6 13 2 3 2. + 0 + 2.8786511393263936e-004 + 1 + 0.2613384127616882 + <_> + + + + <_>6 5 1 8 -1. + <_>6 9 1 4 2. + 0 + 1.2373150093480945e-003 + 0.2786532044410706 + 0.5908988118171692 + <_> + + <_> + + + + <_>13 11 2 1 -1. + <_>13 11 1 1 2. + 0 + 1.9528300035744905e-003 + 1 + 0.2612869143486023 + <_> + + + + <_>12 1 6 10 -1. + <_>15 1 3 5 2. + <_>12 6 3 5 2. + 0 + -1.4947060262784362e-003 + 0.5915412902832031 + 0.3455781936645508 + <_> + + <_> + + + + <_>3 12 2 3 -1. + <_>3 13 2 1 3. + 0 + 3.5878680646419525e-003 + 1 + 0.1587052047252655 + <_> + + + + <_>9 18 2 1 -1. + <_>10 18 1 1 2. + 0 + -2.5938691105693579e-003 + 0.1270411014556885 + 0.5979428887367249 + 8.4680156707763672 + 3 + -1 + <_> + + + <_> + + <_> + + + + <_>1 0 17 9 -1. + <_>1 3 17 3 3. + 0 + 3.5810680128633976e-003 + 0.1995104998350143 + 1 + <_> + + + + <_>1 2 8 8 -1. + <_>1 2 4 4 2. + <_>5 6 4 4 2. + 0 + -2.8552350122481585e-003 + 0.7373070120811462 + 0.2921737134456635 + <_> + + <_> + + + + <_>9 5 6 4 -1. + <_>9 5 3 4 2. + 0 + 1.9758539274334908e-003 + 0.1956419944763184 + 1 + <_> + + + + <_>10 9 7 10 -1. + <_>10 14 7 5 2. + 0 + 3.2583118882030249e-003 + 0.5692046880722046 + 0.1839064955711365 + <_> + + <_> + + + + <_>5 5 6 4 -1. + <_>8 5 3 4 2. + 0 + 2.3711679386906326e-004 + 0.2171667069196701 + 1 + <_> + + + + <_>0 7 20 6 -1. + <_>0 9 20 2 3. + 0 + 2.5942500215023756e-003 + 0.2719989120960236 + 0.7150244116783142 + <_> + + <_> + + + + <_>6 5 9 10 -1. + <_>6 10 9 5 2. + 0 + -0.0250324495136738 + 0.1825183928012848 + 1 + <_> + + + + <_>8 4 4 12 -1. + <_>8 10 4 6 2. + 0 + 6.3087949529290199e-003 + 0.5699837803840637 + 0.3509852886199951 + <_> + + <_> + + + + <_>6 6 8 3 -1. + <_>6 7 8 1 3. + 0 + -3.2494920305907726e-003 + 1 + 0.4023926854133606 + <_> + + + + <_>3 13 10 6 -1. + <_>3 13 5 3 2. + <_>8 16 5 3 2. + 0 + -0.0148857301101089 + 0.3604095876216888 + 0.7291995286941528 + <_> + + <_> + + + + <_>15 1 4 11 -1. + <_>15 1 2 11 2. + 0 + 8.0623216927051544e-003 + 1 + 0.6491490006446838 + <_> + + + + <_>5 7 10 10 -1. + <_>10 7 5 5 2. + <_>5 12 5 5 2. + 0 + 0.0274056792259216 + 0.5518993139266968 + 0.2659681141376495 + <_> + + <_> + + + + <_>1 1 4 11 -1. + <_>3 1 2 11 2. + 0 + 0.0343686006963253 + 1 + 0.6712512969970703 + <_> + + + + <_>1 5 8 12 -1. + <_>1 11 8 6 2. + 0 + -0.0272929705679417 + 0.1691378057003021 + 0.4326277971267700 + <_> + + <_> + + + + <_>13 7 6 4 -1. + <_>16 7 3 2 2. + <_>13 9 3 2 2. + 0 + 7.4452121043577790e-004 + 0.3405100107192993 + 1 + <_> + + + + <_>11 10 7 4 -1. + <_>11 12 7 2 2. + 0 + 7.0336280623450875e-004 + 0.5516793131828308 + 0.3311387896537781 + <_> + + <_> + + + + <_>0 4 20 12 -1. + <_>0 4 10 6 2. + <_>10 10 10 6 2. + 0 + -0.1227546036243439 + 0.1675315052270889 + 1 + <_> + + + + <_>1 5 6 15 -1. + <_>1 10 6 5 3. + 0 + 3.2559928949922323e-003 + 0.3615751862525940 + 0.6420782804489136 + <_> + + <_> + + + + <_>11 10 3 8 -1. + <_>11 14 3 4 2. + 0 + -0.0320903994143009 + 0.2921079099178314 + 1 + <_> + + + + <_>11 12 7 6 -1. + <_>11 14 7 2 3. + 0 + 3.2957999501377344e-003 + 0.5613031983375549 + 0.3357860147953033 + <_> + + <_> + + + + <_>9 11 2 3 -1. + <_>9 12 2 1 3. + 0 + -3.2273170072585344e-003 + 0.6970642805099487 + 1 + <_> + + + + <_>8 13 4 3 -1. + <_>8 14 4 1 3. + 0 + 1.1171669466421008e-003 + 0.3541150093078613 + 0.6144006252288818 + <_> + + <_> + + + + <_>3 14 14 4 -1. + <_>10 14 7 2 2. + <_>3 16 7 2 2. + 0 + -0.0172799509018660 + 1 + 0.5537180900573731 + <_> + + + + <_>18 7 2 4 -1. + <_>18 9 2 2 2. + 0 + 0.0117412004619837 + 0.5341957211494446 + 0.2757104933261871 + <_> + + <_> + + + + <_>3 12 6 6 -1. + <_>3 14 6 2 3. + 0 + 4.6405228786170483e-003 + 1 + 0.2489521056413651 + <_> + + + + <_>0 4 3 6 -1. + <_>0 6 3 2 3. + 0 + -0.0169130302965641 + 0.1711928993463516 + 0.5523952841758728 + <_> + + <_> + + + + <_>9 14 3 3 -1. + <_>9 15 3 1 3. + 0 + 0.0100601697340608 + 1 + 0.8273450732231140 + <_> + + + + <_>10 7 10 4 -1. + <_>15 7 5 2 2. + <_>10 9 5 2 2. + 0 + -6.0715491417795420e-004 + 0.3779391050338745 + 0.5476251840591431 + <_> + + <_> + + + + <_>7 2 6 8 -1. + <_>7 6 6 4 2. + 0 + -1.0865400545299053e-003 + 1 + 0.3296540975570679 + <_> + + + + <_>6 3 6 2 -1. + <_>8 3 2 2 3. + 0 + 8.9362077414989471e-003 + 0.6062883734703064 + 0.2434220016002655 + <_> + + <_> + + + + <_>10 6 3 5 -1. + <_>11 6 1 5 3. + 0 + -2.6372660067863762e-004 + 1 + 0.3814094960689545 + <_> + + + + <_>9 0 6 19 -1. + <_>11 0 2 19 3. + 0 + 0.0131100500002503 + 0.5517616271972656 + 0.3726893067359924 + <_> + + <_> + + + + <_>3 12 1 2 -1. + <_>3 13 1 1 2. + 0 + -2.9806280508637428e-003 + 0.1229664012789726 + 1 + <_> + + + + <_>7 14 5 3 -1. + <_>7 15 5 1 3. + 0 + -4.1619571857154369e-003 + 0.7252274751663208 + 0.4973455071449280 + <_> + + <_> + + + + <_>2 1 18 4 -1. + <_>11 1 9 2 2. + <_>2 3 9 2 2. + 0 + 0.0338423289358616 + 0.5348312854766846 + 1 + <_> + + + + <_>10 5 3 8 -1. + <_>11 5 1 8 3. + 0 + -1.2564560165628791e-003 + 0.5851914882659912 + 0.4384166896343231 + <_> + + <_> + + + + <_>0 1 18 4 -1. + <_>0 1 9 2 2. + <_>9 3 9 2 2. + 0 + -0.0196352303028107 + 0.2297834008932114 + 1 + <_> + + + + <_>7 5 3 8 -1. + <_>8 5 1 8 3. + 0 + -9.9625496659427881e-004 + 0.6295937895774841 + 0.4131599068641663 + <_> + + <_> + + + + <_>9 5 2 6 -1. + <_>9 7 2 2 3. + 0 + -0.0231271106749773 + 0.1695459038019180 + 1 + <_> + + + + <_>10 8 5 2 -1. + <_>10 9 5 1 2. + 0 + 0.0235257092863321 + 0.5174130201339722 + 0.0595193915069103 + <_> + + <_> + + + + <_>2 10 15 1 -1. + <_>7 10 5 1 3. + 0 + -0.0193565208464861 + 0.1357247978448868 + 1 + <_> + + + + <_>2 7 2 6 -1. + <_>2 9 2 2 3. + 0 + -4.1787112131714821e-003 + 0.2996628880500794 + 0.5791695117950440 + <_> + + <_> + + + + <_>9 14 3 3 -1. + <_>9 15 3 1 3. + 0 + 3.1488779932260513e-003 + 1 + 0.6592589020729065 + <_> + + + + <_>9 7 4 10 -1. + <_>9 12 4 5 2. + 0 + 7.3972279205918312e-003 + 0.5307171940803528 + 0.3795121014118195 + <_> + + <_> + + + + <_>0 8 8 2 -1. + <_>0 8 4 1 2. + <_>4 9 4 1 2. + 0 + 7.1955118983169086e-006 + 0.3128314912319183 + 1 + <_> + + + + <_>5 9 10 8 -1. + <_>5 9 5 4 2. + <_>10 13 5 4 2. + 0 + 0.0471144095063210 + 0.5537893176078796 + 0.1027309000492096 + <_> + + <_> + + + + <_>9 7 2 4 -1. + <_>9 7 1 4 2. + 0 + 7.2878710925579071e-003 + 0.4660859107971191 + 1 + <_> + + + + <_>9 6 3 4 -1. + <_>10 6 1 4 3. + 0 + -6.1887511983513832e-003 + 0.7158858180046082 + 0.4724448919296265 + <_> + + <_> + + + + <_>8 3 2 1 -1. + <_>9 3 1 1 2. + 0 + 2.9757320880889893e-003 + 1 + 0.0593456886708736 + <_> + + + + <_>8 6 3 4 -1. + <_>9 6 1 4 3. + 0 + -1.8449809867888689e-003 + 0.7027301788330078 + 0.4718731045722961 + <_> + + <_> + + + + <_>12 0 4 14 -1. + <_>14 0 2 7 2. + <_>12 7 2 7 2. + 0 + 1.0239540279144421e-004 + 0.5894734263420105 + 1 + <_> + + + + <_>12 5 6 9 -1. + <_>12 5 3 9 2. + 0 + 2.4277009069919586e-003 + 0.4862355887889862 + 0.5247588157653809 + <_> + + <_> + + + + <_>0 2 6 16 -1. + <_>3 2 3 16 2. + 0 + -0.0647513121366501 + 0.6917471289634705 + 1 + <_> + + + + <_>1 12 4 2 -1. + <_>1 13 4 1 2. + 0 + 3.9380151429213583e-004 + 0.4669617116451263 + 0.2382405996322632 + 12.5784997940063480 + 4 + -1 + <_> + + + <_> + + <_> + + + + <_>7 7 6 1 -1. + <_>9 7 2 1 3. + 0 + 1.4397440245375037e-003 + 0.2773470878601074 + 1 + <_> + + + + <_>8 3 4 9 -1. + <_>8 6 4 3 3. + 0 + -5.4068560712039471e-004 + 0.7427154779434204 + 0.2479735016822815 + <_> + + <_> + + + + <_>12 10 4 6 -1. + <_>12 13 4 3 2. + 0 + -7.1237959673453588e-006 + 1 + 0.2199503034353256 + <_> + + + + <_>8 1 8 16 -1. + <_>12 1 4 8 2. + <_>8 9 4 8 2. + 0 + -2.3661039303988218e-003 + 0.5889989733695984 + 0.2595716118812561 + <_> + + <_> + + + + <_>4 6 3 6 -1. + <_>4 9 3 3 2. + 0 + 1.7343269428238273e-003 + 0.1860125958919525 + 1 + <_> + + + + <_>1 3 6 2 -1. + <_>4 3 3 2 2. + 0 + 1.5874590026214719e-003 + 0.4151870906352997 + 0.7103474140167236 + <_> + + <_> + + + + <_>9 8 3 12 -1. + <_>9 12 3 4 3. + 0 + 3.7285638973116875e-003 + 1 + 0.2527967095375061 + <_> + + + + <_>10 9 7 10 -1. + <_>10 14 7 5 2. + 0 + -0.1288381963968277 + 0.1393000930547714 + 0.5254514813423157 + <_> + + <_> + + + + <_>3 9 7 10 -1. + <_>3 14 7 5 2. + 0 + 7.9412180930376053e-003 + 1 + 0.2487729042768478 + <_> + + + + <_>7 5 1 14 -1. + <_>7 12 1 7 2. + 0 + -0.0126617299392819 + 0.2710700035095215 + 0.6618837714195252 + <_> + + <_> + + + + <_>13 14 1 6 -1. + <_>13 16 1 2 3. + 0 + 3.0146789868013002e-005 + 0.3812825977802277 + 1 + <_> + + + + <_>14 12 3 6 -1. + <_>14 14 3 2 3. + 0 + -0.0163301602005959 + 0.2326432019472122 + 0.5263010859489441 + <_> + + <_> + + + + <_>6 14 1 6 -1. + <_>6 16 1 2 3. + 0 + 1.4622770322603174e-005 + 0.4293332099914551 + 1 + <_> + + + + <_>3 12 3 6 -1. + <_>3 14 3 2 3. + 0 + -0.0208586603403091 + 0.1600403934717178 + 0.6782314777374268 + <_> + + <_> + + + + <_>8 13 5 3 -1. + <_>8 14 5 1 3. + 0 + 2.8194559272378683e-003 + 1 + 0.6679294109344482 + <_> + + + + <_>9 14 2 3 -1. + <_>9 15 2 1 3. + 0 + 3.7899368908256292e-003 + 0.4587705135345459 + 0.7176238894462585 + <_> + + <_> + + + + <_>5 1 10 8 -1. + <_>5 1 5 4 2. + <_>10 5 5 4 2. + 0 + 0.0353446416556835 + 1 + 0.1864075064659119 + <_> + + + + <_>6 4 5 4 -1. + <_>6 6 5 2 2. + 0 + -1.1571600334718823e-003 + 0.5538259744644165 + 0.3150450885295868 + <_> + + <_> + + + + <_>1 10 18 1 -1. + <_>7 10 6 1 3. + 0 + -5.8742752298712730e-003 + 0.2828791141510010 + 1 + <_> + + + + <_>11 10 4 3 -1. + <_>11 10 2 3 2. + 0 + -1.5201780115603469e-005 + 0.5870224237442017 + 0.3704823851585388 + <_> + + <_> + + + + <_>5 11 6 1 -1. + <_>7 11 2 1 3. + 0 + -2.2681879636365920e-004 + 1 + 0.4218930900096893 + <_> + + + + <_>3 13 2 3 -1. + <_>3 14 2 1 3. + 0 + 3.7845689803361893e-003 + 0.6667001247406006 + 0.2461182028055191 + <_> + + <_> + + + + <_>12 12 3 4 -1. + <_>12 14 3 2 2. + 0 + -8.5295992903411388e-005 + 1 + 0.3557587862014771 + <_> + + + + <_>11 10 5 6 -1. + <_>11 12 5 2 3. + 0 + -0.0443948917090893 + 0.1665547043085098 + 0.5234848856925964 + <_> + + <_> + + + + <_>0 8 16 2 -1. + <_>0 9 16 1 2. + 0 + 1.0126030538231134e-003 + 0.2884612977504730 + 1 + <_> + + + + <_>2 1 3 4 -1. + <_>2 3 3 2 2. + 0 + -7.6327780261635780e-003 + 0.2969340085983276 + 0.6080111265182495 + <_> + + <_> + + + + <_>9 7 3 3 -1. + <_>10 7 1 3 3. + 0 + 4.0330411866307259e-003 + 0.4536390006542206 + 1 + <_> + + + + <_>5 6 12 6 -1. + <_>9 6 4 6 3. + 0 + 0.1367668956518173 + 0.5177264213562012 + 0.1449182033538818 + <_> + + <_> + + + + <_>8 7 3 3 -1. + <_>9 7 1 3 3. + 0 + -5.0060478970408440e-003 + 0.7616909742355347 + 1 + <_> + + + + <_>3 6 12 6 -1. + <_>7 6 4 6 3. + 0 + -0.0124758398160338 + 0.2159706056118012 + 0.5460187792778015 + <_> + + <_> + + + + <_>10 5 6 5 -1. + <_>12 5 2 5 3. + 0 + -9.4012258341535926e-004 + 1 + 0.3926295936107636 + <_> + + + + <_>5 7 10 2 -1. + <_>5 7 5 2 2. + 0 + -0.0121919801458716 + 0.3478881120681763 + 0.5542662739753723 + <_> + + <_> + + + + <_>4 5 6 5 -1. + <_>6 5 2 5 3. + 0 + -5.4959481349214911e-004 + 0.6064276099205017 + 1 + <_> + + + + <_>9 3 2 10 -1. + <_>9 8 2 5 2. + 0 + -2.1802430273965001e-004 + 0.5697407126426697 + 0.1779713928699493 + <_> + + <_> + + + + <_>3 1 16 2 -1. + <_>11 1 8 1 2. + <_>3 2 8 1 2. + 0 + 6.9115799851715565e-003 + 0.5379372239112854 + 1 + <_> + + + + <_>9 9 3 2 -1. + <_>9 10 3 1 2. + 0 + -9.7631698008626699e-004 + 0.3327839076519013 + 0.5461531281471252 + <_> + + <_> + + + + <_>1 1 16 2 -1. + <_>1 1 8 1 2. + <_>9 2 8 1 2. + 0 + -8.7870173156261444e-003 + 0.2116160988807678 + 1 + <_> + + + + <_>8 14 1 3 -1. + <_>8 15 1 1 3. + 0 + -1.6761029837653041e-003 + 0.6635823249816895 + 0.4365859031677246 + <_> + + <_> + + + + <_>4 5 12 10 -1. + <_>10 5 6 5 2. + <_>4 10 6 5 2. + 0 + -0.0556949488818645 + 1 + 0.5387424826622009 + <_> + + + + <_>7 13 6 6 -1. + <_>10 13 3 3 2. + <_>7 16 3 3 2. + 0 + -0.0198443792760372 + 0.1602804958820343 + 0.5330458879470825 + <_> + + <_> + + + + <_>8 9 3 2 -1. + <_>8 10 3 1 2. + 0 + -7.4751611100509763e-004 + 0.2917476892471314 + 1 + <_> + + + + <_>7 2 6 4 -1. + <_>9 2 2 4 3. + 0 + 0.0230328906327486 + 0.5608124136924744 + 0.1997981071472168 + <_> + + <_> + + + + <_>6 6 9 3 -1. + <_>6 7 9 1 3. + 0 + -3.0700280331075191e-003 + 1 + 0.3938314020633698 + <_> + + + + <_>10 7 6 1 -1. + <_>12 7 2 1 3. + 0 + -1.1636839481070638e-003 + 0.5757436156272888 + 0.4239456951618195 + <_> + + <_> + + + + <_>0 0 18 6 -1. + <_>6 0 6 6 3. + 0 + 0.2246433943510056 + 1 + 0.7676553130149841 + <_> + + + + <_>6 10 2 6 -1. + <_>6 13 2 3 2. + 0 + 1.4412109740078449e-003 + 0.5353866219520569 + 0.2514776885509491 + <_> + + <_> + + + + <_>11 12 3 6 -1. + <_>11 15 3 3 2. + 0 + -0.0300112497061491 + 0.2364903986454010 + 1 + <_> + + + + <_>4 4 12 12 -1. + <_>10 4 6 6 2. + <_>4 10 6 6 2. + 0 + -0.0530789606273174 + 0.2385863959789276 + 0.5414664745330811 + <_> + + <_> + + + + <_>1 2 3 6 -1. + <_>2 2 1 6 3. + 0 + 2.0800929050892591e-003 + 1 + 0.6511614918708801 + <_> + + + + <_>1 5 3 7 -1. + <_>2 5 1 7 3. + 0 + -4.0738182142376900e-003 + 0.6030414104461670 + 0.3587701022624970 + <_> + + <_> + + + + <_>4 13 12 4 -1. + <_>10 13 6 2 2. + <_>4 15 6 2 2. + 0 + -0.0195293705910444 + 1 + 0.5423592925071716 + <_> + + + + <_>3 3 17 12 -1. + <_>3 9 17 6 2. + 0 + -0.0533094704151154 + 0.2360953986644745 + 0.5401757955551148 + <_> + + <_> + + + + <_>3 3 14 12 -1. + <_>3 3 7 6 2. + <_>10 9 7 6 2. + 0 + -0.0348495617508888 + 0.2836985886096954 + 1 + <_> + + + + <_>2 11 16 9 -1. + <_>2 14 16 3 3. + 0 + -0.1265845000743866 + 0.1813516020774841 + 0.5421046018600464 + <_> + + <_> + + + + <_>9 14 3 6 -1. + <_>9 17 3 3 2. + 0 + 7.3325118137290701e-006 + 0.3980365991592407 + 1 + <_> + + + + <_>8 14 4 6 -1. + <_>10 14 2 3 2. + <_>8 17 2 3 2. + 0 + -0.0118438703939319 + 0.2616384923458099 + 0.5237730145454407 + <_> + + <_> + + + + <_>6 2 6 1 -1. + <_>8 2 2 1 3. + 0 + -4.8470678739249706e-003 + 0.2438108026981354 + 1 + <_> + + + + <_>9 5 2 5 -1. + <_>10 5 1 5 2. + 0 + 8.1693977117538452e-003 + 0.5327146053314209 + 0.8190376758575440 + <_> + + <_> + + + + <_>9 8 3 5 -1. + <_>10 8 1 5 3. + 0 + -6.4716790802776814e-003 + 1 + 0.4679693877696991 + <_> + + + + <_>9 12 6 1 -1. + <_>9 12 3 1 2. + 0 + -1.5188479665084742e-005 + 0.5563911795616150 + 0.4367586076259613 + <_> + + <_> + + + + <_>8 8 3 5 -1. + <_>9 8 1 5 3. + 0 + 3.0696711037307978e-003 + 1 + 0.6664348840713501 + <_> + + + + <_>6 10 4 3 -1. + <_>8 10 2 3 2. + 0 + -1.6296720423270017e-004 + 0.5594611167907715 + 0.3042711913585663 + 14.5467500686645510 + 5 + -1 + <_> + + + <_> + + <_> + + + + <_>0 4 20 6 -1. + <_>0 6 20 2 3. + 0 + -9.8275858908891678e-003 + 1 + 0.2116018980741501 + <_> + + + + <_>1 3 8 6 -1. + <_>1 3 4 3 2. + <_>5 6 4 3 2. + 0 + -4.1693858802318573e-003 + 0.6924685239791870 + 0.3043777048587799 + <_> + + <_> + + + + <_>7 15 6 4 -1. + <_>7 17 6 2 2. + 0 + 3.5341319744475186e-004 + 0.3183285892009735 + 1 + <_> + + + + <_>3 10 14 10 -1. + <_>3 15 14 5 2. + 0 + 4.8054549843072891e-003 + 0.5456559062004089 + 0.2522268891334534 + <_> + + <_> + + + + <_>6 4 4 4 -1. + <_>8 4 2 4 2. + 0 + 2.1071180526632816e-004 + 0.2902618050575256 + 1 + <_> + + + + <_>0 4 20 10 -1. + <_>0 9 20 5 2. + 0 + -2.8318869881331921e-003 + 0.3130455911159515 + 0.6884937286376953 + <_> + + <_> + + + + <_>9 4 2 14 -1. + <_>9 11 2 7 2. + 0 + -7.5633679443853907e-006 + 1 + 0.2962465882301331 + <_> + + + + <_>2 0 16 4 -1. + <_>2 2 16 2 2. + 0 + -8.2888139877468348e-004 + 0.3099626004695892 + 0.5752515196800232 + <_> + + <_> + + + + <_>4 12 6 8 -1. + <_>4 12 3 4 2. + <_>7 16 3 4 2. + 0 + 1.6209259629249573e-003 + 0.3993195891380310 + 1 + <_> + + + + <_>0 5 6 7 -1. + <_>3 5 3 7 2. + 0 + 9.1338958591222763e-003 + 0.4827372133731842 + 0.7537832856178284 + <_> + + <_> + + + + <_>10 7 10 4 -1. + <_>15 7 5 2 2. + <_>10 9 5 2 2. + 0 + -4.1212290525436401e-003 + 0.2616927027702332 + 1 + <_> + + + + <_>5 8 12 1 -1. + <_>9 8 4 1 3. + 0 + -2.5447290390729904e-003 + 0.3108702898025513 + 0.5491235852241516 + <_> + + <_> + + + + <_>9 9 2 2 -1. + <_>9 10 2 1 2. + 0 + -6.2652782071381807e-004 + 0.3239691853523254 + 1 + <_> + + + + <_>9 4 2 4 -1. + <_>9 6 2 2 2. + 0 + -3.6596331483451650e-005 + 0.6517410874366760 + 0.4178912043571472 + <_> + + <_> + + + + <_>9 6 3 6 -1. + <_>10 6 1 6 3. + 0 + 0.0138827199116349 + 1 + 0.6771203875541687 + <_> + + + + <_>12 7 6 4 -1. + <_>15 7 3 2 2. + <_>12 9 3 2 2. + 0 + 1.0493700392544270e-003 + 0.4159511029720306 + 0.5652891993522644 + <_> + + <_> + + + + <_>8 6 3 6 -1. + <_>9 6 1 6 3. + 0 + 0.0182153601199389 + 1 + 0.7689601182937622 + <_> + + + + <_>1 6 18 6 -1. + <_>1 6 9 3 2. + <_>10 9 9 3 2. + 0 + -0.0113345803692937 + 0.2873323857784271 + 0.4988932907581329 + <_> + + <_> + + + + <_>9 1 3 3 -1. + <_>10 1 1 3 3. + 0 + -4.1097560897469521e-003 + 1 + 0.5463008284568787 + <_> + + + + <_>10 8 5 2 -1. + <_>10 9 5 1 2. + 0 + 4.2612891411408782e-004 + 0.3631235063076019 + 0.5512552261352539 + <_> + + <_> + + + + <_>8 1 3 3 -1. + <_>9 1 1 3 3. + 0 + 6.0301548801362514e-003 + 1 + 0.1143767014145851 + <_> + + + + <_>5 8 5 2 -1. + <_>5 9 5 1 2. + 0 + 3.3587709185667336e-004 + 0.2891078889369965 + 0.5447341799736023 + <_> + + <_> + + + + <_>8 6 8 8 -1. + <_>12 6 4 4 2. + <_>8 10 4 4 2. + 0 + 6.2279507983475924e-004 + 1 + 0.3023431897163391 + <_> + + + + <_>5 7 10 2 -1. + <_>5 7 5 2 2. + 0 + -0.0258371196687222 + 0.2167005985975266 + 0.5278152823448181 + <_> + + <_> + + + + <_>4 5 12 10 -1. + <_>4 5 6 5 2. + <_>10 10 6 5 2. + 0 + 0.0217749103903770 + 1 + 0.3254834115505219 + <_> + + + + <_>5 5 2 3 -1. + <_>5 6 2 1 3. + 0 + 1.7682299949228764e-003 + 0.5263050794601440 + 0.7526329159736633 + <_> + + <_> + + + + <_>7 14 6 3 -1. + <_>7 15 6 1 3. + 0 + -0.0137938102707267 + 0.7410330176353455 + 1 + <_> + + + + <_>9 14 3 3 -1. + <_>9 15 3 1 3. + 0 + -5.0852829590439796e-003 + 0.6836609840393066 + 0.4579071104526520 + <_> + + <_> + + + + <_>8 14 3 3 -1. + <_>8 15 3 1 3. + 0 + 6.1795017682015896e-003 + 1 + 0.7449936270713806 + <_> + + + + <_>1 10 8 9 -1. + <_>1 13 8 3 3. + 0 + 0.0100303199142218 + 0.4860779941082001 + 0.2361457049846649 + <_> + + <_> + + + + <_>9 7 2 3 -1. + <_>9 8 2 1 3. + 0 + -6.4201927743852139e-003 + 0.1467327028512955 + 1 + <_> + + + + <_>12 3 3 3 -1. + <_>13 3 1 3 3. + 0 + -5.6961281225085258e-003 + 0.2347819954156876 + 0.5323377251625061 + <_> + + <_> + + + + <_>5 3 3 3 -1. + <_>6 3 1 3 3. + 0 + -7.1498160250484943e-003 + 0.1477057039737701 + 1 + <_> + + + + <_>5 6 2 12 -1. + <_>5 10 2 4 3. + 0 + 2.4450740311294794e-003 + 0.3498533964157105 + 0.5803561806678772 + <_> + + <_> + + + + <_>1 11 18 4 -1. + <_>10 11 9 2 2. + <_>1 13 9 2 2. + 0 + -0.0375034101307392 + 1 + 0.5259550809860230 + <_> + + + + <_>7 12 6 2 -1. + <_>7 13 6 1 2. + 0 + 4.7799441381357610e-004 + 0.4362882971763611 + 0.6208922863006592 + <_> + + <_> + + + + <_>6 0 3 6 -1. + <_>7 0 1 6 3. + 0 + -7.0806080475449562e-003 + 0.2039460986852646 + 1 + <_> + + + + <_>0 11 18 4 -1. + <_>0 11 9 2 2. + <_>9 13 9 2 2. + 0 + 0.0328180007636547 + 0.5198358893394470 + 0.1371196061372757 + <_> + + <_> + + + + <_>7 12 6 2 -1. + <_>7 13 6 1 2. + 0 + 6.5188988810405135e-004 + 1 + 0.6323429942131043 + <_> + + + + <_>9 12 3 3 -1. + <_>9 13 3 1 3. + 0 + 4.6485587954521179e-003 + 0.4720163047313690 + 0.6567087173461914 + <_> + + <_> + + + + <_>9 12 2 3 -1. + <_>9 13 2 1 3. + 0 + -1.9827929791063070e-003 + 0.6053060293197632 + 1 + <_> + + + + <_>8 11 4 3 -1. + <_>8 12 4 1 3. + 0 + -1.6011310508474708e-003 + 0.5090519189834595 + 0.3116933107376099 + <_> + + <_> + + + + <_>13 3 4 2 -1. + <_>13 4 4 1 2. + 0 + -3.0539939180016518e-003 + 0.3429804146289825 + 1 + <_> + + + + <_>4 0 12 2 -1. + <_>4 1 12 1 2. + 0 + 4.3212040327489376e-004 + 0.3838402926921845 + 0.5775598287582398 + <_> + + <_> + + + + <_>6 9 8 8 -1. + <_>6 9 4 4 2. + <_>10 13 4 4 2. + 0 + -0.0274521205574274 + 0.2143469005823135 + 1 + <_> + + + + <_>1 11 6 2 -1. + <_>1 12 6 1 2. + 0 + 9.3099439982324839e-004 + 0.5952966213226318 + 0.3760158121585846 + <_> + + <_> + + + + <_>2 5 18 8 -1. + <_>11 5 9 4 2. + <_>2 9 9 4 2. + 0 + 6.7144189961254597e-003 + 0.5692626833915710 + 1 + <_> + + + + <_>7 1 6 10 -1. + <_>7 6 6 5 2. + 0 + -3.3701690845191479e-003 + 0.5784304141998291 + 0.3974282145500183 + <_> + + <_> + + + + <_>0 3 3 6 -1. + <_>0 5 3 2 3. + 0 + -0.0189039595425129 + 0.1818892955780029 + 1 + <_> + + + + <_>4 5 4 3 -1. + <_>4 6 4 1 3. + 0 + -6.5850871615111828e-003 + 0.6849110126495361 + 0.4351584017276764 + <_> + + <_> + + + + <_>19 3 1 6 -1. + <_>19 5 1 2 3. + 0 + 5.8810501359403133e-003 + 1 + 0.2726660966873169 + <_> + + + + <_>6 15 8 2 -1. + <_>6 16 8 1 2. + 0 + 8.0092082498595119e-004 + 0.4236431121826172 + 0.5844675898551941 + <_> + + <_> + + + + <_>0 3 1 6 -1. + <_>0 5 1 2 3. + 0 + 1.8510579830035567e-003 + 1 + 0.3371320962905884 + <_> + + + + <_>5 5 3 3 -1. + <_>5 6 3 1 3. + 0 + 6.3273650594055653e-003 + 0.5270221829414368 + 0.8053650856018066 + <_> + + <_> + + + + <_>8 8 4 3 -1. + <_>8 9 4 1 3. + 0 + -3.3820930402725935e-003 + 0.2866018116474152 + 1 + <_> + + + + <_>10 6 6 3 -1. + <_>12 6 2 3 3. + 0 + -1.9292969955131412e-003 + 0.5888946056365967 + 0.3895787000656128 + <_> + + <_> + + + + <_>8 13 2 6 -1. + <_>8 16 2 3 2. + 0 + 0.0149952201172709 + 1 + 0.2177816927433014 + <_> + + + + <_>9 11 2 8 -1. + <_>9 15 2 4 2. + 0 + -0.0263307504355907 + 0.1775317043066025 + 0.5671470165252686 + <_> + + <_> + + + + <_>10 6 6 3 -1. + <_>12 6 2 3 3. + 0 + -4.1734222322702408e-003 + 1 + 0.4652962088584900 + <_> + + + + <_>5 15 15 5 -1. + <_>10 15 5 5 3. + 0 + 0.0272683501243591 + 0.4768311083316803 + 0.5695238709449768 + <_> + + <_> + + + + <_>2 14 2 2 -1. + <_>2 15 2 1 2. + 0 + 9.8880263976752758e-004 + 1 + 0.3397401869297028 + <_> + + + + <_>4 7 6 2 -1. + <_>6 7 2 2 3. + 0 + -1.0528849670663476e-003 + 0.6250041127204895 + 0.4288412034511566 + <_> + + <_> + + + + <_>8 3 6 1 -1. + <_>10 3 2 1 3. + 0 + 5.2288072183728218e-003 + 0.5347762107849121 + 1 + <_> + + + + <_>1 0 18 12 -1. + <_>7 0 6 12 3. + 0 + 0.0303954593837261 + 0.4115518927574158 + 0.5660753846168518 + <_> + + <_> + + + + <_>0 14 8 6 -1. + <_>4 14 4 6 2. + 0 + -0.0791139304637909 + 0.7881323099136353 + 1 + <_> + + + + <_>0 15 15 5 -1. + <_>5 15 5 5 3. + 0 + 0.0182316694408655 + 0.3604339957237244 + 0.5569505095481873 + <_> + + <_> + + + + <_>8 3 6 1 -1. + <_>10 3 2 1 3. + 0 + 5.2288072183728218e-003 + 0.5416644215583801 + 1 + <_> + + + + <_>11 11 3 6 -1. + <_>11 14 3 3 2. + 0 + 4.3922828626818955e-004 + 0.5507156848907471 + 0.3882277011871338 + <_> + + <_> + + + + <_>6 3 6 1 -1. + <_>8 3 2 1 3. + 0 + -8.6501962505280972e-004 + 0.3185850977897644 + 1 + <_> + + + + <_>6 11 3 6 -1. + <_>6 14 3 3 2. + 0 + 1.0326979681849480e-003 + 0.5578364133834839 + 0.3219245970249176 + <_> + + <_> + + + + <_>9 6 3 4 -1. + <_>10 6 1 4 3. + 0 + -7.2997747920453548e-003 + 0.7073233127593994 + 1 + <_> + + + + <_>12 10 4 7 -1. + <_>12 10 2 7 2. + 0 + -9.3629042385146022e-004 + 0.5558015704154968 + 0.4613842070102692 + <_> + + <_> + + + + <_>8 6 3 4 -1. + <_>9 6 1 4 3. + 0 + -6.0483231209218502e-003 + 0.6869289875030518 + 1 + <_> + + + + <_>4 6 4 7 -1. + <_>6 6 2 7 2. + 0 + 6.7529221996665001e-003 + 0.4870317876338959 + 0.2650370895862579 + <_> + + <_> + + + + <_>10 3 4 12 -1. + <_>10 3 2 12 2. + 0 + 0.0530780293047428 + 0.5281515121459961 + 1 + <_> + + + + <_>10 8 3 4 -1. + <_>11 8 1 4 3. + 0 + -1.0225810110569000e-003 + 0.6085882186889648 + 0.4304867982864380 + <_> + + <_> + + + + <_>1 0 18 14 -1. + <_>7 0 6 14 3. + 0 + 0.0312706492841244 + 1 + 0.5445832014083862 + <_> + + + + <_>2 8 6 11 -1. + <_>5 8 3 11 2. + 0 + -6.3522169366478920e-003 + 0.5328335762023926 + 0.2364324033260346 + 18.5722503662109380 + 6 + -1 + <_> + + + <_> + + <_> + + + + <_>1 4 15 4 -1. + <_>1 6 15 2 2. + 0 + -6.2215630896389484e-003 + 1 + 0.2625581026077271 + <_> + + + + <_>5 5 10 8 -1. + <_>5 9 10 4 2. + 0 + 2.1097389981150627e-003 + 0.1564992964267731 + 0.6792883276939392 + <_> + + <_> + + + + <_>14 2 6 8 -1. + <_>14 2 3 8 2. + 0 + 0.0108458595350385 + 0.3485808968544006 + 1 + <_> + + + + <_>11 6 6 14 -1. + <_>14 6 3 7 2. + <_>11 13 3 7 2. + 0 + 6.4230401767417789e-004 + 0.3698255121707916 + 0.5921658277511597 + <_> + + <_> + + + + <_>9 5 2 12 -1. + <_>9 11 2 6 2. + 0 + 7.3311722371727228e-004 + 1 + 0.3007084131240845 + <_> + + + + <_>3 7 4 6 -1. + <_>3 9 4 2 3. + 0 + 1.0134200565516949e-003 + 0.3624922931194305 + 0.7072426080703735 + <_> + + <_> + + + + <_>14 3 6 6 -1. + <_>14 3 3 6 2. + 0 + 0.0110935596749187 + 0.4416702091693878 + 1 + <_> + + + + <_>15 2 4 4 -1. + <_>15 4 4 2 2. + 0 + -7.9127531498670578e-003 + 0.3028708100318909 + 0.5417376160621643 + <_> + + <_> + + + + <_>0 2 6 7 -1. + <_>3 2 3 7 2. + 0 + 0.0129053099080920 + 0.4374504089355469 + 1 + <_> + + + + <_>3 6 6 14 -1. + <_>3 6 3 7 2. + <_>6 13 3 7 2. + 0 + -4.2430912144482136e-003 + 0.4401589930057526 + 0.7565190792083740 + <_> + + <_> + + + + <_>4 6 16 8 -1. + <_>4 10 16 4 2. + 0 + -2.1304309484548867e-004 + 0.2310786992311478 + 1 + <_> + + + + <_>10 12 2 8 -1. + <_>10 16 2 4 2. + 0 + -2.2308640182018280e-003 + 0.3568195998668671 + 0.5749999284744263 + <_> + + <_> + + + + <_>7 0 6 20 -1. + <_>9 0 2 20 3. + 0 + 2.6400520000606775e-003 + 0.3593688905239105 + 1 + <_> + + + + <_>1 7 16 12 -1. + <_>1 7 8 6 2. + <_>9 13 8 6 2. + 0 + 0.0751010328531265 + 0.6363567709922791 + 0.2327028959989548 + <_> + + <_> + + + + <_>9 11 3 3 -1. + <_>9 12 3 1 3. + 0 + -7.7012968249619007e-003 + 0.7074623703956604 + 1 + <_> + + + + <_>11 9 4 5 -1. + <_>11 9 2 5 2. + 0 + 1.5588370151817799e-003 + 0.5700237154960632 + 0.3590450882911682 + <_> + + <_> + + + + <_>3 3 1 2 -1. + <_>3 4 1 1 2. + 0 + -4.7687938786111772e-004 + 0.2805441021919251 + 1 + <_> + + + + <_>7 17 5 3 -1. + <_>7 18 5 1 3. + 0 + 8.4234727546572685e-004 + 0.4125418961048126 + 0.6177995800971985 + <_> + + <_> + + + + <_>8 12 4 8 -1. + <_>10 12 2 4 2. + <_>8 16 2 4 2. + 0 + -0.0128251099959016 + 1 + 0.5403078198432922 + <_> + + + + <_>7 4 10 12 -1. + <_>12 4 5 6 2. + <_>7 10 5 6 2. + 0 + -6.5156567143276334e-004 + 0.5633643865585327 + 0.3356539011001587 + <_> + + <_> + + + + <_>8 14 4 3 -1. + <_>8 15 4 1 3. + 0 + -0.0120061598718166 + 0.7109510898590088 + 1 + <_> + + + + <_>5 9 4 5 -1. + <_>7 9 2 5 2. + 0 + 1.3213419588282704e-003 + 0.4903850853443146 + 0.2824583053588867 + <_> + + <_> + + + + <_>9 9 8 2 -1. + <_>9 9 4 2 2. + 0 + -0.0203074403107166 + 0.1891369968652725 + 1 + <_> + + + + <_>14 15 5 2 -1. + <_>14 16 5 1 2. + 0 + 4.0180929936468601e-003 + 0.5377966165542603 + 0.3119494915008545 + <_> + + <_> + + + + <_>9 14 2 3 -1. + <_>9 15 2 1 3. + 0 + 4.5315311290323734e-003 + 1 + 0.7206758260726929 + <_> + + + + <_>1 7 8 4 -1. + <_>1 7 4 2 2. + <_>5 9 4 2 2. + 0 + -4.4381739571690559e-003 + 0.1854667961597443 + 0.4981732964515686 + <_> + + <_> + + + + <_>19 3 1 2 -1. + <_>19 4 1 1 2. + 0 + 1.5692010056227446e-003 + 1 + 0.2638274133205414 + <_> + + + + <_>9 12 2 3 -1. + <_>9 13 2 1 3. + 0 + -4.9516442231833935e-003 + 0.6871067285537720 + 0.4714686870574951 + <_> + + <_> + + + + <_>3 14 14 4 -1. + <_>3 14 7 2 2. + <_>10 16 7 2 2. + 0 + -0.0274296794086695 + 0.1548285037279129 + 1 + <_> + + + + <_>5 0 10 2 -1. + <_>5 1 10 1 2. + 0 + 1.4181969454512000e-003 + 0.4376842975616455 + 0.6327368021011353 + <_> + + <_> + + + + <_>11 14 4 6 -1. + <_>11 16 4 2 3. + 0 + -0.0130789401009679 + 0.3166814148426056 + 1 + <_> + + + + <_>7 14 6 3 -1. + <_>7 15 6 1 3. + 0 + -3.5092779435217381e-003 + 0.6199743747711182 + 0.4379687011241913 + <_> + + <_> + + + + <_>7 13 6 6 -1. + <_>7 13 3 3 2. + <_>10 16 3 3 2. + 0 + 0.0189207307994366 + 1 + 0.1470714062452316 + <_> + + + + <_>0 2 1 6 -1. + <_>0 4 1 2 3. + 0 + 2.1683350205421448e-003 + 0.5809459090232849 + 0.3431949019432068 + <_> + + <_> + + + + <_>6 7 8 2 -1. + <_>6 8 8 1 2. + 0 + 1.6401590546593070e-003 + 0.3959457874298096 + 1 + <_> + + + + <_>9 7 6 1 -1. + <_>9 7 3 1 2. + 0 + 1.4005920093040913e-004 + 0.3240025043487549 + 0.5646647214889526 + <_> + + <_> + + + + <_>7 1 6 10 -1. + <_>7 6 6 5 2. + 0 + -3.3137591090053320e-003 + 1 + 0.4274528026580811 + <_> + + + + <_>0 2 6 2 -1. + <_>0 3 6 1 2. + 0 + -2.9459029901772738e-003 + 0.3341667950153351 + 0.6627960205078125 + <_> + + <_> + + + + <_>11 4 2 4 -1. + <_>11 4 1 4 2. + 0 + 1.3612229668069631e-004 + 0.4046927988529205 + 1 + <_> + + + + <_>11 10 3 6 -1. + <_>11 13 3 3 2. + 0 + 6.0512032359838486e-004 + 0.5484058260917664 + 0.3569940924644470 + <_> + + <_> + + + + <_>3 9 8 2 -1. + <_>7 9 4 2 2. + 0 + -0.0175139904022217 + 0.1824150979518890 + 1 + <_> + + + + <_>0 0 4 6 -1. + <_>2 0 2 6 2. + 0 + -0.0187350306659937 + 0.7971820235252380 + 0.5068569183349609 + <_> + + <_> + + + + <_>7 0 6 2 -1. + <_>9 0 2 2 3. + 0 + 0.0120656499639153 + 1 + 0.2167007029056549 + <_> + + + + <_>9 15 2 3 -1. + <_>9 16 2 1 3. + 0 + -2.6544178836047649e-003 + 0.6584178805351257 + 0.4628243148326874 + <_> + + <_> + + + + <_>3 12 1 2 -1. + <_>3 13 1 1 2. + 0 + 1.4501289697363973e-003 + 1 + 0.2090252041816711 + <_> + + + + <_>4 5 11 3 -1. + <_>4 6 11 1 3. + 0 + 0.0109540196135640 + 0.5112305283546448 + 0.7784575819969177 + <_> + + <_> + + + + <_>11 4 2 4 -1. + <_>11 4 1 4 2. + 0 + 0.0157717093825340 + 0.5132359266281128 + 1 + <_> + + + + <_>8 3 6 3 -1. + <_>10 3 2 3 3. + 0 + -0.0142526896670461 + 0.1742414981126785 + 0.5267148017883301 + <_> + + <_> + + + + <_>7 4 2 4 -1. + <_>8 4 1 4 2. + 0 + 3.0411860279855318e-005 + 0.3418447971343994 + 1 + <_> + + + + <_>6 3 6 3 -1. + <_>8 3 2 3 3. + 0 + 0.0234862994402647 + 0.5631265044212341 + 0.2006393969058991 + <_> + + <_> + + + + <_>11 4 4 3 -1. + <_>11 5 4 1 3. + 0 + 5.2205449901521206e-003 + 1 + 0.6249648928642273 + <_> + + + + <_>11 8 2 8 -1. + <_>11 12 2 4 2. + 0 + -0.0258124303072691 + 0.3203228116035461 + 0.5199329853057861 + <_> + + <_> + + + + <_>8 7 3 5 -1. + <_>9 7 1 5 3. + 0 + -1.9526650430634618e-003 + 0.6140705943107605 + 1 + <_> + + + + <_>9 7 2 5 -1. + <_>10 7 1 5 2. + 0 + -8.1470049917697906e-003 + 0.6592895984649658 + 0.3711124956607819 + <_> + + <_> + + + + <_>14 11 1 6 -1. + <_>14 13 1 2 3. + 0 + 3.2962448894977570e-003 + 1 + 0.2952111959457398 + <_> + + + + <_>8 8 4 3 -1. + <_>8 9 4 1 3. + 0 + -1.3961310032755136e-003 + 0.3320803940296173 + 0.5528414845466614 + <_> + + <_> + + + + <_>0 3 2 2 -1. + <_>0 4 2 1 2. + 0 + -4.1055441834032536e-003 + 0.1710550040006638 + 1 + <_> + + + + <_>4 14 5 6 -1. + <_>4 16 5 2 3. + 0 + -0.0108887795358896 + 0.3359434902667999 + 0.5674905180931091 + <_> + + <_> + + + + <_>11 4 4 3 -1. + <_>11 5 4 1 3. + 0 + -7.6768421567976475e-003 + 1 + 0.4773241877555847 + <_> + + + + <_>12 4 3 3 -1. + <_>12 5 3 1 3. + 0 + -9.7729787230491638e-003 + 0.8081045150756836 + 0.4845828115940094 + <_> + + <_> + + + + <_>5 4 4 3 -1. + <_>5 5 4 1 3. + 0 + 6.0439710505306721e-003 + 1 + 0.6784002184867859 + <_> + + + + <_>5 15 4 2 -1. + <_>7 15 2 2 2. + 0 + -4.6134641161188483e-004 + 0.5514639019966126 + 0.3642359972000122 + <_> + + <_> + + + + <_>15 1 5 9 -1. + <_>15 4 5 3 3. + 0 + 0.0579923614859581 + 1 + 0.1254435032606125 + <_> + + + + <_>9 10 3 3 -1. + <_>9 11 3 1 3. + 0 + 5.9384980704635382e-004 + 0.4424878954887390 + 0.5728461742401123 + <_> + + <_> + + + + <_>1 6 2 6 -1. + <_>1 8 2 2 3. + 0 + -6.2353480607271194e-003 + 0.2805041968822479 + 1 + <_> + + + + <_>2 4 8 15 -1. + <_>2 9 8 5 3. + 0 + -0.0127849299460649 + 0.1950912028551102 + 0.5652924776077271 + <_> + + <_> + + + + <_>9 12 3 2 -1. + <_>9 13 3 1 2. + 0 + 4.1973669431172311e-004 + 1 + 0.6166483759880066 + <_> + + + + <_>9 12 3 3 -1. + <_>9 13 3 1 3. + 0 + 8.0646801507100463e-004 + 0.4526579976081848 + 0.5944486856460571 + <_> + + <_> + + + + <_>7 6 3 5 -1. + <_>8 6 1 5 3. + 0 + -1.6339010326191783e-003 + 1 + 0.4086942076683044 + <_> + + + + <_>5 3 6 2 -1. + <_>7 3 2 2 3. + 0 + -4.8299999907612801e-003 + 0.2793526947498322 + 0.6444935202598572 + <_> + + <_> + + + + <_>6 1 8 10 -1. + <_>10 1 4 5 2. + <_>6 6 4 5 2. + 0 + -6.3992068171501160e-003 + 1 + 0.5671656131744385 + <_> + + + + <_>0 0 20 10 -1. + <_>10 0 10 5 2. + <_>0 5 10 5 2. + 0 + 0.1081919968128204 + 0.5311812162399292 + 0.2614356875419617 + <_> + + <_> + + + + <_>6 3 3 1 -1. + <_>7 3 1 1 3. + 0 + 6.5056560561060905e-004 + 1 + 0.2996774017810822 + <_> + + + + <_>0 2 6 8 -1. + <_>2 2 2 8 3. + 0 + 0.0206112507730722 + 0.4489943087100983 + 0.6888279914855957 + <_> + + <_> + + + + <_>11 10 3 4 -1. + <_>11 12 3 2 2. + 0 + -0.0251290500164032 + 1 + 0.5196864008903503 + <_> + + + + <_>12 6 3 8 -1. + <_>12 10 3 4 2. + 0 + 1.7922939732670784e-003 + 0.3466995954513550 + 0.5533587932586670 + <_> + + <_> + + + + <_>6 10 3 4 -1. + <_>6 12 3 2 2. + 0 + 1.5626220265403390e-003 + 1 + 0.3081440031528473 + <_> + + + + <_>5 6 3 8 -1. + <_>5 10 3 4 2. + 0 + -6.1898730928078294e-004 + 0.2693870961666107 + 0.5544489026069641 + <_> + + <_> + + + + <_>2 6 18 6 -1. + <_>11 6 9 3 2. + <_>2 9 9 3 2. + 0 + 4.8111421056091785e-003 + 0.5587847828865051 + 1 + <_> + + + + <_>7 14 7 3 -1. + <_>7 15 7 1 3. + 0 + 2.2484229411929846e-003 + 0.4672113060951233 + 0.6090825200080872 + <_> + + <_> + + + + <_>0 0 2 12 -1. + <_>1 0 1 12 2. + 0 + -0.0301472395658493 + 0.9027591943740845 + 1 + <_> + + + + <_>1 2 18 16 -1. + <_>1 10 18 8 2. + 0 + 0.2754867970943451 + 0.4719834923744202 + 0.2196920067071915 + <_> + + <_> + + + + <_>9 13 5 3 -1. + <_>9 14 5 1 3. + 0 + 3.6894630175083876e-003 + 1 + 0.6273009181022644 + <_> + + + + <_>8 13 4 3 -1. + <_>8 14 4 1 3. + 0 + 7.2957701049745083e-003 + 0.4839217960834503 + 0.6909062266349793 + <_> + + <_> + + + + <_>0 6 18 6 -1. + <_>0 6 9 3 2. + <_>9 9 9 3 2. + 0 + -0.0562110692262650 + 0.1738487929105759 + 1 + <_> + + + + <_>7 13 6 3 -1. + <_>7 14 6 1 3. + 0 + -2.6478560175746679e-003 + 0.6304144859313965 + 0.4474301934242249 + <_> + + <_> + + + + <_>17 4 1 3 -1. + <_>17 5 1 1 3. + 0 + -1.4534000074490905e-003 + 1 + 0.5302538275718689 + <_> + + + + <_>12 11 1 9 -1. + <_>12 14 1 3 3. + 0 + 2.8540920466184616e-003 + 0.5338397026062012 + 0.3796882927417755 + <_> + + <_> + + + + <_>2 4 1 3 -1. + <_>2 5 1 1 3. + 0 + 5.8243022067472339e-004 + 1 + 0.3269836902618408 + <_> + + + + <_>5 4 2 3 -1. + <_>5 5 2 1 3. + 0 + 9.2509482055902481e-004 + 0.4554812014102936 + 0.6358348131179810 + 21.5781192779541020 + 7 + -1 + <_> + + + <_> + + <_> + + + + <_>1 2 18 3 -1. + <_>7 2 6 3 3. + 0 + 0.0198064409196377 + 0.2809725105762482 + 1 + <_> + + + + <_>0 1 20 6 -1. + <_>0 3 20 2 3. + 0 + 7.0395611692219973e-004 + 0.3119826018810272 + 0.7090306282043457 + <_> + + <_> + + + + <_>7 5 6 3 -1. + <_>9 5 2 3 3. + 0 + 2.5563780218362808e-003 + 0.2981947958469391 + 1 + <_> + + + + <_>13 7 6 4 -1. + <_>16 7 3 2 2. + <_>13 9 3 2 2. + 0 + 1.0824160417541862e-003 + 0.3020560145378113 + 0.5808811187744141 + <_> + + <_> + + + + <_>3 1 4 10 -1. + <_>3 1 2 5 2. + <_>5 6 2 5 2. + 0 + -9.2893769033253193e-004 + 1 + 0.3738102912902832 + <_> + + + + <_>0 4 19 10 -1. + <_>0 9 19 5 2. + 0 + -0.0180097296833992 + 0.2163126021623612 + 0.6619253754615784 + <_> + + <_> + + + + <_>9 8 3 12 -1. + <_>9 12 3 4 3. + 0 + 2.3500190582126379e-003 + 1 + 0.2910403907299042 + <_> + + + + <_>11 18 5 2 -1. + <_>11 19 5 1 2. + 0 + 8.1822491483762860e-004 + 0.5578622817993164 + 0.3366627991199493 + <_> + + <_> + + + + <_>5 16 6 4 -1. + <_>5 16 3 2 2. + <_>8 18 3 2 2. + 0 + 6.2095321482047439e-004 + 0.4072425961494446 + 1 + <_> + + + + <_>5 18 3 2 -1. + <_>5 19 3 1 2. + 0 + 9.6780969761312008e-004 + 0.6859595775604248 + 0.3105461895465851 + <_> + + <_> + + + + <_>13 11 3 2 -1. + <_>13 12 3 1 2. + 0 + 4.8000211245380342e-004 + 1 + 0.3337332904338837 + <_> + + + + <_>8 5 8 4 -1. + <_>8 5 4 4 2. + 0 + 9.0538640506565571e-005 + 0.3370958864688873 + 0.5451210737228394 + <_> + + <_> + + + + <_>1 2 18 6 -1. + <_>1 2 9 3 2. + <_>10 5 9 3 2. + 0 + -0.0439147986471653 + 0.2625670135021210 + 1 + <_> + + + + <_>3 5 14 6 -1. + <_>3 7 14 2 3. + 0 + -5.6501338258385658e-003 + 0.6050462722778320 + 0.3232415020465851 + <_> + + <_> + + + + <_>18 1 2 6 -1. + <_>18 3 2 2 3. + 0 + 3.8661491125822067e-003 + 1 + 0.3262613117694855 + <_> + + + + <_>9 11 6 1 -1. + <_>11 11 2 1 3. + 0 + -6.3069426687434316e-005 + 0.5817307829856873 + 0.4164389967918396 + <_> + + <_> + + + + <_>0 2 6 11 -1. + <_>3 2 3 11 2. + 0 + 0.0525337383151054 + 1 + 0.7095398902893066 + <_> + + + + <_>4 12 2 3 -1. + <_>4 13 2 1 3. + 0 + 1.3818660518154502e-003 + 0.5292875766754150 + 0.2541388869285584 + <_> + + <_> + + + + <_>6 12 9 2 -1. + <_>9 12 3 2 3. + 0 + -8.9264067355543375e-004 + 1 + 0.4085341095924377 + <_> + + + + <_>9 4 6 15 -1. + <_>9 4 3 15 2. + 0 + 0.0855795070528984 + 0.5263236165046692 + 0.3003202974796295 + <_> + + <_> + + + + <_>5 11 6 1 -1. + <_>7 11 2 1 3. + 0 + -1.8343339615967125e-004 + 1 + 0.4029205143451691 + <_> + + + + <_>5 4 6 15 -1. + <_>8 4 3 15 2. + 0 + -9.7924815490841866e-003 + 0.3521319925785065 + 0.6664004921913147 + <_> + + <_> + + + + <_>14 12 6 7 -1. + <_>14 12 3 7 2. + 0 + 0.0144286202266812 + 0.4593566060066223 + 1 + <_> + + + + <_>18 3 2 9 -1. + <_>18 6 2 3 3. + 0 + -0.0456870011985302 + 0.1474756002426148 + 0.5178632140159607 + <_> + + <_> + + + + <_>8 1 3 1 -1. + <_>9 1 1 1 3. + 0 + -2.5763090234249830e-003 + 0.1837278008460999 + 1 + <_> + + + + <_>0 12 6 7 -1. + <_>3 12 3 7 2. + 0 + -0.0383018590509892 + 0.8082658052444458 + 0.5166687965393066 + <_> + + <_> + + + + <_>13 7 6 4 -1. + <_>16 7 3 2 2. + <_>13 9 3 2 2. + 0 + 2.8978290501981974e-003 + 0.4798013865947723 + 1 + <_> + + + + <_>8 0 10 2 -1. + <_>8 1 10 1 2. + 0 + -2.5165060069411993e-003 + 0.3346295952796936 + 0.5444449186325073 + <_> + + <_> + + + + <_>1 7 6 4 -1. + <_>1 7 3 2 2. + <_>4 9 3 2 2. + 0 + 5.6281982688233256e-004 + 0.3589026927947998 + 1 + <_> + + + + <_>1 2 3 3 -1. + <_>1 3 3 1 3. + 0 + 3.6684391088783741e-003 + 0.5983129739761353 + 0.2983964085578919 + <_> + + <_> + + + + <_>9 13 4 3 -1. + <_>9 14 4 1 3. + 0 + 2.1319789811968803e-003 + 1 + 0.6163223981857300 + <_> + + + + <_>12 13 7 2 -1. + <_>12 14 7 1 2. + 0 + 7.6037310063838959e-003 + 0.5217130184173584 + 0.2054159045219421 + <_> + + <_> + + + + <_>5 12 9 2 -1. + <_>8 12 3 2 3. + 0 + -1.1668079969240353e-004 + 1 + 0.3446668982505798 + <_> + + + + <_>6 10 4 8 -1. + <_>6 14 4 4 2. + 0 + 3.1659509986639023e-003 + 0.5597484707832336 + 0.2673786878585815 + <_> + + <_> + + + + <_>1 0 18 4 -1. + <_>7 0 6 4 3. + 0 + -0.0225694999098778 + 0.6900268197059631 + 1 + <_> + + + + <_>12 0 5 2 -1. + <_>12 1 5 1 2. + 0 + 2.7129601221531630e-004 + 0.4486638903617859 + 0.5508785247802734 + <_> + + <_> + + + + <_>7 7 1 12 -1. + <_>7 13 1 6 2. + 0 + -0.0154344597831368 + 0.2048323005437851 + 1 + <_> + + + + <_>6 2 3 4 -1. + <_>7 2 1 4 3. + 0 + -8.4861656650900841e-003 + 0.1254952996969223 + 0.5060356259346008 + <_> + + <_> + + + + <_>0 13 20 6 -1. + <_>0 15 20 2 3. + 0 + -0.1180747002363205 + 0.0676330626010895 + 1 + <_> + + + + <_>8 5 12 2 -1. + <_>14 5 6 1 2. + <_>8 6 6 1 2. + 0 + -1.2300079688429832e-003 + 0.5660700798034668 + 0.4292201101779938 + <_> + + <_> + + + + <_>8 14 2 3 -1. + <_>8 15 2 1 3. + 0 + -7.0290351286530495e-003 + 0.7136403918266296 + 1 + <_> + + + + <_>8 14 4 3 -1. + <_>8 15 4 1 3. + 0 + 8.9325206354260445e-003 + 0.4338876008987427 + 0.7060875296592712 + <_> + + <_> + + + + <_>12 13 7 6 -1. + <_>12 15 7 2 3. + 0 + -0.0477359816431999 + 1 + 0.5268685221672058 + <_> + + + + <_>6 0 8 12 -1. + <_>10 0 4 6 2. + <_>6 6 4 6 2. + 0 + -0.0441555790603161 + 0.2580580115318298 + 0.5406960844993591 + <_> + + <_> + + + + <_>0 15 9 4 -1. + <_>0 17 9 2 2. + 0 + -0.0259834807366133 + 0.1905054003000259 + 1 + <_> + + + + <_>9 0 2 5 -1. + <_>10 0 1 5 2. + 0 + -4.7885831445455551e-003 + 0.2551892995834351 + 0.5339077115058899 + <_> + + <_> + + + + <_>9 5 2 6 -1. + <_>9 5 1 6 2. + 0 + 6.7423451691865921e-003 + 0.4693309962749481 + 1 + <_> + + + + <_>17 2 3 6 -1. + <_>17 4 3 2 3. + 0 + 0.0116547504439950 + 0.5261964201927185 + 0.3145434856414795 + <_> + + <_> + + + + <_>3 11 2 3 -1. + <_>3 12 2 1 3. + 0 + -5.6982729583978653e-003 + 0.1756853014230728 + 1 + <_> + + + + <_>7 13 3 3 -1. + <_>7 14 3 1 3. + 0 + -7.2983349673449993e-003 + 0.7774729728698731 + 0.5124292969703674 + <_> + + <_> + + + + <_>14 12 5 3 -1. + <_>14 13 5 1 3. + 0 + 7.9091778025031090e-003 + 0.5284559726715088 + 1 + <_> + + + + <_>4 8 14 3 -1. + <_>4 9 14 1 3. + 0 + -1.5874979726504534e-004 + 0.3887802064418793 + 0.5501173734664917 + <_> + + <_> + + + + <_>1 12 5 3 -1. + <_>1 13 5 1 3. + 0 + -6.2235877849161625e-003 + 0.2489829063415527 + 1 + <_> + + + + <_>1 15 12 2 -1. + <_>1 15 6 1 2. + <_>7 16 6 1 2. + 0 + 1.3308860361576080e-003 + 0.4262146055698395 + 0.5935062170028687 + <_> + + <_> + + + + <_>12 11 4 2 -1. + <_>12 12 4 1 2. + 0 + 5.2055278792977333e-003 + 1 + 0.2545222938060761 + <_> + + + + <_>9 8 3 5 -1. + <_>10 8 1 5 3. + 0 + 0.0140651697292924 + 0.4851990044116974 + 0.7021418809890747 + <_> + + <_> + + + + <_>9 5 2 6 -1. + <_>10 5 1 6 2. + 0 + -6.7384149879217148e-003 + 0.7143270969390869 + 1 + <_> + + + + <_>0 2 3 6 -1. + <_>0 4 3 2 3. + 0 + 3.3406780567020178e-003 + 0.5175725221633911 + 0.2808643877506256 + <_> + + <_> + + + + <_>12 11 4 2 -1. + <_>12 12 4 1 2. + 0 + -0.0118806995451450 + 1 + 0.5173221826553345 + <_> + + + + <_>9 7 3 5 -1. + <_>10 7 1 5 3. + 0 + 1.4226379571482539e-003 + 0.4502865970134735 + 0.5795695185661316 + <_> + + <_> + + + + <_>4 11 4 2 -1. + <_>4 12 4 1 2. + 0 + 2.9858129564672709e-003 + 1 + 0.1915116012096405 + <_> + + + + <_>8 8 3 5 -1. + <_>9 8 1 5 3. + 0 + -2.0481580868363380e-003 + 0.6502432227134705 + 0.4559315145015717 + <_> + + <_> + + + + <_>9 3 3 1 -1. + <_>10 3 1 1 3. + 0 + 1.7122729914262891e-003 + 0.5376247167587280 + 1 + <_> + + + + <_>16 5 3 8 -1. + <_>17 5 1 8 3. + 0 + -0.0169808696955442 + 0.7056233286857605 + 0.4914605915546417 + <_> + + <_> + + + + <_>8 3 3 1 -1. + <_>9 3 1 1 3. + 0 + -1.1290470138192177e-003 + 0.2678706049919128 + 1 + <_> + + + + <_>1 5 3 8 -1. + <_>2 5 1 8 3. + 0 + 2.8620059601962566e-003 + 0.4410853981971741 + 0.6368319988250732 + <_> + + <_> + + + + <_>10 1 3 3 -1. + <_>11 1 1 3 3. + 0 + -3.8065758999437094e-003 + 0.2763563990592957 + 1 + <_> + + + + <_>17 5 2 4 -1. + <_>17 5 1 4 2. + 0 + 5.9090270660817623e-003 + 0.4867301881313324 + 0.6728776097297669 + <_> + + <_> + + + + <_>2 8 14 3 -1. + <_>2 9 14 1 3. + 0 + 1.1004370171576738e-003 + 0.4070514142513275 + 1 + <_> + + + + <_>9 7 1 3 -1. + <_>9 8 1 1 3. + 0 + -2.3396299220621586e-003 + 0.2604948878288269 + 0.6154860258102417 + <_> + + <_> + + + + <_>6 1 8 10 -1. + <_>6 6 8 5 2. + 0 + -3.6068160552531481e-003 + 0.5731999874114990 + 1 + <_> + + + + <_>13 0 6 8 -1. + <_>16 0 3 4 2. + <_>13 4 3 4 2. + 0 + 0.0408311896026134 + 0.4973376989364624 + 0.7387006878852844 + <_> + + <_> + + + + <_>1 5 2 4 -1. + <_>2 5 1 4 2. + 0 + -7.1082250215113163e-003 + 0.6984751224517822 + 1 + <_> + + + + <_>4 2 12 2 -1. + <_>4 3 12 1 2. + 0 + -9.3759730225428939e-004 + 0.2691167891025543 + 0.4741779863834381 + <_> + + <_> + + + + <_>8 8 4 4 -1. + <_>8 10 4 2 2. + 0 + -1.6740820137783885e-003 + 0.3551014065742493 + 1 + <_> + + + + <_>5 6 12 4 -1. + <_>9 6 4 4 3. + 0 + 0.0882877036929131 + 0.5244613885879517 + 0.2096650004386902 + <_> + + <_> + + + + <_>1 2 8 1 -1. + <_>5 2 4 1 2. + 0 + 8.2009629113599658e-004 + 0.4131096899509430 + 1 + <_> + + + + <_>1 1 6 10 -1. + <_>3 1 2 10 3. + 0 + -7.6624617213383317e-004 + 0.4620293080806732 + 0.6775410175323486 + <_> + + <_> + + + + <_>8 6 8 2 -1. + <_>8 6 4 2 2. + 0 + 6.5769668435677886e-004 + 1 + 0.5628275275230408 + <_> + + + + <_>10 7 6 6 -1. + <_>12 7 2 6 3. + 0 + -2.1304790861904621e-003 + 0.5576859712600708 + 0.4577650129795075 + <_> + + <_> + + + + <_>4 6 8 2 -1. + <_>8 6 4 2 2. + 0 + -3.7317050737328827e-004 + 1 + 0.4959256052970886 + <_> + + + + <_>4 7 6 6 -1. + <_>6 7 2 6 3. + 0 + -0.0111722303554416 + 0.5625635981559753 + 0.2047107964754105 + <_> + + <_> + + + + <_>3 14 16 4 -1. + <_>3 16 16 2 2. + 0 + 0.0434352196753025 + 1 + 0.2242148071527481 + <_> + + + + <_>8 12 4 2 -1. + <_>8 13 4 1 2. + 0 + 9.6736161503940821e-004 + 0.4533343911170960 + 0.6199932098388672 + <_> + + <_> + + + + <_>8 12 3 3 -1. + <_>8 13 3 1 3. + 0 + -3.1452889088541269e-003 + 0.6662756204605103 + 1 + <_> + + + + <_>5 12 6 1 -1. + <_>8 12 3 1 2. + 0 + 1.5233129961416125e-003 + 0.5007988214492798 + 0.2384992986917496 + <_> + + <_> + + + + <_>18 10 2 3 -1. + <_>18 11 2 1 3. + 0 + 2.0854279864579439e-003 + 1 + 0.3753500878810883 + <_> + + + + <_>16 8 4 6 -1. + <_>16 10 4 2 3. + 0 + 0.0360982008278370 + 0.5177171230316162 + 0.1634493023157120 + <_> + + <_> + + + + <_>8 3 2 1 -1. + <_>9 3 1 1 2. + 0 + 1.6179570229724050e-003 + 1 + 0.2587381899356842 + <_> + + + + <_>7 1 3 9 -1. + <_>8 1 1 9 3. + 0 + -6.2132300809025764e-004 + 0.6299533843994141 + 0.4658789932727814 + <_> + + <_> + + + + <_>5 11 11 6 -1. + <_>5 14 11 3 2. + 0 + 7.1878539165481925e-004 + 1 + 0.3354076147079468 + <_> + + + + <_>12 2 3 14 -1. + <_>12 9 3 7 2. + 0 + -0.0393395200371742 + 0.2154128998517990 + 0.5235713720321655 + <_> + + <_> + + + + <_>8 7 3 3 -1. + <_>9 7 1 3 3. + 0 + -1.0988829890266061e-003 + 0.6468896865844727 + 1 + <_> + + + + <_>3 5 12 5 -1. + <_>7 5 4 5 3. + 0 + 2.1191420964896679e-003 + 0.2893089056015015 + 0.5254815816879273 + 22.5852909088134770 + 8 + -1 + <_> + + + <_> + + <_> + + + + <_>1 2 6 3 -1. + <_>4 2 3 3 2. + 0 + 5.2359891124069691e-003 + 0.3299711048603058 + 1 + <_> + + + + <_>5 5 6 10 -1. + <_>5 5 3 5 2. + <_>8 10 3 5 2. + 0 + -2.2169889416545630e-003 + 0.7041593194007874 + 0.3235465884208679 + <_> + + <_> + + + + <_>16 18 2 2 -1. + <_>16 18 1 2 2. + 0 + -8.2303592935204506e-003 + 1 + 0.4961170852184296 + <_> + + + + <_>16 18 2 2 -1. + <_>16 18 1 2 2. + 0 + -8.2303592935204506e-003 + 0.7128043174743652 + 0.4961170852184296 + <_> + + <_> + + + + <_>8 4 2 5 -1. + <_>9 4 1 5 2. + 0 + 4.5343261444941163e-004 + 0.3208472132682800 + 1 + <_> + + + + <_>8 4 1 4 -1. + <_>8 6 1 2 2. + 0 + -4.1777061414904892e-004 + 0.6613916754722595 + 0.3551332950592041 + <_> + + <_> + + + + <_>7 15 12 4 -1. + <_>13 15 6 2 2. + <_>7 17 6 2 2. + 0 + 2.7823769487440586e-003 + 0.3710134923458099 + 1 + <_> + + + + <_>11 18 6 2 -1. + <_>11 19 6 1 2. + 0 + -6.0361868236213923e-005 + 0.5746393799781799 + 0.3894880115985870 + <_> + + <_> + + + + <_>7 7 4 10 -1. + <_>7 12 4 5 2. + 0 + 3.5061789676547050e-003 + 1 + 0.3054102957248688 + <_> + + + + <_>5 6 10 8 -1. + <_>5 10 10 4 2. + 0 + 1.7013119941111654e-004 + 0.2885577976703644 + 0.6487745046615601 + <_> + + <_> + + + + <_>11 1 6 12 -1. + <_>14 1 3 6 2. + <_>11 7 3 6 2. + 0 + -2.3378930054605007e-003 + 1 + 0.3174431025981903 + <_> + + + + <_>5 8 12 1 -1. + <_>9 8 4 1 3. + 0 + -2.1369170863181353e-003 + 0.3820919990539551 + 0.5232893228530884 + <_> + + <_> + + + + <_>4 7 3 6 -1. + <_>4 9 3 2 3. + 0 + 1.0250400518998504e-003 + 0.3622795045375824 + 1 + <_> + + + + <_>4 11 3 4 -1. + <_>4 13 3 2 2. + 0 + -4.4726220949087292e-005 + 0.6538959145545960 + 0.4003680944442749 + <_> + + <_> + + + + <_>14 16 2 2 -1. + <_>14 17 2 1 2. + 0 + 5.7102291611954570e-004 + 1 + 0.3893173038959503 + <_> + + + + <_>15 15 2 2 -1. + <_>15 16 2 1 2. + 0 + 5.7743012439459562e-004 + 0.5614532828330994 + 0.3687644004821777 + <_> + + <_> + + + + <_>7 12 6 2 -1. + <_>7 13 6 1 2. + 0 + 7.9692091094329953e-004 + 1 + 0.6443027853965759 + <_> + + + + <_>8 13 4 2 -1. + <_>8 14 4 1 2. + 0 + 3.5945948911830783e-004 + 0.3380852937698364 + 0.5824648141860962 + <_> + + <_> + + + + <_>11 1 6 12 -1. + <_>14 1 3 6 2. + <_>11 7 3 6 2. + 0 + 4.3973900028504431e-004 + 1 + 0.3938767015933991 + <_> + + + + <_>12 2 4 2 -1. + <_>12 3 4 1 2. + 0 + -8.9061429025605321e-004 + 0.3427971005439758 + 0.5515698790550232 + <_> + + <_> + + + + <_>3 10 12 6 -1. + <_>3 10 6 3 2. + <_>9 13 6 3 2. + 0 + 5.4110242053866386e-003 + 1 + 0.3803538084030151 + <_> + + + + <_>3 1 6 12 -1. + <_>3 1 3 6 2. + <_>6 7 3 6 2. + 0 + -8.5764907998964190e-004 + 0.6439505219459534 + 0.4168345928192139 + <_> + + <_> + + + + <_>16 6 4 14 -1. + <_>18 6 2 7 2. + <_>16 13 2 7 2. + 0 + -0.0220006499439478 + 0.6654601097106934 + 1 + <_> + + + + <_>5 1 10 8 -1. + <_>10 1 5 4 2. + <_>5 5 5 4 2. + 0 + -7.8731682151556015e-003 + 0.4182722866535187 + 0.5604724287986755 + <_> + + <_> + + + + <_>0 6 4 14 -1. + <_>0 6 2 7 2. + <_>2 13 2 7 2. + 0 + -0.0274444594979286 + 0.6586862802505493 + 1 + <_> + + + + <_>1 15 12 4 -1. + <_>1 15 6 2 2. + <_>7 17 6 2 2. + 0 + 1.9792269449681044e-003 + 0.3244912028312683 + 0.4882870018482208 + <_> + + <_> + + + + <_>10 17 3 3 -1. + <_>11 17 1 3 3. + 0 + -5.6783691979944706e-003 + 0.2229079008102417 + 1 + <_> + + + + <_>11 2 2 6 -1. + <_>12 2 1 3 2. + <_>11 5 1 3 2. + 0 + 1.5057219570735469e-005 + 0.4107285141944885 + 0.5747591257095337 + <_> + + <_> + + + + <_>7 17 3 3 -1. + <_>8 17 1 3 3. + 0 + -5.4136710241436958e-003 + 0.2065797001123428 + 1 + <_> + + + + <_>8 15 4 3 -1. + <_>8 16 4 1 3. + 0 + 5.3679239936172962e-003 + 0.4926423132419586 + 0.7139484882354736 + <_> + + <_> + + + + <_>10 15 4 2 -1. + <_>12 15 2 1 2. + <_>10 16 2 1 2. + 0 + -3.1426660716533661e-003 + 0.6780086755752564 + 1 + <_> + + + + <_>13 13 4 3 -1. + <_>13 14 4 1 3. + 0 + 0.0109073901548982 + 0.5214930176734924 + 0.1143995970487595 + <_> + + <_> + + + + <_>3 13 4 3 -1. + <_>3 14 4 1 3. + 0 + 5.8436761610209942e-003 + 1 + 0.1937526017427445 + <_> + + + + <_>7 2 2 6 -1. + <_>7 2 1 3 2. + <_>8 5 1 3 2. + 0 + 9.0507230197545141e-005 + 0.3812577128410339 + 0.5514187812805176 + <_> + + <_> + + + + <_>2 1 16 3 -1. + <_>2 2 16 1 3. + 0 + -0.0163457896560431 + 0.2474023997783661 + 1 + <_> + + + + <_>10 15 4 2 -1. + <_>12 15 2 1 2. + <_>10 16 2 1 2. + 0 + 1.5987500082701445e-003 + 0.4817782938480377 + 0.5923079848289490 + <_> + + <_> + + + + <_>6 15 4 2 -1. + <_>6 15 2 1 2. + <_>8 16 2 1 2. + 0 + -4.0257978253066540e-003 + 0.7508208751678467 + 1 + <_> + + + + <_>3 0 13 3 -1. + <_>3 1 13 1 3. + 0 + -6.7750471644103527e-003 + 0.2879810929298401 + 0.5199695229530335 + <_> + + <_> + + + + <_>0 9 20 3 -1. + <_>0 10 20 1 3. + 0 + -3.2470689620822668e-003 + 0.3044910132884979 + 1 + <_> + + + + <_>6 7 9 2 -1. + <_>6 8 9 1 2. + 0 + 1.5409620245918632e-003 + 0.4063482880592346 + 0.5676562786102295 + <_> + + <_> + + + + <_>8 14 3 6 -1. + <_>9 14 1 6 3. + 0 + -0.0128581197932363 + 0.0967175588011742 + 1 + <_> + + + + <_>9 10 2 2 -1. + <_>9 11 2 1 2. + 0 + -1.4824670506641269e-004 + 0.4537833034992218 + 0.6115375161170960 + <_> + + <_> + + + + <_>9 7 2 5 -1. + <_>9 7 1 5 2. + 0 + -9.0210810303688049e-003 + 1 + 0.4807750880718231 + <_> + + + + <_>5 6 10 3 -1. + <_>5 6 5 3 2. + 0 + -0.0287950299680233 + 0.3403795063495636 + 0.5255529284477234 + <_> + + <_> + + + + <_>9 7 2 5 -1. + <_>10 7 1 5 2. + 0 + 9.0210810303688049e-003 + 1 + 0.7505835890769959 + <_> + + + + <_>5 6 10 3 -1. + <_>10 6 5 3 2. + 0 + 7.4121179059147835e-003 + 0.5455446839332581 + 0.3226068913936615 + <_> + + <_> + + + + <_>13 9 2 2 -1. + <_>13 9 1 2 2. + 0 + -3.7217529024928808e-003 + 0.2311848998069763 + 1 + <_> + + + + <_>4 3 12 11 -1. + <_>8 3 4 11 3. + 0 + 0.1986588984727860 + 0.5271047949790955 + 0.1469929963350296 + <_> + + <_> + + + + <_>7 1 2 7 -1. + <_>8 1 1 7 2. + 0 + 1.5208719560177997e-005 + 0.3678138852119446 + 1 + <_> + + + + <_>7 4 3 8 -1. + <_>8 4 1 8 3. + 0 + -3.9089918136596680e-003 + 0.7131929993629456 + 0.4993866980075836 + <_> + + <_> + + + + <_>13 9 2 2 -1. + <_>13 9 1 2 2. + 0 + 2.5106288958340883e-003 + 0.5312054157257080 + 1 + <_> + + + + <_>11 6 2 2 -1. + <_>12 6 1 1 2. + <_>11 7 1 1 2. + 0 + 2.3921660613268614e-004 + 0.4689378142356873 + 0.5714021921157837 + <_> + + <_> + + + + <_>5 4 2 3 -1. + <_>5 5 2 1 3. + 0 + 6.9443131797015667e-003 + 1 + 0.6948797702789307 + <_> + + + + <_>6 5 1 3 -1. + <_>6 6 1 1 3. + 0 + 1.2065629707649350e-003 + 0.4004504978656769 + 0.5874881744384766 + <_> + + <_> + + + + <_>13 9 2 2 -1. + <_>13 9 1 2 2. + 0 + 2.5106288958340883e-003 + 0.5329571962356567 + 1 + <_> + + + + <_>16 14 3 3 -1. + <_>16 15 3 1 3. + 0 + 1.7514040227979422e-003 + 0.5545849204063416 + 0.3449581861495972 + <_> + + <_> + + + + <_>5 9 2 2 -1. + <_>6 9 1 2 2. + 0 + -4.1978210210800171e-003 + 0.1217183023691177 + 1 + <_> + + + + <_>1 14 3 3 -1. + <_>1 15 3 1 3. + 0 + 1.3092850567772985e-003 + 0.5375049710273743 + 0.3415625095367432 + <_> + + <_> + + + + <_>13 1 1 6 -1. + <_>13 3 1 2 3. + 0 + 6.7396182566881180e-004 + 0.4195179045200348 + 1 + <_> + + + + <_>13 3 7 2 -1. + <_>13 4 7 1 2. + 0 + -0.0105307102203369 + 0.3460753858089447 + 0.5155860185623169 + <_> + + <_> + + + + <_>0 6 20 14 -1. + <_>0 13 20 7 2. + 0 + -0.4067229926586151 + 0.0580656789243221 + 1 + <_> + + + + <_>0 4 3 6 -1. + <_>0 6 3 2 3. + 0 + -0.0263145491480827 + 0.1473449021577835 + 0.5559378266334534 + <_> + + <_> + + + + <_>10 1 9 6 -1. + <_>10 3 9 2 3. + 0 + 2.2557149641215801e-003 + 1 + 0.5477715134620667 + <_> + + + + <_>8 0 12 5 -1. + <_>8 0 6 5 2. + 0 + 0.0121548604220152 + 0.4207791090011597 + 0.5621880888938904 + <_> + + <_> + + + + <_>0 0 18 5 -1. + <_>6 0 6 5 3. + 0 + -0.0184365399181843 + 0.6447147130966187 + 1 + <_> + + + + <_>1 1 9 6 -1. + <_>1 3 9 2 3. + 0 + 5.3676147945225239e-004 + 0.2765127122402191 + 0.4888595938682556 + <_> + + <_> + + + + <_>15 15 2 2 -1. + <_>15 16 2 1 2. + 0 + -2.6265541091561317e-003 + 1 + 0.5264691114425659 + <_> + + + + <_>13 16 3 4 -1. + <_>13 18 3 2 2. + 0 + -5.1119807176291943e-004 + 0.5785310268402100 + 0.4291102886199951 + <_> + + <_> + + + + <_>3 15 2 2 -1. + <_>3 16 2 1 2. + 0 + 4.1454841266386211e-004 + 1 + 0.3455410897731781 + <_> + + + + <_>4 16 3 4 -1. + <_>4 18 3 2 2. + 0 + -5.5028748465701938e-004 + 0.6026918888092041 + 0.4143893122673035 + <_> + + <_> + + + + <_>11 14 1 3 -1. + <_>11 15 1 1 3. + 0 + -1.0347720235586166e-003 + 0.6095293760299683 + 1 + <_> + + + + <_>9 13 5 3 -1. + <_>9 14 5 1 3. + 0 + -3.3966631162911654e-003 + 0.6108282208442688 + 0.4707720875740051 + <_> + + <_> + + + + <_>0 0 3 6 -1. + <_>0 2 3 2 3. + 0 + 3.1795909162610769e-003 + 1 + 0.3244366943836212 + <_> + + + + <_>4 1 6 3 -1. + <_>6 1 2 3 3. + 0 + -1.6528950072824955e-004 + 0.3830757141113281 + 0.5734326243400574 + <_> + + <_> + + + + <_>9 13 4 3 -1. + <_>9 14 4 1 3. + 0 + 8.3725210279226303e-003 + 1 + 0.6610919237136841 + <_> + + + + <_>8 15 5 3 -1. + <_>8 16 5 1 3. + 0 + -2.5799809955060482e-003 + 0.6139307022094727 + 0.4686149954795837 + <_> + + <_> + + + + <_>8 3 3 2 -1. + <_>9 3 1 2 3. + 0 + 9.0194388758391142e-004 + 1 + 0.3520022034645081 + <_> + + + + <_>1 8 18 2 -1. + <_>1 9 18 1 2. + 0 + 3.6952210939489305e-004 + 0.2578754127025604 + 0.5467242002487183 + <_> + + <_> + + + + <_>11 14 1 3 -1. + <_>11 15 1 1 3. + 0 + 9.9746137857437134e-004 + 0.4820146858692169 + 1 + <_> + + + + <_>8 13 6 3 -1. + <_>8 14 6 1 3. + 0 + -3.6688039544969797e-003 + 0.5710150003433228 + 0.4831911027431488 + <_> + + <_> + + + + <_>8 14 1 3 -1. + <_>8 15 1 1 3. + 0 + -8.9501030743122101e-004 + 0.6133679151535034 + 1 + <_> + + + + <_>4 13 12 4 -1. + <_>4 13 6 2 2. + <_>10 15 6 2 2. + 0 + 5.1904921419918537e-003 + 0.4928582906723023 + 0.2581309080123901 + <_> + + <_> + + + + <_>10 7 2 2 -1. + <_>10 7 1 2 2. + 0 + 4.2274440056644380e-004 + 0.4471124112606049 + 1 + <_> + + + + <_>13 4 2 8 -1. + <_>14 4 1 4 2. + <_>13 8 1 4 2. + 0 + 8.5176713764667511e-003 + 0.5161024928092957 + 0.3316533863544464 + <_> + + <_> + + + + <_>0 5 4 6 -1. + <_>0 7 4 2 3. + 0 + -0.0366236083209515 + 0.0926062166690826 + 1 + <_> + + + + <_>8 7 2 2 -1. + <_>9 7 1 2 2. + 0 + -4.1103712283074856e-003 + 0.8522114753723145 + 0.5137907862663269 + <_> + + <_> + + + + <_>13 0 3 7 -1. + <_>14 0 1 7 3. + 0 + -6.6017331555485725e-003 + 1 + 0.5459060072898865 + <_> + + + + <_>11 2 2 14 -1. + <_>11 2 1 14 2. + 0 + 0.0255786404013634 + 0.5219352841377258 + 0.1927185952663422 + <_> + + <_> + + + + <_>4 0 3 7 -1. + <_>5 0 1 7 3. + 0 + 0.0114474399015307 + 1 + 0.1916002035140991 + <_> + + + + <_>5 5 8 12 -1. + <_>5 5 4 6 2. + <_>9 11 4 6 2. + 0 + 7.2427501436322927e-004 + 0.5231571197509766 + 0.3535340130329132 + <_> + + <_> + + + + <_>11 4 6 3 -1. + <_>11 5 6 1 3. + 0 + 9.7127500921487808e-003 + 1 + 0.6464101076126099 + <_> + + + + <_>12 3 4 3 -1. + <_>12 4 4 1 3. + 0 + -0.0113375699147582 + 0.7383037805557251 + 0.4964743852615356 + <_> + + <_> + + + + <_>5 5 10 12 -1. + <_>5 5 5 6 2. + <_>10 11 5 6 2. + 0 + -8.1453882157802582e-003 + 0.3611705899238586 + 1 + <_> + + + + <_>3 6 12 3 -1. + <_>9 6 6 3 2. + 0 + -8.5570756345987320e-003 + 0.3421907126903534 + 0.5943511724472046 + <_> + + <_> + + + + <_>9 6 2 7 -1. + <_>9 6 1 7 2. + 0 + 2.2993308957666159e-003 + 0.4550104141235352 + 1 + <_> + + + + <_>9 5 2 4 -1. + <_>9 5 1 4 2. + 0 + 3.8430930580943823e-003 + 0.4716862142086029 + 0.6656190752983093 + <_> + + <_> + + + + <_>8 7 3 3 -1. + <_>9 7 1 3 3. + 0 + -9.9116540513932705e-004 + 1 + 0.4592716991901398 + <_> + + + + <_>5 1 6 4 -1. + <_>7 1 2 4 3. + 0 + 0.0254964698106050 + 0.6563401222229004 + 0.1258835047483444 + <_> + + <_> + + + + <_>13 16 7 3 -1. + <_>13 17 7 1 3. + 0 + -0.0157483592629433 + 1 + 0.5239502191543579 + <_> + + + + <_>12 4 3 3 -1. + <_>12 5 3 1 3. + 0 + -0.0180461201816797 + 0.8015851974487305 + 0.5007957816123962 + <_> + + <_> + + + + <_>0 16 7 3 -1. + <_>0 17 7 1 3. + 0 + 0.0103233903646469 + 1 + 0.2274820059537888 + <_> + + + + <_>5 4 3 3 -1. + <_>5 5 3 1 3. + 0 + 1.6452240524813533e-003 + 0.4351946115493774 + 0.5867627859115601 + <_> + + <_> + + + + <_>12 9 8 10 -1. + <_>12 9 4 10 2. + 0 + 0.0158811490982771 + 0.4465051889419556 + 1 + <_> + + + + <_>8 10 12 5 -1. + <_>12 10 4 5 3. + 0 + 0.0105865197256207 + 0.4544458091259003 + 0.5707110762596130 + <_> + + <_> + + + + <_>0 9 8 10 -1. + <_>4 9 4 10 2. + 0 + -0.0215316899120808 + 0.6527643799781799 + 1 + <_> + + + + <_>0 10 12 5 -1. + <_>4 10 4 5 3. + 0 + 5.2480469457805157e-003 + 0.3444727957248688 + 0.5324636101722717 + 25.6093006134033200 + 9 + -1 + <_> + + + <_> + + <_> + + + + <_>2 3 6 2 -1. + <_>5 3 3 2 2. + 0 + 1.8219340126961470e-003 + 0.3108788132667542 + 1 + <_> + + + + <_>0 0 17 9 -1. + <_>0 3 17 3 3. + 0 + 8.1313941627740860e-003 + 0.3133237063884735 + 0.6645867228507996 + <_> + + <_> + + + + <_>4 7 12 2 -1. + <_>8 7 4 2 3. + 0 + 1.7055979697033763e-003 + 0.2640131115913391 + 1 + <_> + + + + <_>10 4 6 4 -1. + <_>12 4 2 4 3. + 0 + -7.4483548814896494e-005 + 0.5647205114364624 + 0.3485372960567474 + <_> + + <_> + + + + <_>0 10 20 4 -1. + <_>0 12 20 2 2. + 0 + 3.8342390325851738e-004 + 1 + 0.3140654861927033 + <_> + + + + <_>4 3 6 5 -1. + <_>6 3 2 5 3. + 0 + 3.1868910882622004e-003 + 0.6489198803901672 + 0.3887729048728943 + <_> + + <_> + + + + <_>1 1 18 4 -1. + <_>7 1 6 4 3. + 0 + 0.1604432016611099 + 1 + 0.7216529846191406 + <_> + + + + <_>13 9 2 3 -1. + <_>13 9 1 3 2. + 0 + -6.7285560071468353e-003 + 0.1653137952089310 + 0.5139825940132141 + <_> + + <_> + + + + <_>6 15 7 4 -1. + <_>6 17 7 2 2. + 0 + 7.2638481469766703e-006 + 0.3140619993209839 + 1 + <_> + + + + <_>3 17 4 2 -1. + <_>3 18 4 1 2. + 0 + 5.5551197146996856e-004 + 0.5993698835372925 + 0.3317398130893707 + <_> + + <_> + + + + <_>9 4 8 10 -1. + <_>9 9 8 5 2. + 0 + -0.0108223203569651 + 0.2652938067913055 + 1 + <_> + + + + <_>9 17 3 2 -1. + <_>10 17 1 2 3. + 0 + -4.5834020711481571e-003 + 0.1849568933248520 + 0.5313957929611206 + <_> + + <_> + + + + <_>8 2 4 8 -1. + <_>8 6 4 4 2. + 0 + -3.0205070506781340e-003 + 1 + 0.4040099978446960 + <_> + + + + <_>3 4 14 12 -1. + <_>3 4 7 6 2. + <_>10 10 7 6 2. + 0 + 0.0778646171092987 + 0.6158189773559570 + 0.1786486953496933 + <_> + + <_> + + + + <_>7 7 6 4 -1. + <_>9 7 2 4 3. + 0 + 0.0264943800866604 + 0.4511089920997620 + 1 + <_> + + + + <_>6 7 9 4 -1. + <_>6 9 9 2 2. + 0 + 0.0369121097028255 + 0.4528219997882843 + 0.5972282886505127 + <_> + + <_> + + + + <_>2 10 3 3 -1. + <_>2 11 3 1 3. + 0 + 5.7857790961861610e-003 + 1 + 0.2533892095088959 + <_> + + + + <_>4 6 2 9 -1. + <_>4 9 2 3 3. + 0 + 9.3849771656095982e-004 + 0.3410412073135376 + 0.5923643708229065 + <_> + + <_> + + + + <_>9 11 3 3 -1. + <_>9 12 3 1 3. + 0 + -0.0110031999647617 + 0.6958044171333313 + 1 + <_> + + + + <_>3 1 15 2 -1. + <_>3 2 15 1 2. + 0 + -1.1737640015780926e-003 + 0.3851084113121033 + 0.5408189296722412 + <_> + + <_> + + + + <_>9 8 2 3 -1. + <_>9 9 2 1 3. + 0 + -3.6596669815480709e-003 + 0.2009308934211731 + 1 + <_> + + + + <_>9 6 2 5 -1. + <_>10 6 1 5 2. + 0 + -2.4822750128805637e-003 + 0.6295393109321594 + 0.4395040869712830 + <_> + + <_> + + + + <_>9 7 2 3 -1. + <_>9 8 2 1 3. + 0 + -4.4606071896851063e-003 + 0.2405299991369247 + 1 + <_> + + + + <_>4 10 12 10 -1. + <_>4 15 12 5 2. + 0 + -3.5969649907201529e-003 + 0.5450174212455750 + 0.3782357871532440 + <_> + + <_> + + + + <_>0 10 4 2 -1. + <_>0 11 4 1 2. + 0 + -3.6222559865564108e-003 + 0.3033896982669830 + 1 + <_> + + + + <_>5 15 9 2 -1. + <_>5 16 9 1 2. + 0 + 1.2059339787811041e-003 + 0.4633778929710388 + 0.6335952281951904 + <_> + + <_> + + + + <_>8 14 6 3 -1. + <_>8 15 6 1 3. + 0 + 4.3124938383698463e-003 + 1 + 0.6598826050758362 + <_> + + + + <_>8 16 4 3 -1. + <_>8 17 4 1 3. + 0 + -4.4961250387132168e-003 + 0.6621696949005127 + 0.4755246937274933 + <_> + + <_> + + + + <_>8 9 4 2 -1. + <_>8 10 4 1 2. + 0 + -1.3860689941793680e-003 + 0.2801201045513153 + 1 + <_> + + + + <_>3 3 14 2 -1. + <_>3 4 14 1 2. + 0 + -5.1588460337370634e-004 + 0.3829489052295685 + 0.5623626708984375 + <_> + + <_> + + + + <_>11 12 1 2 -1. + <_>11 13 1 1 2. + 0 + 7.0330002927221358e-005 + 0.4536342918872833 + 1 + <_> + + + + <_>4 12 12 1 -1. + <_>8 12 4 1 3. + 0 + -2.0976549421902746e-004 + 0.5608139038085938 + 0.4265779852867127 + <_> + + <_> + + + + <_>0 2 1 2 -1. + <_>0 3 1 1 2. + 0 + 1.3642259873449802e-003 + 1 + 0.2637091875076294 + <_> + + + + <_>7 4 4 6 -1. + <_>9 4 2 6 2. + 0 + 1.5483660390600562e-003 + 0.4170750975608826 + 0.5932987928390503 + <_> + + <_> + + + + <_>0 2 20 14 -1. + <_>10 2 10 7 2. + <_>0 9 10 7 2. + 0 + 0.1917960941791534 + 0.5256764292716980 + 1 + <_> + + + + <_>14 6 1 3 -1. + <_>14 7 1 1 3. + 0 + -4.4776909053325653e-003 + 0.6632621884346008 + 0.4892588853836060 + <_> + + <_> + + + + <_>0 4 20 12 -1. + <_>0 4 10 6 2. + <_>10 10 10 6 2. + 0 + -0.1264917999505997 + 0.1499778926372528 + 1 + <_> + + + + <_>8 12 1 2 -1. + <_>8 13 1 1 2. + 0 + 6.5253327193204314e-005 + 0.4233320057392120 + 0.5756040215492249 + <_> + + <_> + + + + <_>9 18 3 2 -1. + <_>10 18 1 2 3. + 0 + 4.1856421157717705e-003 + 0.5288826823234558 + 1 + <_> + + + + <_>9 17 6 2 -1. + <_>11 17 2 2 3. + 0 + 2.7478230185806751e-004 + 0.4524017870426178 + 0.5604125261306763 + <_> + + <_> + + + + <_>5 6 2 3 -1. + <_>5 7 2 1 3. + 0 + -2.2906810045242310e-003 + 0.5578274130821228 + 1 + <_> + + + + <_>5 4 3 3 -1. + <_>5 5 3 1 3. + 0 + 1.6744500026106834e-003 + 0.3323057889938355 + 0.5558788180351257 + <_> + + <_> + + + + <_>14 15 3 2 -1. + <_>14 16 3 1 2. + 0 + 1.2349759927019477e-003 + 1 + 0.3653947114944458 + <_> + + + + <_>11 3 3 4 -1. + <_>12 3 1 4 3. + 0 + -8.7158754467964172e-003 + 0.1924533993005753 + 0.5313649773597717 + <_> + + <_> + + + + <_>3 15 3 2 -1. + <_>3 16 3 1 2. + 0 + 4.6613621525466442e-003 + 1 + 0.2027730941772461 + <_> + + + + <_>9 12 2 3 -1. + <_>9 13 2 1 3. + 0 + -8.5815992206335068e-003 + 0.7636060118675232 + 0.5140826106071472 + <_> + + <_> + + + + <_>9 13 3 7 -1. + <_>10 13 1 7 3. + 0 + 0.0143521204590797 + 0.5252975821495056 + 1 + <_> + + + + <_>12 12 5 3 -1. + <_>12 13 5 1 3. + 0 + -7.7948719263076782e-003 + 0.2632937133312225 + 0.5328689217567444 + <_> + + <_> + + + + <_>8 18 3 2 -1. + <_>9 18 1 2 3. + 0 + -3.4155680332332850e-003 + 0.2416087985038757 + 1 + <_> + + + + <_>4 7 12 4 -1. + <_>4 7 6 2 2. + <_>10 9 6 2 2. + 0 + -4.2639090679585934e-003 + 0.3936544954776764 + 0.5478742122650147 + <_> + + <_> + + + + <_>6 19 14 1 -1. + <_>6 19 7 1 2. + 0 + 8.7177697569131851e-003 + 0.4788199067115784 + 1 + <_> + + + + <_>16 14 3 2 -1. + <_>16 15 3 1 2. + 0 + -3.2232629600912333e-003 + 0.3631612062454224 + 0.5288316011428833 + <_> + + <_> + + + + <_>1 0 6 10 -1. + <_>1 0 3 5 2. + <_>4 5 3 5 2. + 0 + -0.0421883687376976 + 0.6931139230728149 + 1 + <_> + + + + <_>1 0 4 10 -1. + <_>1 0 2 5 2. + <_>3 5 2 5 2. + 0 + 0.0198757499456406 + 0.4520100057125092 + 0.6855055093765259 + <_> + + <_> + + + + <_>15 3 5 6 -1. + <_>15 5 5 2 3. + 0 + -0.0311345104128122 + 1 + 0.5300424098968506 + <_> + + + + <_>9 5 2 15 -1. + <_>9 10 2 5 3. + 0 + 5.7032387703657150e-003 + 0.5606892108917236 + 0.4230622947216034 + <_> + + <_> + + + + <_>0 3 5 6 -1. + <_>0 5 5 2 3. + 0 + 5.2733682096004486e-003 + 1 + 0.3247228860855103 + <_> + + + + <_>6 0 3 2 -1. + <_>7 0 1 2 3. + 0 + -3.1231069006025791e-003 + 0.1985695958137512 + 0.5349872708320618 + <_> + + <_> + + + + <_>12 8 8 2 -1. + <_>16 8 4 1 2. + <_>12 9 4 1 2. + 0 + 4.6453849063254893e-004 + 0.4207508862018585 + 1 + <_> + + + + <_>5 8 12 1 -1. + <_>9 8 4 1 3. + 0 + 0.0303558893501759 + 0.5153458714485169 + 0.3118101060390472 + <_> + + <_> + + + + <_>3 13 3 3 -1. + <_>3 14 3 1 3. + 0 + -4.2992769740521908e-003 + 0.3274506926536560 + 1 + <_> + + + + <_>5 13 3 2 -1. + <_>5 14 3 1 2. + 0 + 1.9509199773892760e-004 + 0.5953078269958496 + 0.4225521087646484 + <_> + + <_> + + + + <_>9 15 3 3 -1. + <_>9 16 3 1 3. + 0 + -7.7784480527043343e-003 + 0.7211179733276367 + 1 + <_> + + + + <_>7 15 7 3 -1. + <_>7 16 7 1 3. + 0 + 0.0169175993651152 + 0.4936591982841492 + 0.7030277252197266 + <_> + + <_> + + + + <_>3 14 11 6 -1. + <_>3 16 11 2 3. + 0 + -0.0519485697150230 + 0.1425534933805466 + 1 + <_> + + + + <_>0 19 14 1 -1. + <_>7 19 7 1 2. + 0 + -5.4751220159232616e-003 + 0.6059331893920898 + 0.4393995106220245 + <_> + + <_> + + + + <_>9 17 6 2 -1. + <_>11 17 2 2 3. + 0 + 1.5210839592327829e-005 + 0.4488849937915802 + 1 + <_> + + + + <_>12 11 6 2 -1. + <_>14 11 2 2 3. + 0 + 1.0235579684376717e-003 + 0.4256550073623657 + 0.5795438289642334 + <_> + + <_> + + + + <_>5 17 6 2 -1. + <_>7 17 2 2 3. + 0 + -1.0427719826111570e-004 + 0.4246039986610413 + 1 + <_> + + + + <_>0 1 9 10 -1. + <_>3 1 3 10 3. + 0 + 8.7853781878948212e-003 + 0.4958009123802185 + 0.6759430766105652 + <_> + + <_> + + + + <_>10 1 3 3 -1. + <_>11 1 1 3 3. + 0 + 3.4012699034065008e-003 + 0.5423480868339539 + 1 + <_> + + + + <_>9 5 6 4 -1. + <_>9 5 3 4 2. + 0 + 5.8582378551363945e-004 + 0.3636542856693268 + 0.5464348793029785 + <_> + + <_> + + + + <_>7 1 3 3 -1. + <_>8 1 1 3 3. + 0 + -2.2973360028117895e-003 + 0.2548818886280060 + 1 + <_> + + + + <_>0 4 4 11 -1. + <_>2 4 2 11 2. + 0 + -0.0143301896750927 + 0.6587656736373901 + 0.4532802104949951 + <_> + + <_> + + + + <_>9 5 6 4 -1. + <_>9 5 3 4 2. + 0 + 9.8565965890884399e-004 + 0.3822771012783051 + 1 + <_> + + + + <_>6 0 8 10 -1. + <_>10 0 4 5 2. + <_>6 5 4 5 2. + 0 + -0.0466407611966133 + 0.3077321946620941 + 0.5244132876396179 + <_> + + <_> + + + + <_>6 6 5 14 -1. + <_>6 13 5 7 2. + 0 + -0.1190730035305023 + 0.1033862978219986 + 1 + <_> + + + + <_>8 5 4 14 -1. + <_>8 12 4 7 2. + 0 + 0.0193332806229591 + 0.5554745197296143 + 0.3221316933631897 + <_> + + <_> + + + + <_>7 7 6 5 -1. + <_>9 7 2 5 3. + 0 + 0.0314278490841389 + 0.4682379066944122 + 1 + <_> + + + + <_>9 3 3 9 -1. + <_>9 6 3 3 3. + 0 + 2.0082130504306406e-004 + 0.5373070240020752 + 0.3800666928291321 + <_> + + <_> + + + + <_>8 1 3 3 -1. + <_>9 1 1 3 3. + 0 + -6.2584900297224522e-003 + 0.1799207031726837 + 1 + <_> + + + + <_>9 6 2 4 -1. + <_>10 6 1 4 2. + 0 + 8.2861045375466347e-003 + 0.5095068812370300 + 0.7544605135917664 + <_> + + <_> + + + + <_>10 8 6 9 -1. + <_>10 8 3 9 2. + 0 + 2.0529709290713072e-003 + 0.5628644824028015 + 1 + <_> + + + + <_>16 4 3 8 -1. + <_>17 4 1 8 3. + 0 + 3.2524869311600924e-003 + 0.4801689088344574 + 0.5802102088928223 + <_> + + <_> + + + + <_>5 9 10 6 -1. + <_>5 9 5 3 2. + <_>10 12 5 3 2. + 0 + -0.0318849012255669 + 0.1742745041847229 + 1 + <_> + + + + <_>5 5 6 4 -1. + <_>8 5 3 4 2. + 0 + 1.8379340181127191e-003 + 0.3466596901416779 + 0.5107154846191406 + <_> + + <_> + + + + <_>9 8 4 2 -1. + <_>9 9 4 1 2. + 0 + -4.8512680223211646e-004 + 1 + 0.5326086282730103 + <_> + + + + <_>11 7 2 2 -1. + <_>11 7 1 2 2. + 0 + -2.5407879147678614e-003 + 0.6342775225639343 + 0.4992693066596985 + <_> + + <_> + + + + <_>8 12 4 8 -1. + <_>8 12 2 4 2. + <_>10 16 2 4 2. + 0 + -5.1559060811996460e-003 + 0.3433429002761841 + 1 + <_> + + + + <_>0 1 4 9 -1. + <_>0 4 4 3 3. + 0 + -0.0449687503278255 + 0.1868136972188950 + 0.5215464830398560 + <_> + + <_> + + + + <_>9 10 3 3 -1. + <_>9 11 3 1 3. + 0 + 5.8984281495213509e-003 + 1 + 0.6229305267333984 + <_> + + + + <_>8 11 4 2 -1. + <_>8 12 4 1 2. + 0 + 3.2763120252639055e-003 + 0.4935772120952606 + 0.7217944860458374 + <_> + + <_> + + + + <_>7 8 4 2 -1. + <_>7 9 4 1 2. + 0 + -1.0161520185647532e-004 + 1 + 0.5007976293563843 + <_> + + + + <_>7 8 6 1 -1. + <_>9 8 2 1 3. + 0 + -1.6290300118271261e-004 + 0.6024149060249329 + 0.2329508066177368 + <_> + + <_> + + + + <_>16 0 4 9 -1. + <_>16 0 2 9 2. + 0 + 9.0541364625096321e-003 + 0.4510416984558106 + 1 + <_> + + + + <_>16 0 3 6 -1. + <_>16 3 3 3 2. + 0 + 0.0353984907269478 + 0.5141996741294861 + 0.2860291898250580 + <_> + + <_> + + + + <_>0 0 4 9 -1. + <_>2 0 2 9 2. + 0 + 5.6469351984560490e-003 + 0.4704925119876862 + 1 + <_> + + + + <_>1 0 3 6 -1. + <_>1 3 3 3 2. + 0 + -2.4807190056890249e-003 + 0.4179851114749908 + 0.6726647019386292 + <_> + + <_> + + + + <_>9 7 6 9 -1. + <_>11 7 2 9 3. + 0 + -4.1088787838816643e-003 + 0.5809801816940308 + 1 + <_> + + + + <_>10 6 3 6 -1. + <_>11 6 1 6 3. + 0 + -2.0714469719678164e-003 + 0.6074783802032471 + 0.4524059891700745 + <_> + + <_> + + + + <_>1 2 18 2 -1. + <_>1 2 9 1 2. + <_>10 3 9 1 2. + 0 + -2.8939060866832733e-003 + 0.3383519947528839 + 1 + <_> + + + + <_>5 8 6 8 -1. + <_>7 8 2 8 3. + 0 + 1.3467279495671391e-003 + 0.5696910023689270 + 0.3970845043659210 + <_> + + <_> + + + + <_>9 0 6 16 -1. + <_>11 0 2 16 3. + 0 + -0.0907791331410408 + 0.1502701938152313 + 1 + <_> + + + + <_>14 1 6 18 -1. + <_>17 1 3 9 2. + <_>14 10 3 9 2. + 0 + -0.0831717625260353 + 0.7573670744895935 + 0.4936437010765076 + <_> + + <_> + + + + <_>2 9 2 3 -1. + <_>2 10 2 1 3. + 0 + -1.4107000315561891e-003 + 0.3390932977199554 + 1 + <_> + + + + <_>0 1 6 18 -1. + <_>0 1 3 9 2. + <_>3 10 3 9 2. + 0 + 0.0556687600910664 + 0.5025097131729126 + 0.7422083020210266 + <_> + + <_> + + + + <_>11 8 4 12 -1. + <_>11 8 2 12 2. + 0 + 0.0577015392482281 + 0.5197371840476990 + 1 + <_> + + + + <_>2 1 18 18 -1. + <_>2 10 18 9 2. + 0 + -0.4250329136848450 + 0.0973469167947769 + 0.5185739994049072 + <_> + + <_> + + + + <_>6 3 3 1 -1. + <_>7 3 1 1 3. + 0 + -4.4380719191394746e-004 + 0.3649350106716156 + 1 + <_> + + + + <_>4 12 2 2 -1. + <_>4 13 2 1 2. + 0 + 1.7924769781529903e-004 + 0.5619279146194458 + 0.3760297000408173 + <_> + + <_> + + + + <_>8 13 5 3 -1. + <_>8 14 5 1 3. + 0 + 5.0382469780743122e-003 + 1 + 0.6328445076942444 + <_> + + + + <_>8 14 4 3 -1. + <_>8 15 4 1 3. + 0 + 0.0151911703869700 + 0.4936082065105438 + 0.7426524758338928 + <_> + + <_> + + + + <_>3 12 5 3 -1. + <_>3 13 5 1 3. + 0 + -0.0123003898188472 + 0.1389349997043610 + 1 + <_> + + + + <_>6 3 3 4 -1. + <_>7 3 1 4 3. + 0 + 1.5168030513450503e-003 + 0.5091962218284607 + 0.3482648134231567 + <_> + + <_> + + + + <_>11 10 2 2 -1. + <_>12 10 1 1 2. + <_>11 11 1 1 2. + 0 + 9.5754547510296106e-004 + 1 + 0.6036316752433777 + <_> + + + + <_>5 8 12 1 -1. + <_>9 8 4 1 3. + 0 + -0.0189622007310390 + 0.2319173067808151 + 0.5116652846336365 + <_> + + <_> + + + + <_>8 4 4 8 -1. + <_>10 4 2 8 2. + 0 + -0.0222722608596087 + 0.6555022001266480 + 1 + <_> + + + + <_>6 6 8 5 -1. + <_>10 6 4 5 2. + 0 + -0.0251452308148146 + 0.1326071023941040 + 0.4674034118652344 + <_> + + <_> + + + + <_>10 4 6 4 -1. + <_>12 4 2 4 3. + 0 + 0.0195339005440474 + 0.5182027220726013 + 1 + <_> + + + + <_>12 7 2 2 -1. + <_>13 7 1 1 2. + <_>12 8 1 1 2. + 0 + -1.1231349781155586e-003 + 0.6318243145942688 + 0.4825519025325775 + <_> + + <_> + + + + <_>3 5 10 8 -1. + <_>3 9 10 4 2. + 0 + -1.4861139934509993e-003 + 0.2918671071529388 + 1 + <_> + + + + <_>7 1 2 12 -1. + <_>7 7 2 6 2. + 0 + 3.5002888762392104e-004 + 0.5621371269226074 + 0.4249213039875031 + <_> + + <_> + + + + <_>12 7 2 2 -1. + <_>13 7 1 1 2. + <_>12 8 1 1 2. + 0 + -1.1231349781155586e-003 + 1 + 0.4813745021820068 + <_> + + + + <_>11 13 1 6 -1. + <_>11 16 1 3 2. + 0 + 0.0104097397997975 + 0.5184006094932556 + 0.2051223069429398 + <_> + + <_> + + + + <_>5 1 6 15 -1. + <_>7 1 2 15 3. + 0 + -0.0878325626254082 + 0.1179921999573708 + 1 + <_> + + + + <_>6 7 2 2 -1. + <_>6 7 1 1 2. + <_>7 8 1 1 2. + 0 + 1.6584879485890269e-003 + 0.4987811148166657 + 0.6973755955696106 + <_> + + <_> + + + + <_>17 5 2 2 -1. + <_>17 6 2 1 2. + 0 + -2.3008750285953283e-003 + 1 + 0.5339831113815308 + <_> + + + + <_>10 3 4 10 -1. + <_>12 3 2 5 2. + <_>10 8 2 5 2. + 0 + 0.0330261699855328 + 0.5033289194107056 + 0.6851906776428223 + <_> + + <_> + + + + <_>1 5 2 2 -1. + <_>1 6 2 1 2. + 0 + -1.3585069682449102e-003 + 0.3002822101116180 + 1 + <_> + + + + <_>7 10 2 2 -1. + <_>7 10 1 1 2. + <_>8 11 1 1 2. + 0 + 7.8067491995170712e-004 + 0.4593083858489990 + 0.6440045237541199 + <_> + + <_> + + + + <_>3 12 14 4 -1. + <_>10 12 7 2 2. + <_>3 14 7 2 2. + 0 + -0.0180257596075535 + 1 + 0.5311291217803955 + <_> + + + + <_>9 15 3 2 -1. + <_>9 16 3 1 2. + 0 + 1.2354910140857100e-003 + 0.4729106128215790 + 0.5721461176872253 + <_> + + <_> + + + + <_>1 13 3 3 -1. + <_>1 14 3 1 3. + 0 + -9.2583027435466647e-004 + 0.3662332892417908 + 1 + <_> + + + + <_>0 3 1 2 -1. + <_>0 4 1 1 2. + 0 + 8.0123997759073973e-004 + 0.5361989736557007 + 0.3008632957935333 + 32.6471290588378910 + 10 + -1 + <_> + + + <_> + + <_> + + + + <_>7 7 6 1 -1. + <_>9 7 2 1 3. + 0 + 2.4914839304983616e-003 + 0.3422389030456543 + 1 + <_> + + + + <_>0 4 16 6 -1. + <_>0 6 16 2 3. + 0 + -0.0504885986447334 + 0.7703458070755005 + 0.4516390860080719 + <_> + + <_> + + + + <_>9 3 2 14 -1. + <_>9 10 2 7 2. + 0 + -7.7838351717218757e-004 + 1 + 0.3256342113018036 + <_> + + + + <_>12 0 4 3 -1. + <_>12 0 2 3 2. + 0 + 2.3572890495415777e-004 + 0.3406555950641632 + 0.5897027254104614 + <_> + + <_> + + + + <_>4 18 12 2 -1. + <_>8 18 4 2 3. + 0 + 4.5575071126222610e-003 + 0.4306578934192658 + 1 + <_> + + + + <_>4 10 12 4 -1. + <_>8 10 4 4 3. + 0 + 8.1241987645626068e-003 + 0.7149587273597717 + 0.4345684945583344 + <_> + + <_> + + + + <_>9 9 2 2 -1. + <_>9 10 2 1 2. + 0 + -4.4612158671952784e-004 + 0.3295974135398865 + 1 + <_> + + + + <_>14 1 2 8 -1. + <_>15 1 1 4 2. + <_>14 5 1 4 2. + 0 + -2.8972938889637589e-004 + 0.5845620036125183 + 0.3526687920093536 + <_> + + <_> + + + + <_>3 4 9 1 -1. + <_>6 4 3 1 3. + 0 + 7.1604831646254752e-006 + 0.4081954956054688 + 1 + <_> + + + + <_>3 3 4 2 -1. + <_>3 4 4 1 2. + 0 + -3.8497708737850189e-004 + 0.4203113019466400 + 0.6634126901626587 + <_> + + <_> + + + + <_>11 15 2 4 -1. + <_>11 17 2 2 2. + 0 + 1.9489860278554261e-004 + 0.3942466974258423 + 1 + <_> + + + + <_>14 13 2 6 -1. + <_>14 15 2 2 3. + 0 + -0.0170838497579098 + 0.2294072061777115 + 0.5238960981369019 + <_> + + <_> + + + + <_>6 6 1 6 -1. + <_>6 9 1 3 2. + 0 + 8.3513697609305382e-004 + 0.3026031851768494 + 1 + <_> + + + + <_>6 10 8 8 -1. + <_>6 14 8 4 2. + 0 + 7.5499608647078276e-004 + 0.6032196283340454 + 0.3412458896636963 + <_> + + <_> + + + + <_>8 13 4 3 -1. + <_>8 14 4 1 3. + 0 + 8.0216713249683380e-003 + 1 + 0.7306240797042847 + <_> + + + + <_>10 11 4 8 -1. + <_>10 15 4 4 2. + 0 + -0.0389305092394352 + 0.3599325120449066 + 0.5234380960464478 + <_> + + <_> + + + + <_>5 11 6 1 -1. + <_>7 11 2 1 3. + 0 + -7.0348767621908337e-005 + 1 + 0.3493758141994476 + <_> + + + + <_>5 4 6 10 -1. + <_>8 4 3 10 2. + 0 + -8.5350573062896729e-003 + 0.2746109068393707 + 0.5626586079597473 + <_> + + <_> + + + + <_>14 2 6 3 -1. + <_>14 3 6 1 3. + 0 + 0.0108544500544667 + 0.5282226204872131 + 1 + <_> + + + + <_>9 12 3 2 -1. + <_>9 13 3 1 2. + 0 + 4.5329501153901219e-004 + 0.4522049129009247 + 0.6054301857948303 + <_> + + <_> + + + + <_>8 1 4 6 -1. + <_>8 3 4 2 3. + 0 + 1.8117150466423482e-004 + 0.3306862115859985 + 1 + <_> + + + + <_>3 5 13 8 -1. + <_>3 9 13 4 2. + 0 + 4.6641560038551688e-004 + 0.1455000042915344 + 0.5384927988052368 + <_> + + <_> + + + + <_>12 5 5 3 -1. + <_>12 6 5 1 3. + 0 + -8.4854792803525925e-003 + 1 + 0.4814155995845795 + <_> + + + + <_>5 14 15 6 -1. + <_>5 16 15 2 3. + 0 + -0.0189343094825745 + 0.3563741147518158 + 0.5405145287513733 + <_> + + <_> + + + + <_>3 5 5 3 -1. + <_>3 6 5 1 3. + 0 + 4.9814549274742603e-003 + 1 + 0.6957743167877197 + <_> + + + + <_>9 14 2 6 -1. + <_>9 14 1 3 2. + <_>10 17 1 3 2. + 0 + 3.4286780282855034e-003 + 0.5050892829895020 + 0.2316994965076447 + <_> + + <_> + + + + <_>9 12 3 2 -1. + <_>9 13 3 1 2. + 0 + 4.4203791185282171e-004 + 1 + 0.6018581986427307 + <_> + + + + <_>9 13 3 2 -1. + <_>9 14 3 1 2. + 0 + 2.3822550429031253e-004 + 0.4755082130432129 + 0.5585237741470337 + <_> + + <_> + + + + <_>0 2 6 3 -1. + <_>0 3 6 1 3. + 0 + -6.4261639490723610e-003 + 0.2282465994358063 + 1 + <_> + + + + <_>0 1 9 11 -1. + <_>3 1 3 11 3. + 0 + 9.9637769162654877e-003 + 0.4040588140487671 + 0.5650169849395752 + <_> + + <_> + + + + <_>8 13 4 6 -1. + <_>10 13 2 3 2. + <_>8 16 2 3 2. + 0 + 0.0136540504172444 + 0.5267739295959473 + 1 + <_> + + + + <_>7 13 6 3 -1. + <_>7 14 6 1 3. + 0 + -9.9892877042293549e-003 + 0.6794049739837647 + 0.4797033965587616 + <_> + + <_> + + + + <_>3 12 14 4 -1. + <_>3 12 7 2 2. + <_>10 14 7 2 2. + 0 + 0.0365586318075657 + 1 + 0.0884257331490517 + <_> + + + + <_>7 14 1 4 -1. + <_>7 16 1 2 2. + 0 + 4.8999379941960797e-005 + 0.4020788073539734 + 0.5457332134246826 + <_> + + <_> + + + + <_>8 13 4 6 -1. + <_>10 13 2 3 2. + <_>8 16 2 3 2. + 0 + 0.0136540504172444 + 0.5267612934112549 + 1 + <_> + + + + <_>10 14 1 3 -1. + <_>10 15 1 1 3. + 0 + 1.8802779959514737e-003 + 0.4806052148342133 + 0.6394364833831787 + <_> + + <_> + + + + <_>8 13 4 6 -1. + <_>8 13 2 3 2. + <_>10 16 2 3 2. + 0 + -0.0136540504172444 + 0.1724810004234314 + 1 + <_> + + + + <_>9 14 1 3 -1. + <_>9 15 1 1 3. + 0 + 1.2778700329363346e-003 + 0.4479824006557465 + 0.6310008764266968 + <_> + + <_> + + + + <_>10 15 2 3 -1. + <_>10 16 2 1 3. + 0 + 9.8843395244330168e-004 + 1 + 0.5948169231414795 + <_> + + + + <_>11 16 1 2 -1. + <_>11 17 1 1 2. + 0 + 1.4511500012304168e-005 + 0.4854174852371216 + 0.5309361219406128 + <_> + + <_> + + + + <_>9 0 2 2 -1. + <_>9 1 2 1 2. + 0 + -2.2775429533794522e-004 + 0.3183631896972656 + 1 + <_> + + + + <_>0 1 5 8 -1. + <_>0 5 5 4 2. + 0 + -0.0147537402808666 + 0.3084976077079773 + 0.5352026224136353 + <_> + + <_> + + + + <_>10 14 2 3 -1. + <_>10 15 2 1 3. + 0 + -3.4148250706493855e-003 + 0.6115326881408691 + 1 + <_> + + + + <_>10 13 2 3 -1. + <_>10 14 2 1 3. + 0 + 7.5806681998074055e-003 + 0.4951646029949188 + 0.7061331272125244 + <_> + + <_> + + + + <_>0 3 16 6 -1. + <_>0 6 16 3 2. + 0 + -5.7734688743948936e-003 + 1 + 0.3754220902919769 + <_> + + + + <_>4 1 2 2 -1. + <_>5 1 1 2 2. + 0 + 7.4033669079653919e-005 + 0.4115517139434815 + 0.5889444947242737 + <_> + + <_> + + + + <_>9 7 2 3 -1. + <_>9 8 2 1 3. + 0 + -8.2278084009885788e-003 + 0.0956105664372444 + 1 + <_> + + + + <_>10 8 2 12 -1. + <_>10 12 2 4 3. + 0 + 5.3380909375846386e-003 + 0.5300508737564087 + 0.3961898088455200 + <_> + + <_> + + + + <_>9 7 2 2 -1. + <_>10 7 1 2 2. + 0 + -2.7049109339714050e-003 + 0.6481869220733643 + 1 + <_> + + + + <_>5 0 6 8 -1. + <_>7 0 2 8 3. + 0 + 7.7341338619589806e-003 + 0.5110440254211426 + 0.3121519088745117 + <_> + + <_> + + + + <_>9 7 3 6 -1. + <_>10 7 1 6 3. + 0 + 0.0108866095542908 + 0.4801428914070129 + 1 + <_> + + + + <_>8 12 10 8 -1. + <_>8 16 10 4 2. + 0 + 0.0110386600717902 + 0.5429710149765015 + 0.4162363111972809 + <_> + + <_> + + + + <_>8 7 3 6 -1. + <_>9 7 1 6 3. + 0 + -0.0100541999563575 + 0.7329335212707520 + 1 + <_> + + + + <_>4 7 12 2 -1. + <_>10 7 6 2 2. + 0 + 7.7072880230844021e-003 + 0.5356872081756592 + 0.3455547094345093 + <_> + + <_> + + + + <_>8 6 8 3 -1. + <_>8 6 4 3 2. + 0 + -5.8278098003938794e-004 + 0.3655022084712982 + 1 + <_> + + + + <_>16 15 3 3 -1. + <_>16 16 3 1 3. + 0 + -2.5739220436662436e-003 + 0.3776760101318359 + 0.5391774773597717 + <_> + + <_> + + + + <_>4 6 12 3 -1. + <_>10 6 6 3 2. + 0 + -7.0167761296033859e-003 + 0.4039304852485657 + 1 + <_> + + + + <_>7 8 3 5 -1. + <_>8 8 1 5 3. + 0 + -1.7727289814502001e-003 + 0.6950443983078003 + 0.4981116950511932 + <_> + + <_> + + + + <_>0 10 20 2 -1. + <_>10 10 10 1 2. + <_>0 11 10 1 2. + 0 + -0.0163182895630598 + 1 + 0.5296732783317566 + <_> + + + + <_>11 16 9 4 -1. + <_>14 16 3 4 3. + 0 + -0.0116630000993609 + 0.5842639803886414 + 0.4789502918720245 + <_> + + <_> + + + + <_>0 5 3 4 -1. + <_>1 5 1 4 3. + 0 + 2.5881489273160696e-003 + 1 + 0.6092178821563721 + <_> + + + + <_>8 15 4 2 -1. + <_>8 15 2 1 2. + <_>10 16 2 1 2. + 0 + -3.7328999023884535e-003 + 0.6721742749214172 + 0.4066894054412842 + <_> + + <_> + + + + <_>1 8 19 3 -1. + <_>1 9 19 1 3. + 0 + -1.4355930034071207e-003 + 0.3585087954998016 + 1 + <_> + + + + <_>15 16 3 3 -1. + <_>15 17 3 1 3. + 0 + 1.8340899841859937e-003 + 0.5371158123016357 + 0.4033507108688355 + <_> + + <_> + + + + <_>0 4 20 10 -1. + <_>0 4 10 5 2. + <_>10 9 10 5 2. + 0 + 0.1228028982877731 + 1 + 0.1547572016716003 + <_> + + + + <_>2 14 7 6 -1. + <_>2 16 7 2 3. + 0 + 0.0502287000417709 + 0.5433843731880188 + 0.0842926725745201 + <_> + + <_> + + + + <_>8 6 6 6 -1. + <_>10 6 2 6 3. + 0 + -0.0214370004832745 + 1 + 0.4860053956508637 + <_> + + + + <_>16 4 4 6 -1. + <_>16 6 4 2 3. + 0 + -0.0310096200555563 + 0.1833010017871857 + 0.5207554101943970 + <_> + + <_> + + + + <_>7 13 6 3 -1. + <_>7 14 6 1 3. + 0 + -0.0129737202078104 + 0.7048240900039673 + 1 + <_> + + + + <_>7 13 4 3 -1. + <_>7 14 4 1 3. + 0 + 1.5818020328879356e-003 + 0.4170587062835693 + 0.5865163803100586 + <_> + + <_> + + + + <_>13 13 6 2 -1. + <_>13 14 6 1 2. + 0 + -9.7806248813867569e-003 + 1 + 0.5307918190956116 + <_> + + + + <_>14 12 2 3 -1. + <_>14 13 2 1 3. + 0 + 1.1735740117728710e-003 + 0.5522453188896179 + 0.3507165014743805 + <_> + + <_> + + + + <_>1 13 6 2 -1. + <_>1 14 6 1 2. + 0 + 1.4651629608124495e-003 + 1 + 0.3042651116847992 + <_> + + + + <_>4 12 2 3 -1. + <_>4 13 2 1 3. + 0 + 2.3532148916274309e-003 + 0.5339323282241821 + 0.2806236147880554 + <_> + + <_> + + + + <_>17 4 3 5 -1. + <_>18 4 1 5 3. + 0 + -6.1809681355953217e-003 + 0.6410133242607117 + 1 + <_> + + + + <_>5 5 14 8 -1. + <_>12 5 7 4 2. + <_>5 9 7 4 2. + 0 + 6.5688649192452431e-004 + 0.5620871186256409 + 0.4390318989753723 + <_> + + <_> + + + + <_>6 8 6 5 -1. + <_>8 8 2 5 3. + 0 + 0.0262280106544495 + 1 + 0.6445556879043579 + <_> + + + + <_>0 4 4 6 -1. + <_>0 6 4 2 3. + 0 + -0.0179581101983786 + 0.2002713978290558 + 0.4624665081501007 + <_> + + <_> + + + + <_>9 1 3 6 -1. + <_>10 1 1 6 3. + 0 + -7.6468721963465214e-003 + 1 + 0.5263200998306274 + <_> + + + + <_>10 4 6 3 -1. + <_>10 5 6 1 3. + 0 + -2.7482809964567423e-003 + 0.5873981118202210 + 0.4836600124835968 + <_> + + <_> + + + + <_>8 1 3 6 -1. + <_>9 1 1 6 3. + 0 + 0.0138518502935767 + 1 + 0.1566130965948105 + <_> + + + + <_>4 4 6 3 -1. + <_>4 5 6 1 3. + 0 + 2.6369190309196711e-003 + 0.4270178973674774 + 0.5806660056114197 + <_> + + <_> + + + + <_>12 4 3 3 -1. + <_>12 5 3 1 3. + 0 + -3.1513599678874016e-003 + 0.6215866208076477 + 1 + <_> + + + + <_>12 11 4 2 -1. + <_>12 12 4 1 2. + 0 + -1.4788460248382762e-005 + 0.5576642751693726 + 0.4122002124786377 + <_> + + <_> + + + + <_>0 2 20 6 -1. + <_>0 2 10 3 2. + <_>10 5 10 3 2. + 0 + -0.0736769884824753 + 0.1536709964275360 + 1 + <_> + + + + <_>5 4 3 3 -1. + <_>5 5 3 1 3. + 0 + -3.0912780202925205e-003 + 0.6344268918037415 + 0.4507412016391754 + <_> + + <_> + + + + <_>2 10 16 4 -1. + <_>10 10 8 2 2. + <_>2 12 8 2 2. + 0 + 7.9240966588258743e-003 + 0.5457975268363953 + 1 + <_> + + + + <_>3 10 16 6 -1. + <_>11 10 8 3 2. + <_>3 13 8 3 2. + 0 + 8.5778040811419487e-003 + 0.5401657223701477 + 0.3890799880027771 + <_> + + <_> + + + + <_>1 10 16 6 -1. + <_>1 10 8 3 2. + <_>9 13 8 3 2. + 0 + 5.5403169244527817e-003 + 1 + 0.3555611073970795 + <_> + + + + <_>4 7 2 4 -1. + <_>5 7 1 4 2. + 0 + -1.1886510037584230e-004 + 0.5836750268936157 + 0.4274316132068634 + <_> + + <_> + + + + <_>11 16 9 4 -1. + <_>14 16 3 4 3. + 0 + -0.0184083692729473 + 0.5860440135002136 + 1 + <_> + + + + <_>3 16 14 4 -1. + <_>10 16 7 2 2. + <_>3 18 7 2 2. + 0 + -2.3490579333156347e-003 + 0.4498957991600037 + 0.5498198866844177 + <_> + + <_> + + + + <_>0 16 9 4 -1. + <_>3 16 3 4 3. + 0 + -7.6157399453222752e-003 + 1 + 0.4100992977619171 + <_> + + + + <_>1 14 6 6 -1. + <_>1 14 3 3 2. + <_>4 17 3 3 2. + 0 + -3.3190969843417406e-003 + 0.6701378822326660 + 0.4353001117706299 + <_> + + <_> + + + + <_>9 0 2 1 -1. + <_>9 0 1 1 2. + 0 + -9.4642979092895985e-004 + 1 + 0.5391176939010620 + <_> + + + + <_>6 7 8 10 -1. + <_>10 7 4 5 2. + <_>6 12 4 5 2. + 0 + 8.7858550250530243e-003 + 0.5504050254821777 + 0.3990935087203980 + <_> + + <_> + + + + <_>2 15 1 2 -1. + <_>2 16 1 1 2. + 0 + 1.6395459533669055e-004 + 1 + 0.3592933118343353 + <_> + + + + <_>0 14 7 6 -1. + <_>0 16 7 2 3. + 0 + -2.3508940357714891e-003 + 0.4034172892570496 + 0.5806077122688294 + <_> + + <_> + + + + <_>7 8 6 2 -1. + <_>7 9 6 1 2. + 0 + 7.5449963333085179e-005 + 1 + 0.5412384867668152 + <_> + + + + <_>9 2 2 15 -1. + <_>9 7 2 5 3. + 0 + 0.0270184893161058 + 0.4944922924041748 + 0.5589436292648315 + <_> + + <_> + + + + <_>5 6 2 2 -1. + <_>5 7 2 1 2. + 0 + 8.4561208495870233e-004 + 1 + 0.5809218287467957 + <_> + + + + <_>6 6 8 3 -1. + <_>6 7 8 1 3. + 0 + -1.1687109945341945e-003 + 0.4746957123279572 + 0.2845895886421204 + <_> + + <_> + + + + <_>12 13 5 6 -1. + <_>12 15 5 2 3. + 0 + 0.0228975005447865 + 1 + 0.2414411008358002 + <_> + + + + <_>0 0 20 18 -1. + <_>0 9 20 9 2. + 0 + 0.7087926268577576 + 0.5195764899253845 + 0.1030092015862465 + <_> + + <_> + + + + <_>5 1 6 6 -1. + <_>7 1 2 6 3. + 0 + 0.0374838300049305 + 1 + 0.1814638972282410 + <_> + + + + <_>5 1 4 9 -1. + <_>7 1 2 9 2. + 0 + 1.2827500468119979e-003 + 0.4246071875095367 + 0.5707973241806030 + <_> + + <_> + + + + <_>1 19 18 1 -1. + <_>7 19 6 1 3. + 0 + -5.1718312315642834e-003 + 0.6143323183059692 + 1 + <_> + + + + <_>14 16 5 2 -1. + <_>14 17 5 1 2. + 0 + 2.7545939665287733e-003 + 0.5205671191215515 + 0.4220441877841950 + <_> + + <_> + + + + <_>0 5 15 10 -1. + <_>0 10 15 5 2. + 0 + -3.6072919610887766e-003 + 0.3182592093944550 + 1 + <_> + + + + <_>7 15 4 2 -1. + <_>7 15 2 1 2. + <_>9 16 2 1 2. + 0 + -2.5258748792111874e-004 + 0.5710468292236328 + 0.4226093888282776 + <_> + + <_> + + + + <_>14 11 2 2 -1. + <_>14 12 2 1 2. + 0 + -7.0514748804271221e-003 + 1 + 0.5162829756736755 + <_> + + + + <_>9 8 3 3 -1. + <_>9 9 3 1 3. + 0 + -5.4323761723935604e-003 + 0.2666288912296295 + 0.5214679837226868 + <_> + + <_> + + + + <_>4 11 2 2 -1. + <_>4 12 2 1 2. + 0 + -1.4652940080850385e-005 + 1 + 0.3981761038303375 + <_> + + + + <_>8 8 3 3 -1. + <_>8 9 3 1 3. + 0 + -1.8556920113041997e-003 + 0.3322763144969940 + 0.5705834031105042 + <_> + + <_> + + + + <_>9 10 2 3 -1. + <_>9 11 2 1 3. + 0 + 4.7609540633857250e-003 + 1 + 0.6636558175086975 + <_> + + + + <_>8 8 4 3 -1. + <_>8 9 4 1 3. + 0 + 1.5676260227337480e-003 + 0.5505567789077759 + 0.4420661926269531 + <_> + + <_> + + + + <_>1 9 4 10 -1. + <_>1 9 2 5 2. + <_>3 14 2 5 2. + 0 + 5.4239919409155846e-003 + 1 + 0.5959938168525696 + <_> + + + + <_>0 12 6 8 -1. + <_>2 12 2 8 3. + 0 + -6.4692399464547634e-003 + 0.5369594097137451 + 0.3744339942932129 + <_> + + <_> + + + + <_>9 1 4 2 -1. + <_>11 1 2 1 2. + <_>9 2 2 1 2. + 0 + -7.8038539504632354e-004 + 0.4103595018386841 + 1 + <_> + + + + <_>12 13 7 6 -1. + <_>12 15 7 2 3. + 0 + 0.0450864508748055 + 0.5177506804466248 + 0.1878100037574768 + <_> + + <_> + + + + <_>7 0 2 3 -1. + <_>7 1 2 1 3. + 0 + -5.1405387930572033e-003 + 0.2352892011404038 + 1 + <_> + + + + <_>7 14 6 3 -1. + <_>9 14 2 3 3. + 0 + -0.0212361291050911 + 0.1708751022815704 + 0.5424973964691162 + <_> + + <_> + + + + <_>9 6 6 4 -1. + <_>11 6 2 4 3. + 0 + -2.3763340432196856e-003 + 0.5836530923843384 + 1 + <_> + + + + <_>8 10 8 3 -1. + <_>8 10 4 3 2. + 0 + 0.0541225895285606 + 0.5117433071136475 + 0.1865931004285812 + <_> + + <_> + + + + <_>6 10 4 3 -1. + <_>8 10 2 3 2. + 0 + -5.3492980077862740e-004 + 0.5108693242073059 + 1 + <_> + + + + <_>6 8 3 5 -1. + <_>7 8 1 5 3. + 0 + -5.8454048121348023e-004 + 0.4775491058826447 + 0.2439853996038437 + 30.6721305847167970 + 11 + -1 + <_> + + + <_> + + <_> + + + + <_>0 4 8 1 -1. + <_>4 4 4 1 2. + 0 + 3.0031939968466759e-003 + 0.3349649906158447 + 1 + <_> + + + + <_>8 2 2 6 -1. + <_>8 2 1 3 2. + <_>9 5 1 3 2. + 0 + 6.9161207647994161e-004 + 0.4518367946147919 + 0.7289354205131531 + <_> + + <_> + + + + <_>0 7 20 6 -1. + <_>0 9 20 2 3. + 0 + 0.0112127903848886 + 0.2950800955295563 + 1 + <_> + + + + <_>12 10 3 6 -1. + <_>12 13 3 3 2. + 0 + -7.6108198845759034e-004 + 0.5669054985046387 + 0.2830851078033447 + <_> + + <_> + + + + <_>8 15 1 4 -1. + <_>8 17 1 2 2. + 0 + 1.1984579759882763e-004 + 0.4090577960014343 + 1 + <_> + + + + <_>5 16 2 4 -1. + <_>5 18 2 2 2. + 0 + -1.9725349557120353e-004 + 0.6951494216918945 + 0.4637868106365204 + <_> + + <_> + + + + <_>6 2 8 12 -1. + <_>6 6 8 4 3. + 0 + -5.5180420167744160e-003 + 1 + 0.3167675137519836 + <_> + + + + <_>4 7 12 2 -1. + <_>8 7 4 2 3. + 0 + 1.2148249661549926e-003 + 0.3316706120967865 + 0.5396397709846497 + <_> + + <_> + + + + <_>7 0 6 1 -1. + <_>9 0 2 1 3. + 0 + -4.2497441172599792e-003 + 0.2600573897361755 + 1 + <_> + + + + <_>8 11 3 3 -1. + <_>8 12 3 1 3. + 0 + -9.4915721565485001e-003 + 0.7484294772148132 + 0.5073192119598389 + <_> + + <_> + + + + <_>12 11 3 6 -1. + <_>12 14 3 3 2. + 0 + 6.5378600265830755e-004 + 1 + 0.3952010869979858 + <_> + + + + <_>11 2 6 10 -1. + <_>14 2 3 5 2. + <_>11 7 3 5 2. + 0 + -4.9741100519895554e-004 + 0.5880274772644043 + 0.3552120029926300 + <_> + + <_> + + + + <_>5 7 10 12 -1. + <_>5 7 5 6 2. + <_>10 13 5 6 2. + 0 + -0.0430792495608330 + 0.2434878051280975 + 1 + <_> + + + + <_>4 4 2 10 -1. + <_>4 9 2 5 2. + 0 + -5.1999092102050781e-004 + 0.3195562958717346 + 0.5585454702377319 + <_> + + <_> + + + + <_>9 7 2 3 -1. + <_>9 7 1 3 2. + 0 + -4.5451628975570202e-003 + 1 + 0.4845289885997772 + <_> + + + + <_>11 9 6 2 -1. + <_>11 9 3 2 2. + 0 + -7.9610403627157211e-003 + 0.3801181018352509 + 0.5358511805534363 + <_> + + <_> + + + + <_>4 7 2 2 -1. + <_>5 7 1 2 2. + 0 + -3.1919340835884213e-004 + 1 + 0.4356329143047333 + <_> + + + + <_>0 2 4 6 -1. + <_>0 4 4 2 3. + 0 + -0.0192238893359900 + 0.2613066136837006 + 0.6155496239662170 + <_> + + <_> + + + + <_>10 7 3 4 -1. + <_>11 7 1 4 3. + 0 + -1.3076990144327283e-003 + 0.5942062139511108 + 1 + <_> + + + + <_>9 7 3 5 -1. + <_>10 7 1 5 3. + 0 + 0.0198250394314528 + 0.4945428073406220 + 0.7384855151176453 + <_> + + <_> + + + + <_>9 1 1 3 -1. + <_>9 2 1 1 3. + 0 + -2.2013280540704727e-003 + 0.2214481979608536 + 1 + <_> + + + + <_>0 6 16 6 -1. + <_>0 6 8 3 2. + <_>8 9 8 3 2. + 0 + -7.8596705570816994e-003 + 0.3600977063179016 + 0.5298550128936768 + <_> + + <_> + + + + <_>10 15 3 3 -1. + <_>10 16 3 1 3. + 0 + 1.4142199652269483e-003 + 1 + 0.5776566267013550 + <_> + + + + <_>9 14 4 3 -1. + <_>9 15 4 1 3. + 0 + -0.0112327598035336 + 0.6934456825256348 + 0.4827207028865814 + <_> + + <_> + + + + <_>3 2 6 10 -1. + <_>3 2 3 5 2. + <_>6 7 3 5 2. + 0 + 2.9746301006525755e-003 + 1 + 0.3216677010059357 + <_> + + + + <_>3 0 14 2 -1. + <_>3 1 14 1 2. + 0 + 5.3283828310668468e-004 + 0.3962500095367432 + 0.5680363774299622 + <_> + + <_> + + + + <_>9 14 3 3 -1. + <_>9 15 3 1 3. + 0 + 0.0101052597165108 + 1 + 0.7567418217658997 + <_> + + + + <_>10 15 3 3 -1. + <_>10 16 3 1 3. + 0 + -0.0116536999121308 + 0.6523556709289551 + 0.5027053952217102 + <_> + + <_> + + + + <_>9 13 2 6 -1. + <_>9 16 2 3 2. + 0 + -7.0609981194138527e-003 + 0.2538770139217377 + 1 + <_> + + + + <_>7 13 6 3 -1. + <_>7 14 6 1 3. + 0 + 2.2343141026794910e-003 + 0.4387277066707611 + 0.6177632212638855 + <_> + + <_> + + + + <_>12 11 3 6 -1. + <_>12 14 3 3 2. + 0 + -0.0298022795468569 + 1 + 0.5201140046119690 + <_> + + + + <_>8 12 5 2 -1. + <_>8 13 5 1 2. + 0 + 1.1611840454861522e-003 + 0.4647909998893738 + 0.6184254884719849 + <_> + + <_> + + + + <_>5 11 3 6 -1. + <_>5 14 3 3 2. + 0 + 9.4824447296559811e-004 + 1 + 0.3040994107723236 + <_> + + + + <_>8 12 3 2 -1. + <_>8 13 3 1 2. + 0 + 4.1284630424343050e-004 + 0.4518808126449585 + 0.6245782971382141 + <_> + + <_> + + + + <_>11 13 7 6 -1. + <_>11 15 7 2 3. + 0 + -0.0312035400420427 + 0.2788935899734497 + 1 + <_> + + + + <_>7 14 6 3 -1. + <_>7 15 6 1 3. + 0 + 2.7652881108224392e-003 + 0.4698500037193298 + 0.6502454280853272 + <_> + + <_> + + + + <_>3 13 14 4 -1. + <_>3 13 7 2 2. + <_>10 15 7 2 2. + 0 + 0.0256447792053223 + 1 + 0.1805171072483063 + <_> + + + + <_>8 14 4 6 -1. + <_>8 14 2 3 2. + <_>10 17 2 3 2. + 0 + -7.5331530533730984e-003 + 0.3208068907260895 + 0.5522022843360901 + <_> + + <_> + + + + <_>8 15 4 3 -1. + <_>8 16 4 1 3. + 0 + 3.2047149725258350e-003 + 1 + 0.6436933875083923 + <_> + + + + <_>7 16 6 2 -1. + <_>9 16 2 2 3. + 0 + -2.4282479716930538e-004 + 0.5676705241203308 + 0.4509103894233704 + <_> + + <_> + + + + <_>7 7 6 2 -1. + <_>7 8 6 1 2. + 0 + -6.1979342717677355e-004 + 0.3122146129608154 + 1 + <_> + + + + <_>3 9 13 3 -1. + <_>3 10 13 1 3. + 0 + -8.0101029016077518e-004 + 0.2965193986892700 + 0.5230494737625122 + <_> + + <_> + + + + <_>9 8 3 4 -1. + <_>9 10 3 2 2. + 0 + -9.1816839994862676e-004 + 1 + 0.5464711785316467 + <_> + + + + <_>8 10 4 3 -1. + <_>8 11 4 1 3. + 0 + 1.2239529751241207e-003 + 0.4618502855300903 + 0.5679548978805542 + <_> + + <_> + + + + <_>7 7 3 4 -1. + <_>8 7 1 4 3. + 0 + -6.8743730662390590e-004 + 0.5430880188941956 + 1 + <_> + + + + <_>8 7 3 5 -1. + <_>9 7 1 5 3. + 0 + -1.8252469599246979e-003 + 0.5433623194694519 + 0.3385221064090729 + <_> + + <_> + + + + <_>12 3 3 4 -1. + <_>13 3 1 4 3. + 0 + -7.4570789001882076e-003 + 1 + 0.5265594720840454 + <_> + + + + <_>9 7 2 3 -1. + <_>9 7 1 3 2. + 0 + 5.3775748237967491e-003 + 0.4857215881347656 + 0.6815124154090881 + <_> + + <_> + + + + <_>5 3 3 4 -1. + <_>6 3 1 4 3. + 0 + 3.7602309603244066e-003 + 1 + 0.2832160890102387 + <_> + + + + <_>3 7 12 1 -1. + <_>7 7 4 1 3. + 0 + 8.7752222316339612e-004 + 0.3966830968856812 + 0.5512480735778809 + <_> + + <_> + + + + <_>12 5 3 3 -1. + <_>12 6 3 1 3. + 0 + 5.5084479972720146e-003 + 1 + 0.6784620285034180 + <_> + + + + <_>11 2 6 2 -1. + <_>11 3 6 1 2. + 0 + -7.5949047459289432e-004 + 0.3906503021717072 + 0.5457202792167664 + <_> + + <_> + + + + <_>3 2 14 2 -1. + <_>3 2 7 1 2. + <_>10 3 7 1 2. + 0 + 1.6352660022675991e-003 + 1 + 0.3640204071998596 + <_> + + + + <_>6 1 7 14 -1. + <_>6 8 7 7 2. + 0 + -1.2750849418807775e-004 + 0.5829724073410034 + 0.4194979965686798 + <_> + + <_> + + + + <_>8 0 12 5 -1. + <_>8 0 6 5 2. + 0 + 0.0220676101744175 + 0.4606702923774719 + 1 + <_> + + + + <_>1 9 18 1 -1. + <_>7 9 6 1 3. + 0 + -0.0192037895321846 + 0.3261483013629913 + 0.5236080884933472 + <_> + + <_> + + + + <_>0 0 10 5 -1. + <_>5 0 5 5 2. + 0 + -0.0129981096833944 + 0.7022112011909485 + 1 + <_> + + + + <_>2 5 8 15 -1. + <_>2 10 8 5 3. + 0 + -3.1332690268754959e-003 + 0.2870470881462097 + 0.5076476931571960 + <_> + + <_> + + + + <_>12 5 3 3 -1. + <_>12 6 3 1 3. + 0 + -5.2937557920813560e-003 + 1 + 0.4709520936012268 + <_> + + + + <_>13 4 2 3 -1. + <_>13 5 2 1 3. + 0 + 2.1857069805264473e-003 + 0.4708291888237000 + 0.6169841885566711 + <_> + + <_> + + + + <_>2 15 4 3 -1. + <_>2 16 4 1 3. + 0 + -4.5750709250569344e-003 + 0.3114252984523773 + 1 + <_> + + + + <_>5 6 10 3 -1. + <_>10 6 5 3 2. + 0 + -0.0451521389186382 + 0.1851435005664825 + 0.5504814982414246 + <_> + + <_> + + + + <_>11 6 2 2 -1. + <_>12 6 1 1 2. + <_>11 7 1 1 2. + 0 + -2.7783559635281563e-003 + 1 + 0.4937348067760468 + <_> + + + + <_>12 4 4 3 -1. + <_>12 5 4 1 3. + 0 + -2.5752480141818523e-003 + 0.6152948141098023 + 0.4735499918460846 + <_> + + <_> + + + + <_>7 6 2 2 -1. + <_>7 6 1 1 2. + <_>8 7 1 1 2. + 0 + 1.1614130344241858e-003 + 1 + 0.6510571837425232 + <_> + + + + <_>4 4 4 3 -1. + <_>4 5 4 1 3. + 0 + 2.3350189439952374e-003 + 0.4088341891765595 + 0.5684152245521545 + <_> + + <_> + + + + <_>11 4 3 3 -1. + <_>12 4 1 3 3. + 0 + 3.8499289657920599e-003 + 1 + 0.3025828897953033 + <_> + + + + <_>9 3 2 1 -1. + <_>9 3 1 1 2. + 0 + 2.4529630318284035e-003 + 0.5232502818107605 + 0.2017620950937271 + <_> + + <_> + + + + <_>4 5 5 3 -1. + <_>4 6 5 1 3. + 0 + 3.6731390282511711e-003 + 1 + 0.6428425908088684 + <_> + + + + <_>4 6 4 3 -1. + <_>4 7 4 1 3. + 0 + 2.1937100682407618e-003 + 0.4328865110874176 + 0.6420509815216065 + <_> + + <_> + + + + <_>11 4 3 3 -1. + <_>12 4 1 3 3. + 0 + -6.4666871912777424e-003 + 1 + 0.5254065990447998 + <_> + + + + <_>8 8 4 3 -1. + <_>8 9 4 1 3. + 0 + -5.7186251506209373e-003 + 0.2490984052419663 + 0.5287619233131409 + <_> + + <_> + + + + <_>6 4 3 3 -1. + <_>7 4 1 3 3. + 0 + 9.9941878579556942e-004 + 1 + 0.3329795897006989 + <_> + + + + <_>4 14 1 3 -1. + <_>4 15 1 1 3. + 0 + -7.8276498243212700e-004 + 0.3598344922065735 + 0.5498340725898743 + <_> + + <_> + + + + <_>9 7 2 3 -1. + <_>9 7 1 3 2. + 0 + 4.3231188319623470e-003 + 0.4818705022335053 + 1 + <_> + + + + <_>17 0 3 2 -1. + <_>17 1 3 1 2. + 0 + 4.0838290005922318e-003 + 0.5266330242156982 + 0.3105789124965668 + <_> + + <_> + + + + <_>8 10 2 9 -1. + <_>8 13 2 3 3. + 0 + 3.0515898833982646e-004 + 1 + 0.3995291888713837 + <_> + + + + <_>0 8 18 2 -1. + <_>0 9 18 1 2. + 0 + 1.2640280183404684e-003 + 0.3228437900543213 + 0.5819215178489685 + <_> + + <_> + + + + <_>9 15 2 3 -1. + <_>9 16 2 1 3. + 0 + -0.0101526603102684 + 0.8026071190834045 + 1 + <_> + + + + <_>8 7 4 3 -1. + <_>8 8 4 1 3. + 0 + -2.6863690000027418e-003 + 0.3875617086887360 + 0.5466570854187012 + <_> + + <_> + + + + <_>1 14 6 6 -1. + <_>1 14 3 3 2. + <_>4 17 3 3 2. + 0 + -9.0515613555908203e-003 + 1 + 0.4372057914733887 + <_> + + + + <_>0 18 6 2 -1. + <_>0 19 6 1 2. + 0 + -6.3204211182892323e-003 + 0.1126551032066345 + 0.6395416259765625 + <_> + + <_> + + + + <_>12 9 4 3 -1. + <_>12 9 2 3 2. + 0 + 2.6117300149053335e-003 + 0.5423989295959473 + 1 + <_> + + + + <_>9 8 3 8 -1. + <_>10 8 1 8 3. + 0 + 0.0143390195444226 + 0.4979273080825806 + 0.6042236089706421 + <_> + + <_> + + + + <_>4 9 4 3 -1. + <_>6 9 2 3 2. + 0 + 2.8452780097723007e-003 + 1 + 0.3491092026233673 + <_> + + + + <_>4 18 6 1 -1. + <_>6 18 2 1 3. + 0 + 1.4783289771003183e-005 + 0.4195067882537842 + 0.5775966048240662 + <_> + + <_> + + + + <_>9 7 3 2 -1. + <_>10 7 1 2 3. + 0 + 8.1814555451273918e-003 + 0.4885987043380737 + 1 + <_> + + + + <_>6 7 8 12 -1. + <_>10 7 4 6 2. + <_>6 13 4 6 2. + 0 + 6.6321990452706814e-003 + 0.5444468259811401 + 0.4420995116233826 + <_> + + <_> + + + + <_>8 7 3 2 -1. + <_>9 7 1 2 3. + 0 + -2.2483461070805788e-003 + 0.6699792146682739 + 1 + <_> + + + + <_>8 7 3 6 -1. + <_>9 7 1 6 3. + 0 + 0.0123745603486896 + 0.4478605985641480 + 0.6564893722534180 + <_> + + <_> + + + + <_>3 16 14 4 -1. + <_>10 16 7 2 2. + <_>3 18 7 2 2. + 0 + -6.6516688093543053e-003 + 1 + 0.5511878728866577 + <_> + + + + <_>1 14 18 4 -1. + <_>10 14 9 2 2. + <_>1 16 9 2 2. + 0 + -8.5750613361597061e-003 + 0.4017445147037506 + 0.5405536293983460 + <_> + + <_> + + + + <_>8 7 3 3 -1. + <_>8 8 3 1 3. + 0 + 6.5078441984951496e-003 + 1 + 0.2294393032789230 + <_> + + + + <_>0 4 20 12 -1. + <_>0 4 10 6 2. + <_>10 10 10 6 2. + 0 + 0.0286752097308636 + 0.5177900195121765 + 0.3567756116390228 + <_> + + <_> + + + + <_>5 5 10 12 -1. + <_>10 5 5 6 2. + <_>5 11 5 6 2. + 0 + 7.0673860609531403e-003 + 0.5564699769020081 + 1 + <_> + + + + <_>10 2 4 7 -1. + <_>10 2 2 7 2. + 0 + 1.2367829913273454e-003 + 0.3627698123455048 + 0.5572413802146912 + <_> + + <_> + + + + <_>8 11 4 3 -1. + <_>8 12 4 1 3. + 0 + 7.4818679131567478e-003 + 1 + 0.6784911155700684 + <_> + + + + <_>8 12 3 3 -1. + <_>8 13 3 1 3. + 0 + 4.7109839506447315e-003 + 0.4121252894401550 + 0.6072235703468323 + <_> + + <_> + + + + <_>13 13 5 6 -1. + <_>13 15 5 2 3. + 0 + -6.9405790418386459e-003 + 1 + 0.5459766983985901 + <_> + + + + <_>7 0 6 6 -1. + <_>9 0 2 6 3. + 0 + 0.0333020985126495 + 0.5276706814765930 + 0.2374915927648544 + <_> + + <_> + + + + <_>2 13 5 6 -1. + <_>2 15 5 2 3. + 0 + 0.0361046306788921 + 1 + 0.0724927932024002 + <_> + + + + <_>0 4 2 12 -1. + <_>0 4 1 6 2. + <_>1 10 1 6 2. + 0 + 0.0196746494621038 + 0.4626345932483673 + 0.8208963274955750 + <_> + + <_> + + + + <_>9 19 3 1 -1. + <_>10 19 1 1 3. + 0 + 3.4766150638461113e-003 + 0.5208731889724731 + 1 + <_> + + + + <_>18 0 2 6 -1. + <_>18 2 2 2 3. + 0 + 1.3987369602546096e-003 + 0.5484414100646973 + 0.4230034947395325 + <_> + + <_> + + + + <_>0 3 1 6 -1. + <_>0 5 1 2 3. + 0 + 4.0974249131977558e-003 + 1 + 0.2780553102493286 + <_> + + + + <_>0 0 3 6 -1. + <_>0 2 3 2 3. + 0 + 2.6973790954798460e-003 + 0.5403831005096436 + 0.3790988922119141 + <_> + + <_> + + + + <_>17 2 3 7 -1. + <_>18 2 1 7 3. + 0 + -5.6591699831187725e-003 + 1 + 0.4798336029052734 + <_> + + + + <_>10 3 4 7 -1. + <_>10 3 2 7 2. + 0 + 3.9460969856008887e-004 + 0.3766950070858002 + 0.5429229140281677 + <_> + + <_> + + + + <_>0 2 3 7 -1. + <_>1 2 1 7 3. + 0 + 2.1750570740550756e-003 + 1 + 0.6207162737846375 + <_> + + + + <_>6 2 4 8 -1. + <_>8 2 2 8 2. + 0 + 1.4614439569413662e-003 + 0.3357945084571838 + 0.5142632126808167 + <_> + + <_> + + + + <_>13 0 1 4 -1. + <_>13 2 1 2 2. + 0 + -5.3006567759439349e-004 + 1 + 0.5344640016555786 + <_> + + + + <_>5 1 12 5 -1. + <_>9 1 4 5 3. + 0 + 0.1486930996179581 + 0.5159608125686646 + 0.2561823129653931 + <_> + + <_> + + + + <_>6 0 1 4 -1. + <_>6 2 1 2 2. + 0 + -5.8816498494707048e-005 + 1 + 0.5123091936111450 + <_> + + + + <_>3 1 12 5 -1. + <_>7 1 4 5 3. + 0 + -1.6275369562208652e-003 + 0.6017646193504334 + 0.3109371960163117 + <_> + + <_> + + + + <_>9 12 3 8 -1. + <_>10 12 1 8 3. + 0 + -0.0128818098455668 + 0.2712287008762360 + 1 + <_> + + + + <_>7 13 6 1 -1. + <_>9 13 2 1 3. + 0 + 9.4982917653396726e-004 + 0.5442442297935486 + 0.4028888046741486 + <_> + + <_> + + + + <_>7 14 6 3 -1. + <_>7 15 6 1 3. + 0 + -0.0123159997165203 + 1 + 0.4736065864562988 + <_> + + + + <_>5 16 7 3 -1. + <_>5 17 7 1 3. + 0 + 9.0286601334810257e-003 + 0.7451434731483460 + 0.3487991988658905 + <_> + + <_> + + + + <_>0 12 20 6 -1. + <_>0 14 20 2 3. + 0 + -0.0868761166930199 + 0.2290333062410355 + 1 + <_> + + + + <_>4 18 14 2 -1. + <_>4 19 14 1 2. + 0 + -1.5107560102478601e-005 + 0.5517889857292175 + 0.4393149018287659 + <_> + + <_> + + + + <_>8 12 3 8 -1. + <_>9 12 1 8 3. + 0 + -0.0174576602876186 + 0.0901679024100304 + 1 + <_> + + + + <_>7 13 3 3 -1. + <_>7 14 3 1 3. + 0 + -2.5219470262527466e-003 + 0.6233540177345276 + 0.4789459109306335 + <_> + + <_> + + + + <_>5 5 12 10 -1. + <_>11 5 6 5 2. + <_>5 10 6 5 2. + 0 + 1.0656520025804639e-003 + 0.5489696264266968 + 1 + <_> + + + + <_>8 1 5 10 -1. + <_>8 6 5 5 2. + 0 + -4.2540300637483597e-003 + 0.5579808950424194 + 0.4375877976417542 + <_> + + <_> + + + + <_>5 4 9 12 -1. + <_>5 10 9 6 2. + 0 + -9.0349102392792702e-003 + 0.3579156100749970 + 1 + <_> + + + + <_>7 13 6 6 -1. + <_>7 15 6 2 3. + 0 + -1.5230999561026692e-003 + 0.5613660216331482 + 0.3939043879508972 + <_> + + <_> + + + + <_>8 4 5 16 -1. + <_>8 12 5 8 2. + 0 + 2.8441150207072496e-003 + 1 + 0.3901554942131043 + <_> + + + + <_>8 12 4 6 -1. + <_>8 15 4 3 2. + 0 + -3.2824429217725992e-003 + 0.4528619050979614 + 0.5441343188285828 + <_> + + <_> + + + + <_>7 13 2 2 -1. + <_>7 13 1 1 2. + <_>8 14 1 1 2. + 0 + 3.2161718991119415e-005 + 1 + 0.5803111791610718 + <_> + + + + <_>7 12 2 2 -1. + <_>7 12 1 1 2. + <_>8 13 1 1 2. + 0 + 3.0118400900391862e-005 + 0.3336850106716156 + 0.5504856109619141 + <_> + + <_> + + + + <_>18 0 2 14 -1. + <_>18 0 1 14 2. + 0 + -5.6150099262595177e-003 + 0.6124789118766785 + 1 + <_> + + + + <_>12 11 7 2 -1. + <_>12 12 7 1 2. + 0 + -0.0173892099410295 + 0.0872716307640076 + 0.5204588174819946 + <_> + + <_> + + + + <_>1 18 1 2 -1. + <_>1 19 1 1 2. + 0 + -4.4361080654198304e-005 + 0.3935329020023346 + 1 + <_> + + + + <_>2 18 1 2 -1. + <_>2 19 1 1 2. + 0 + 1.0354899859521538e-004 + 0.5918853878974915 + 0.4119614064693451 + <_> + + <_> + + + + <_>9 7 2 1 -1. + <_>9 7 1 1 2. + 0 + 1.5939630102366209e-003 + 0.4839623868465424 + 1 + <_> + + + + <_>9 6 2 3 -1. + <_>9 6 1 3 2. + 0 + 2.5440789759159088e-003 + 0.4787364900112152 + 0.6360663175582886 + <_> + + <_> + + + + <_>3 1 2 2 -1. + <_>4 1 1 2 2. + 0 + 1.5083180187502876e-005 + 0.4231117069721222 + 1 + <_> + + + + <_>3 0 3 2 -1. + <_>3 1 3 1 2. + 0 + -9.9282202427275479e-005 + 0.4274589121341705 + 0.6094048023223877 + <_> + + <_> + + + + <_>12 10 3 4 -1. + <_>12 12 3 2 2. + 0 + 5.5371708003804088e-004 + 1 + 0.4271987974643707 + <_> + + + + <_>7 7 8 2 -1. + <_>7 8 8 1 2. + 0 + 1.9186759600415826e-003 + 0.4497107863426209 + 0.5549122095108032 + <_> + + <_> + + + + <_>8 8 3 4 -1. + <_>8 10 3 2 2. + 0 + -5.0764222396537662e-004 + 1 + 0.5477195978164673 + <_> + + + + <_>7 12 6 3 -1. + <_>7 13 6 1 3. + 0 + 1.7236480489373207e-003 + 0.2882922887802124 + 0.5615127086639404 + 34.6770782470703120 + 12 + -1 + <_> + + + <_> + + <_> + + + + <_>0 2 10 3 -1. + <_>5 2 5 3 2. + 0 + 0.0130921695381403 + 0.3338870108127594 + 1 + <_> + + + + <_>0 1 20 6 -1. + <_>0 3 20 2 3. + 0 + 4.1446479735895991e-004 + 0.3099352121353149 + 0.6677492260932922 + <_> + + <_> + + + + <_>7 6 6 3 -1. + <_>9 6 2 3 3. + 0 + 0.0218357294797897 + 0.4369049072265625 + 1 + <_> + + + + <_>3 7 14 4 -1. + <_>3 9 14 2 2. + 0 + 0.0483239404857159 + 0.4301724135875702 + 0.6153885126113892 + <_> + + <_> + + + + <_>5 7 3 6 -1. + <_>5 9 3 2 3. + 0 + 1.6091950237751007e-003 + 0.3387326002120972 + 1 + <_> + + + + <_>8 8 3 12 -1. + <_>8 12 3 4 3. + 0 + 1.3469760306179523e-003 + 0.6248713731765747 + 0.3594130873680115 + <_> + + <_> + + + + <_>9 17 6 2 -1. + <_>12 17 3 1 2. + <_>9 18 3 1 2. + 0 + 1.7729059618432075e-004 + 0.3868424892425537 + 1 + <_> + + + + <_>10 17 4 3 -1. + <_>10 18 4 1 3. + 0 + 3.6743620876222849e-004 + 0.4409345090389252 + 0.5476474165916443 + <_> + + <_> + + + + <_>4 2 4 2 -1. + <_>4 3 4 1 2. + 0 + -1.2352119665592909e-003 + 0.3260171115398407 + 1 + <_> + + + + <_>7 3 6 14 -1. + <_>9 3 2 14 3. + 0 + 1.1705530341714621e-003 + 0.4111348986625671 + 0.6088163852691650 + <_> + + <_> + + + + <_>15 13 1 6 -1. + <_>15 16 1 3 2. + 0 + -2.9695429475395940e-005 + 1 + 0.4269422888755798 + <_> + + + + <_>13 14 2 6 -1. + <_>13 16 2 2 3. + 0 + 2.7050738572143018e-004 + 0.4306466877460480 + 0.5810514092445374 + <_> + + <_> + + + + <_>4 11 5 6 -1. + <_>4 14 5 3 2. + 0 + -7.9626210208516568e-005 + 1 + 0.3669143021106720 + <_> + + + + <_>4 17 4 2 -1. + <_>6 17 2 2 2. + 0 + 3.3152441028505564e-004 + 0.4610663950443268 + 0.6290590167045593 + <_> + + <_> + + + + <_>0 6 20 2 -1. + <_>0 6 10 2 2. + 0 + -0.0523058287799358 + 1 + 0.5328689813613892 + <_> + + + + <_>6 5 10 12 -1. + <_>11 5 5 6 2. + <_>6 11 5 6 2. + 0 + 0.0268804691731930 + 0.5213261246681213 + 0.3231219947338104 + <_> + + <_> + + + + <_>4 0 2 12 -1. + <_>4 0 1 6 2. + <_>5 6 1 6 2. + 0 + -2.4203000066336244e-004 + 1 + 0.3568570017814636 + <_> + + + + <_>4 1 6 2 -1. + <_>6 1 2 2 3. + 0 + -1.6424639616161585e-003 + 0.3440661132335663 + 0.5625604987144470 + <_> + + <_> + + + + <_>13 7 2 1 -1. + <_>13 7 1 1 2. + 0 + -2.6830288697965443e-004 + 1 + 0.4561173021793366 + <_> + + + + <_>5 5 15 6 -1. + <_>5 7 15 2 3. + 0 + -2.2649629972875118e-003 + 0.5321351885795593 + 0.3674154877662659 + <_> + + <_> + + + + <_>1 10 18 2 -1. + <_>1 10 9 1 2. + <_>10 11 9 1 2. + 0 + 0.0156272090971470 + 1 + 0.2029353976249695 + <_> + + + + <_>1 6 15 7 -1. + <_>6 6 5 7 3. + 0 + 0.1621132045984268 + 0.5563033223152161 + 0.2618849873542786 + <_> + + <_> + + + + <_>8 14 4 3 -1. + <_>8 15 4 1 3. + 0 + -3.7391691002994776e-003 + 0.6062194705009460 + 1 + <_> + + + + <_>9 14 3 3 -1. + <_>9 15 3 1 3. + 0 + -2.0878419745713472e-003 + 0.5950763821601868 + 0.4545117020606995 + <_> + + <_> + + + + <_>8 14 4 3 -1. + <_>8 15 4 1 3. + 0 + 2.3334210272878408e-003 + 1 + 0.6435524225234985 + <_> + + + + <_>8 13 3 2 -1. + <_>8 14 3 1 2. + 0 + 6.5116386394947767e-005 + 0.3520734012126923 + 0.5179778933525085 + <_> + + <_> + + + + <_>15 14 5 3 -1. + <_>15 15 5 1 3. + 0 + 7.4625718407332897e-003 + 0.5326688289642334 + 1 + <_> + + + + <_>0 14 20 1 -1. + <_>0 14 10 1 2. + 0 + -0.0220326893031597 + 0.3491981029510498 + 0.5429236888885498 + <_> + + <_> + + + + <_>0 14 6 3 -1. + <_>0 15 6 1 3. + 0 + -8.3081610500812531e-003 + 0.2084023058414459 + 1 + <_> + + + + <_>5 3 4 2 -1. + <_>5 4 4 1 2. + 0 + -4.3259368976578116e-004 + 0.3965272009372711 + 0.5425453782081604 + <_> + + <_> + + + + <_>0 6 20 1 -1. + <_>0 6 10 1 2. + 0 + -0.0322092287242413 + 1 + 0.5306411981582642 + <_> + + + + <_>6 3 10 14 -1. + <_>11 3 5 7 2. + <_>6 10 5 7 2. + 0 + -9.0424838708713651e-004 + 0.5450385808944702 + 0.4256696999073029 + <_> + + <_> + + + + <_>8 12 4 2 -1. + <_>8 13 4 1 2. + 0 + 2.2727500181645155e-003 + 1 + 0.5968611240386963 + <_> + + + + <_>6 3 8 6 -1. + <_>6 3 4 3 2. + <_>10 6 4 3 2. + 0 + 5.9820008464157581e-003 + 0.4758140146732330 + 0.3150944113731384 + <_> + + <_> + + + + <_>13 7 2 1 -1. + <_>13 7 1 1 2. + 0 + -5.8856618124991655e-004 + 1 + 0.4847748875617981 + <_> + + + + <_>6 3 10 14 -1. + <_>11 3 5 7 2. + <_>6 10 5 7 2. + 0 + -8.8227191008627415e-004 + 0.5426316261291504 + 0.4338341057300568 + <_> + + <_> + + + + <_>5 7 2 1 -1. + <_>6 7 1 1 2. + 0 + -7.4473457061685622e-005 + 1 + 0.4287509918212891 + <_> + + + + <_>4 3 10 14 -1. + <_>4 3 5 7 2. + <_>9 10 5 7 2. + 0 + 3.9148979703895748e-004 + 0.6345185041427612 + 0.4101851880550385 + <_> + + <_> + + + + <_>9 7 2 2 -1. + <_>9 7 1 2 2. + 0 + -3.6939629353582859e-003 + 1 + 0.4849104881286621 + <_> + + + + <_>0 3 20 1 -1. + <_>0 3 10 1 2. + 0 + -0.0112078497186303 + 0.4146336913108826 + 0.5471264123916626 + <_> + + <_> + + + + <_>2 1 10 3 -1. + <_>2 2 10 1 3. + 0 + -0.0103374095633626 + 0.2877183854579926 + 1 + <_> + + + + <_>9 7 2 2 -1. + <_>10 7 1 2 2. + 0 + 3.6883640568703413e-003 + 0.5101901888847351 + 0.7216951251029968 + <_> + + <_> + + + + <_>9 17 3 2 -1. + <_>10 17 1 2 3. + 0 + -3.8984280545264482e-003 + 1 + 0.5276182293891907 + <_> + + + + <_>9 7 3 6 -1. + <_>10 7 1 6 3. + 0 + -5.9986729174852371e-003 + 0.6618459820747376 + 0.4841631054878235 + <_> + + <_> + + + + <_>8 17 3 2 -1. + <_>9 17 1 2 3. + 0 + 4.5043681748211384e-003 + 1 + 0.1874157935380936 + <_> + + + + <_>8 7 3 6 -1. + <_>9 7 1 6 3. + 0 + 0.0177995301783085 + 0.4616934955120087 + 0.7088965773582459 + <_> + + <_> + + + + <_>16 3 4 6 -1. + <_>16 5 4 2 3. + 0 + -0.0184625703841448 + 0.3001979887485504 + 1 + <_> + + + + <_>15 6 2 12 -1. + <_>16 6 1 6 2. + <_>15 12 1 6 2. + 0 + 1.4931300029275008e-005 + 0.4561808109283447 + 0.5610787868499756 + <_> + + <_> + + + + <_>1 4 18 10 -1. + <_>1 4 9 5 2. + <_>10 9 9 5 2. + 0 + -0.0860212296247482 + 0.2341700941324234 + 1 + <_> + + + + <_>9 4 2 4 -1. + <_>9 6 2 2 2. + 0 + -6.0818758356617764e-005 + 0.5672286152839661 + 0.4199964106082916 + <_> + + <_> + + + + <_>12 5 3 2 -1. + <_>12 6 3 1 2. + 0 + 1.2670679716393352e-003 + 1 + 0.6207482218742371 + <_> + + + + <_>5 12 10 4 -1. + <_>5 14 10 2 2. + 0 + 1.3699879636988044e-003 + 0.5394958853721619 + 0.3823862969875336 + <_> + + <_> + + + + <_>5 5 3 2 -1. + <_>5 6 3 1 2. + 0 + 3.3162781037390232e-003 + 1 + 0.7061681151390076 + <_> + + + + <_>4 6 12 6 -1. + <_>8 6 4 6 3. + 0 + -1.4532039640471339e-003 + 0.3065513074398041 + 0.4827373027801514 + <_> + + <_> + + + + <_>14 4 6 6 -1. + <_>14 6 6 2 3. + 0 + -0.0714920610189438 + 1 + 0.5193122029304504 + <_> + + + + <_>16 0 4 6 -1. + <_>18 0 2 3 2. + <_>16 3 2 3 2. + 0 + 1.9857978913933039e-003 + 0.4642435014247894 + 0.5807694792747498 + <_> + + <_> + + + + <_>0 4 6 6 -1. + <_>0 6 6 2 3. + 0 + 6.2516499310731888e-003 + 1 + 0.2949813902378082 + <_> + + + + <_>0 0 4 6 -1. + <_>0 0 2 3 2. + <_>2 3 2 3 2. + 0 + 2.7005500160157681e-003 + 0.4585886895656586 + 0.6022353768348694 + <_> + + <_> + + + + <_>12 0 8 5 -1. + <_>12 0 4 5 2. + 0 + 0.0111303897574544 + 0.4357841014862061 + 1 + <_> + + + + <_>16 0 4 17 -1. + <_>16 0 2 17 2. + 0 + 0.0150928497314453 + 0.4561539888381958 + 0.6119061708450317 + <_> + + <_> + + + + <_>1 0 18 20 -1. + <_>7 0 6 20 3. + 0 + -0.0279433000832796 + 0.6537144184112549 + 1 + <_> + + + + <_>6 0 2 5 -1. + <_>7 0 1 5 2. + 0 + 4.4036991312168539e-005 + 0.3474723100662231 + 0.5336967706680298 + <_> + + <_> + + + + <_>0 6 20 1 -1. + <_>0 6 10 1 2. + 0 + -0.0122327702119946 + 0.3731676042079926 + 1 + <_> + + + + <_>8 7 6 4 -1. + <_>10 7 2 4 3. + 0 + -6.8591412855312228e-004 + 0.5717229247093201 + 0.4793379008769989 + <_> + + <_> + + + + <_>1 1 16 4 -1. + <_>1 1 8 2 2. + <_>9 3 8 2 2. + 0 + -3.8992990739643574e-003 + 0.4056436121463776 + 1 + <_> + + + + <_>7 2 4 2 -1. + <_>7 2 2 1 2. + <_>9 3 2 1 2. + 0 + 4.9113907152786851e-004 + 0.6174048185348511 + 0.4471754133701325 + <_> + + <_> + + + + <_>7 4 9 3 -1. + <_>7 5 9 1 3. + 0 + 8.2117747515439987e-003 + 1 + 0.6179698109626770 + <_> + + + + <_>10 4 5 12 -1. + <_>10 10 5 6 2. + 0 + -0.0455644801259041 + 0.2285494953393936 + 0.5249565839767456 + <_> + + <_> + + + + <_>3 12 2 3 -1. + <_>3 13 2 1 3. + 0 + -5.3631910122931004e-003 + 0.1784950047731400 + 1 + <_> + + + + <_>8 8 3 5 -1. + <_>9 8 1 5 3. + 0 + -0.0122749703004956 + 0.7261952757835388 + 0.4550398886203766 + <_> + + <_> + + + + <_>13 9 2 3 -1. + <_>13 9 1 3 2. + 0 + 5.4185991175472736e-003 + 0.5252990722656250 + 1 + <_> + + + + <_>15 11 2 2 -1. + <_>15 12 2 1 2. + 0 + 8.1846961984410882e-004 + 0.5445222258567810 + 0.3272218108177185 + <_> + + <_> + + + + <_>5 6 2 3 -1. + <_>5 7 2 1 3. + 0 + 4.1358140297234058e-003 + 1 + 0.7013831734657288 + <_> + + + + <_>2 11 6 2 -1. + <_>2 12 6 1 2. + 0 + 3.9578010910190642e-004 + 0.4965943992137909 + 0.3295598030090332 + <_> + + <_> + + + + <_>15 11 4 3 -1. + <_>15 12 4 1 3. + 0 + 4.6887691132724285e-003 + 0.5362641811370850 + 1 + <_> + + + + <_>16 0 4 17 -1. + <_>16 0 2 17 2. + 0 + -0.0182554405182600 + 0.6496108770370483 + 0.4757137000560761 + <_> + + <_> + + + + <_>1 11 4 3 -1. + <_>1 12 4 1 3. + 0 + -6.2736468389630318e-003 + 0.2343741059303284 + 1 + <_> + + + + <_>9 11 1 3 -1. + <_>9 12 1 1 3. + 0 + 2.4320168886333704e-003 + 0.4620118141174316 + 0.6898419260978699 + <_> + + <_> + + + + <_>10 9 6 7 -1. + <_>10 9 3 7 2. + 0 + -0.0496176294982433 + 0.2100719958543778 + 1 + <_> + + + + <_>8 15 4 2 -1. + <_>8 16 4 1 2. + 0 + 1.1701210169121623e-003 + 0.4621528983116150 + 0.5797135829925537 + <_> + + <_> + + + + <_>4 9 6 7 -1. + <_>7 9 3 7 2. + 0 + -0.0452372916042805 + 0.2118262052536011 + 1 + <_> + + + + <_>9 14 2 3 -1. + <_>9 15 2 1 3. + 0 + 4.7563421539962292e-003 + 0.4884614944458008 + 0.6872498989105225 + <_> + + <_> + + + + <_>0 2 20 2 -1. + <_>10 2 10 1 2. + <_>0 3 10 1 2. + 0 + -0.0148359695449471 + 1 + 0.5275105834007263 + <_> + + + + <_>6 7 8 2 -1. + <_>6 8 8 1 2. + 0 + 7.7436608262360096e-004 + 0.4172320961952210 + 0.5491139888763428 + <_> + + <_> + + + + <_>0 2 20 2 -1. + <_>0 2 10 1 2. + <_>10 3 10 1 2. + 0 + 0.0148359695449471 + 1 + 0.2124876976013184 + <_> + + + + <_>3 1 2 10 -1. + <_>3 1 1 5 2. + <_>4 6 1 5 2. + 0 + -8.0892542609944940e-004 + 0.5495215058326721 + 0.4207795858383179 + <_> + + <_> + + + + <_>13 4 1 10 -1. + <_>13 9 1 5 2. + 0 + 7.7517668250948191e-004 + 0.3321942090988159 + 1 + <_> + + + + <_>9 8 4 3 -1. + <_>9 9 4 1 3. + 0 + -6.7618978209793568e-003 + 0.2212958037853241 + 0.5232653021812439 + <_> + + <_> + + + + <_>2 11 16 4 -1. + <_>2 11 8 2 2. + <_>10 13 8 2 2. + 0 + -0.0401358604431152 + 0.1101796030998230 + 1 + <_> + + + + <_>5 1 3 5 -1. + <_>6 1 1 5 3. + 0 + -3.3651469275355339e-003 + 0.3810100853443146 + 0.5617291927337647 + <_> + + <_> + + + + <_>9 10 2 3 -1. + <_>9 11 2 1 3. + 0 + 7.4713007779791951e-004 + 1 + 0.5795056819915772 + <_> + + + + <_>9 11 2 2 -1. + <_>9 12 2 1 2. + 0 + -4.2727389372885227e-003 + 0.6392269134521484 + 0.4711438119411469 + <_> + + <_> + + + + <_>0 10 20 2 -1. + <_>0 11 20 1 2. + 0 + 3.6202510818839073e-003 + 1 + 0.3409883975982666 + <_> + + + + <_>1 7 6 4 -1. + <_>1 7 3 2 2. + <_>4 9 3 2 2. + 0 + 4.7307618660852313e-004 + 0.3659302890300751 + 0.5388171076774597 + <_> + + <_> + + + + <_>12 0 8 8 -1. + <_>16 0 4 4 2. + <_>12 4 4 4 2. + 0 + 0.0330949090421200 + 1 + 0.7170385718345642 + <_> + + + + <_>14 1 6 4 -1. + <_>16 1 2 4 3. + 0 + -0.0115441195666790 + 0.6386818289756775 + 0.4681304097175598 + <_> + + <_> + + + + <_>6 3 2 14 -1. + <_>6 10 2 7 2. + 0 + -7.4234469793736935e-003 + 0.3263700902462006 + 1 + <_> + + + + <_>6 1 7 12 -1. + <_>6 7 7 6 2. + 0 + -4.2252950370311737e-003 + 0.5767819285392761 + 0.4346418082714081 + <_> + + <_> + + + + <_>5 0 15 5 -1. + <_>10 0 5 5 3. + 0 + 0.0181331094354391 + 0.4697827994823456 + 1 + <_> + + + + <_>15 0 4 10 -1. + <_>15 0 2 10 2. + 0 + 7.0903049781918526e-003 + 0.4437389075756073 + 0.6061668992042542 + <_> + + <_> + + + + <_>1 0 18 3 -1. + <_>7 0 6 3 3. + 0 + -0.0132729401811957 + 0.6558511257171631 + 1 + <_> + + + + <_>0 0 17 2 -1. + <_>0 1 17 1 2. + 0 + 1.4632199599873275e-004 + 0.3376353979110718 + 0.5091655254364014 + <_> + + <_> + + + + <_>10 0 3 3 -1. + <_>11 0 1 3 3. + 0 + -3.5790191031992435e-003 + 0.2947883903980255 + 1 + <_> + + + + <_>10 0 3 12 -1. + <_>11 0 1 12 3. + 0 + -4.6997101162560284e-004 + 0.5556982159614563 + 0.4665456116199493 + <_> + + <_> + + + + <_>1 3 4 16 -1. + <_>1 3 2 8 2. + <_>3 11 2 8 2. + 0 + -0.0481794402003288 + 0.7338355779647827 + 1 + <_> + + + + <_>7 0 3 3 -1. + <_>8 0 1 3 3. + 0 + -9.2581362696364522e-004 + 0.3543871939182282 + 0.5285149812698364 + <_> + + <_> + + + + <_>9 13 2 6 -1. + <_>9 16 2 3 2. + 0 + -0.0147807300090790 + 0.1944441944360733 + 1 + <_> + + + + <_>9 0 6 13 -1. + <_>11 0 2 13 3. + 0 + -0.1002745032310486 + 0.0990492925047874 + 0.5139853954315186 + <_> + + <_> + + + + <_>7 7 3 2 -1. + <_>8 7 1 2 3. + 0 + -9.3848101096227765e-004 + 0.5827109813690186 + 1 + <_> + + + + <_>8 2 1 12 -1. + <_>8 6 1 4 3. + 0 + -2.8861360624432564e-003 + 0.3441427946090698 + 0.5148838758468628 + <_> + + <_> + + + + <_>4 10 12 6 -1. + <_>10 10 6 3 2. + <_>4 13 6 3 2. + 0 + -0.0436827614903450 + 1 + 0.5207998156547546 + <_> + + + + <_>13 5 2 3 -1. + <_>13 6 2 1 3. + 0 + 2.6115700602531433e-003 + 0.4835503101348877 + 0.6322219967842102 + <_> + + <_> + + + + <_>4 10 12 6 -1. + <_>4 10 6 3 2. + <_>10 13 6 3 2. + 0 + 0.0436827614903450 + 1 + 0.1364538073539734 + <_> + + + + <_>5 5 2 3 -1. + <_>5 6 2 1 3. + 0 + 1.7179530113935471e-003 + 0.4537320137023926 + 0.6066750884056091 + <_> + + <_> + + + + <_>8 6 6 7 -1. + <_>10 6 2 7 3. + 0 + -0.0339649096131325 + 1 + 0.4968374967575073 + <_> + + + + <_>9 6 2 4 -1. + <_>9 6 1 4 2. + 0 + -1.0993590112775564e-003 + 0.5831680893898010 + 0.4688239991664887 + <_> + + <_> + + + + <_>6 6 6 7 -1. + <_>8 6 2 7 3. + 0 + 0.0543010793626308 + 1 + 0.7568289041519165 + <_> + + + + <_>9 6 2 4 -1. + <_>10 6 1 4 2. + 0 + 1.0993590112775564e-003 + 0.4330148100852966 + 0.5768468976020813 + <_> + + <_> + + + + <_>12 9 2 3 -1. + <_>12 9 1 3 2. + 0 + -1.4954120160837192e-005 + 1 + 0.4443281888961792 + <_> + + + + <_>0 6 20 1 -1. + <_>0 6 10 1 2. + 0 + 0.0314158685505390 + 0.5274472832679749 + 0.3037855923175812 + <_> + + <_> + + + + <_>5 7 10 2 -1. + <_>10 7 5 2 2. + 0 + 0.0108318496495485 + 1 + 0.3581720888614655 + <_> + + + + <_>1 16 4 3 -1. + <_>1 17 4 1 3. + 0 + 8.6545711383223534e-004 + 0.5937584042549133 + 0.4294629991054535 + <_> + + <_> + + + + <_>12 4 3 3 -1. + <_>12 5 3 1 3. + 0 + 2.2743160370737314e-003 + 1 + 0.5954576730728149 + <_> + + + + <_>10 3 5 3 -1. + <_>10 4 5 1 3. + 0 + 3.9340821094810963e-003 + 0.4792222976684570 + 0.5856133103370667 + <_> + + <_> + + + + <_>3 9 14 8 -1. + <_>3 9 7 4 2. + <_>10 13 7 4 2. + 0 + 8.1451907753944397e-003 + 1 + 0.3573477864265442 + <_> + + + + <_>6 8 8 10 -1. + <_>6 8 4 5 2. + <_>10 13 4 5 2. + 0 + -5.2763288840651512e-003 + 0.4026022851467133 + 0.5764743089675903 + <_> + + <_> + + + + <_>12 4 3 3 -1. + <_>12 5 3 1 3. + 0 + -8.3787851035594940e-003 + 1 + 0.4981333017349243 + <_> + + + + <_>10 3 5 3 -1. + <_>10 4 5 1 3. + 0 + 1.5621910570189357e-003 + 0.4736588001251221 + 0.5583608150482178 + <_> + + <_> + + + + <_>5 4 3 3 -1. + <_>5 5 3 1 3. + 0 + 3.2318739686161280e-003 + 1 + 0.6167436838150024 + <_> + + + + <_>5 3 5 3 -1. + <_>5 4 5 1 3. + 0 + 6.6804019734263420e-003 + 0.4131424129009247 + 0.6280695199966431 + <_> + + <_> + + + + <_>13 16 2 3 -1. + <_>13 17 2 1 3. + 0 + -3.3396480139344931e-003 + 0.3446358144283295 + 1 + <_> + + + + <_>0 5 20 6 -1. + <_>0 7 20 2 3. + 0 + -0.2093348056077957 + 0.1038658022880554 + 0.5204489231109619 + <_> + + <_> + + + + <_>3 14 3 3 -1. + <_>3 15 3 1 3. + 0 + 6.3805822283029556e-003 + 1 + 0.2167402058839798 + <_> + + + + <_>7 15 5 3 -1. + <_>7 16 5 1 3. + 0 + -6.0137799009680748e-003 + 0.6738399267196655 + 0.4896650910377502 + <_> + + <_> + + + + <_>12 9 2 3 -1. + <_>12 9 1 3 2. + 0 + -8.1756077706813812e-003 + 1 + 0.5177915096282959 + <_> + + + + <_>15 13 2 6 -1. + <_>15 13 1 6 2. + 0 + 6.3951779156923294e-004 + 0.4819645881652832 + 0.5464438199996948 + <_> + + <_> + + + + <_>6 9 2 3 -1. + <_>7 9 1 3 2. + 0 + 1.0127760469913483e-003 + 1 + 0.3423596024513245 + <_> + + + + <_>3 13 2 6 -1. + <_>4 13 1 6 2. + 0 + 4.9784599104896188e-004 + 0.4488461017608643 + 0.5912671089172363 + <_> + + <_> + + + + <_>11 4 2 4 -1. + <_>11 4 1 4 2. + 0 + 1.3596490316558629e-004 + 1 + 0.5568863153457642 + <_> + + + + <_>13 4 2 5 -1. + <_>13 4 1 5 2. + 0 + 0.0135716600343585 + 0.5161067843437195 + 0.1713000982999802 + <_> + + <_> + + + + <_>7 4 2 4 -1. + <_>8 4 1 4 2. + 0 + 3.0259079721872695e-005 + 1 + 0.4916203916072846 + <_> + + + + <_>5 4 2 5 -1. + <_>6 4 1 5 2. + 0 + -3.2625840976834297e-003 + 0.6404662728309631 + 0.2859084904193878 + <_> + + <_> + + + + <_>19 6 1 2 -1. + <_>19 7 1 1 2. + 0 + -1.9217010412830859e-004 + 1 + 0.5459282994270325 + <_> + + + + <_>12 7 8 13 -1. + <_>12 7 4 13 2. + 0 + 0.0219938792288303 + 0.4715713858604431 + 0.5690075159072876 + <_> + + <_> + + + + <_>0 6 1 2 -1. + <_>0 7 1 1 2. + 0 + 7.8907777788117528e-004 + 1 + 0.3279826939105988 + <_> + + + + <_>6 15 4 3 -1. + <_>6 16 4 1 3. + 0 + 5.0893891602754593e-004 + 0.4302007853984833 + 0.5696045160293579 + <_> + + <_> + + + + <_>11 8 2 2 -1. + <_>11 9 2 1 2. + 0 + 1.1662710312521085e-004 + 1 + 0.5387235283851624 + <_> + + + + <_>11 7 2 4 -1. + <_>11 7 1 4 2. + 0 + 8.0604078248143196e-003 + 0.5021423101425171 + 0.5965322256088257 + <_> + + <_> + + + + <_>4 13 2 3 -1. + <_>4 14 2 1 3. + 0 + 9.5925969071686268e-004 + 1 + 0.3473494052886963 + <_> + + + + <_>0 17 18 3 -1. + <_>6 17 6 3 3. + 0 + -0.0195261295884848 + 0.6475545167922974 + 0.4643782079219818 + 36.7265014648437500 + 13 + -1 + <_> + + + <_> + + <_> + + + + <_>1 0 18 5 -1. + <_>7 0 6 5 3. + 0 + 0.0412424392998219 + 0.3393315076828003 + 1 + <_> + + + + <_>5 7 3 4 -1. + <_>5 9 3 2 2. + 0 + 0.0156267099082470 + 0.5104100108146668 + 0.7772815227508545 + <_> + + <_> + + + + <_>10 6 2 2 -1. + <_>10 6 1 2 2. + 0 + 2.9947189614176750e-004 + 0.3664673864841461 + 1 + <_> + + + + <_>6 4 14 4 -1. + <_>13 4 7 2 2. + <_>6 6 7 2 2. + 0 + -1.0037609608843923e-003 + 0.5405650734901428 + 0.3926205039024353 + <_> + + <_> + + + + <_>5 16 6 4 -1. + <_>5 16 3 2 2. + <_>8 18 3 2 2. + 0 + 6.8128242855891585e-004 + 0.4251519143581390 + 1 + <_> + + + + <_>7 15 2 4 -1. + <_>7 17 2 2 2. + 0 + 1.3098999625071883e-004 + 0.4135144948959351 + 0.6925746202468872 + <_> + + <_> + + + + <_>8 5 5 14 -1. + <_>8 12 5 7 2. + 0 + 3.1696720980107784e-003 + 1 + 0.3455873131752014 + <_> + + + + <_>9 9 2 2 -1. + <_>9 10 2 1 2. + 0 + -2.0587369799613953e-003 + 0.2234193980693817 + 0.5286118984222412 + <_> + + <_> + + + + <_>7 5 3 7 -1. + <_>8 5 1 7 3. + 0 + -4.6395038953050971e-004 + 1 + 0.4206520020961762 + <_> + + + + <_>0 0 3 9 -1. + <_>0 3 3 3 3. + 0 + 3.5089480224996805e-003 + 0.6502981781959534 + 0.4117597937583923 + <_> + + <_> + + + + <_>8 6 8 8 -1. + <_>12 6 4 4 2. + <_>8 10 4 4 2. + 0 + -2.3975980002433062e-003 + 1 + 0.3673301041126251 + <_> + + + + <_>4 8 13 2 -1. + <_>4 9 13 1 2. + 0 + 1.0901279747486115e-003 + 0.2906238138675690 + 0.5445111989974976 + <_> + + <_> + + + + <_>4 3 6 1 -1. + <_>6 3 2 1 3. + 0 + -1.6524370585102588e-004 + 0.4233515858650208 + 1 + <_> + + + + <_>9 1 2 6 -1. + <_>9 3 2 2 3. + 0 + -4.1602319106459618e-004 + 0.3886361122131348 + 0.6269165873527527 + <_> + + <_> + + + + <_>10 5 6 4 -1. + <_>12 5 2 4 3. + 0 + -2.3739910102449358e-004 + 0.5524451136589050 + 1 + <_> + + + + <_>9 5 2 12 -1. + <_>9 9 2 4 3. + 0 + 0.0247397609055042 + 0.4960095882415772 + 0.5373491048812866 + <_> + + <_> + + + + <_>8 14 4 3 -1. + <_>8 15 4 1 3. + 0 + -0.0153428399935365 + 0.6849405169487000 + 1 + <_> + + + + <_>8 12 4 3 -1. + <_>8 13 4 1 3. + 0 + 0.0115404697135091 + 0.4037235081195831 + 0.6786940097808838 + <_> + + <_> + + + + <_>10 3 6 7 -1. + <_>12 3 2 7 3. + 0 + 6.4230621792376041e-003 + 1 + 0.3814676105976105 + <_> + + + + <_>3 10 16 6 -1. + <_>3 12 16 2 3. + 0 + 0.0129778096452355 + 0.5527058839797974 + 0.3744955956935883 + <_> + + <_> + + + + <_>5 5 3 10 -1. + <_>5 10 3 5 2. + 0 + 1.1063399724662304e-003 + 0.3520928919315338 + 1 + <_> + + + + <_>6 10 3 6 -1. + <_>6 13 3 3 2. + 0 + 1.3743690215051174e-003 + 0.5641903281211853 + 0.3075025975704193 + <_> + + <_> + + + + <_>17 2 2 12 -1. + <_>17 2 1 12 2. + 0 + 0.0162337794899940 + 0.4888828098773956 + 1 + <_> + + + + <_>16 6 2 14 -1. + <_>16 13 2 7 2. + 0 + -8.1519351806491613e-004 + 0.5456321239471436 + 0.4743550121784210 + <_> + + <_> + + + + <_>3 11 12 9 -1. + <_>3 14 12 3 3. + 0 + -0.0907824933528900 + 0.2925248146057129 + 1 + <_> + + + + <_>0 2 4 12 -1. + <_>2 2 2 12 2. + 0 + 0.0116652101278305 + 0.4688454866409302 + 0.6230347752571106 + <_> + + <_> + + + + <_>18 0 2 18 -1. + <_>18 0 1 18 2. + 0 + -0.0232864096760750 + 0.6895843148231506 + 1 + <_> + + + + <_>16 12 3 2 -1. + <_>16 13 3 1 2. + 0 + 2.1559339947998524e-003 + 0.5355802178382874 + 0.3423466086387634 + <_> + + <_> + + + + <_>0 2 2 15 -1. + <_>1 2 1 15 2. + 0 + -4.3167220428586006e-003 + 0.5937076210975647 + 1 + <_> + + + + <_>1 10 2 4 -1. + <_>1 12 2 2 2. + 0 + 1.5610599657520652e-003 + 0.4708659946918488 + 0.2736997008323669 + <_> + + <_> + + + + <_>11 1 2 18 -1. + <_>11 1 1 18 2. + 0 + 0.0140766398981214 + 0.5287156105041504 + 1 + <_> + + + + <_>3 2 14 2 -1. + <_>10 2 7 1 2. + <_>3 3 7 1 2. + 0 + 7.1018589660525322e-003 + 0.5336192846298218 + 0.3224813938140869 + <_> + + <_> + + + + <_>7 1 2 18 -1. + <_>8 1 1 18 2. + 0 + -4.8221647739410400e-003 + 0.2983910143375397 + 1 + <_> + + + + <_>6 1 8 12 -1. + <_>6 7 8 6 2. + 0 + -5.3852899000048637e-003 + 0.5623999238014221 + 0.4295912086963654 + <_> + + <_> + + + + <_>8 14 4 3 -1. + <_>8 15 4 1 3. + 0 + 7.3483278974890709e-003 + 1 + 0.6813961267471314 + <_> + + + + <_>7 14 6 3 -1. + <_>7 15 6 1 3. + 0 + -3.5707519855350256e-003 + 0.5857968926429749 + 0.4603429138660431 + <_> + + <_> + + + + <_>0 13 5 2 -1. + <_>0 14 5 1 2. + 0 + 2.3340100888162851e-003 + 1 + 0.2744851112365723 + <_> + + + + <_>9 0 2 6 -1. + <_>9 0 1 3 2. + <_>10 3 1 3 2. + 0 + 4.7432780265808105e-003 + 0.5047526955604553 + 0.2362741976976395 + <_> + + <_> + + + + <_>9 0 2 6 -1. + <_>10 0 1 3 2. + <_>9 3 1 3 2. + 0 + 6.5055489540100098e-003 + 0.5242248177528381 + 1 + <_> + + + + <_>9 7 3 6 -1. + <_>10 7 1 6 3. + 0 + 0.0125892497599125 + 0.4823690950870514 + 0.6752536892890930 + <_> + + <_> + + + + <_>9 0 2 6 -1. + <_>9 0 1 3 2. + <_>10 3 1 3 2. + 0 + -6.3358368352055550e-003 + 0.1734634935855866 + 1 + <_> + + + + <_>8 7 3 6 -1. + <_>9 7 1 6 3. + 0 + -5.7639651931822300e-003 + 0.6354380846023560 + 0.4587475061416626 + <_> + + <_> + + + + <_>9 6 2 6 -1. + <_>9 6 1 6 2. + 0 + 1.3599749654531479e-003 + 0.4580380916595459 + 1 + <_> + + + + <_>9 4 4 3 -1. + <_>9 4 2 3 2. + 0 + 0.0284042600542307 + 0.5176380872726440 + 0.1204385012388229 + <_> + + <_> + + + + <_>0 4 4 3 -1. + <_>0 5 4 1 3. + 0 + -9.2958156019449234e-003 + 0.2337957024574280 + 1 + <_> + + + + <_>8 7 4 2 -1. + <_>8 8 4 1 2. + 0 + -1.1800320353358984e-003 + 0.3902814090251923 + 0.5652930140495300 + <_> + + <_> + + + + <_>10 6 6 3 -1. + <_>12 6 2 3 3. + 0 + -2.0948140881955624e-003 + 0.5512028932571411 + 1 + <_> + + + + <_>9 6 3 12 -1. + <_>9 10 3 4 3. + 0 + 4.1679958812892437e-003 + 0.5455976128578186 + 0.4798949062824249 + <_> + + <_> + + + + <_>5 4 2 3 -1. + <_>5 5 2 1 3. + 0 + 5.4458891972899437e-003 + 1 + 0.6127086877822876 + <_> + + + + <_>5 6 1 3 -1. + <_>5 7 1 1 3. + 0 + -1.2766510481014848e-003 + 0.5317131876945496 + 0.3850932121276856 + <_> + + <_> + + + + <_>9 17 3 2 -1. + <_>10 17 1 2 3. + 0 + 5.9404270723462105e-004 + 0.5446437001228333 + 1 + <_> + + + + <_>0 7 20 2 -1. + <_>0 8 20 1 2. + 0 + 0.0423096083104610 + 0.5234643816947937 + 0.2213044017553330 + <_> + + <_> + + + + <_>4 3 6 7 -1. + <_>6 3 2 7 3. + 0 + 5.6189671158790588e-003 + 0.4916197955608368 + 1 + <_> + + + + <_>5 10 6 10 -1. + <_>5 10 3 5 2. + <_>8 15 3 5 2. + 0 + 7.2401198558509350e-003 + 0.1471475958824158 + 0.4852893948554993 + <_> + + <_> + + + + <_>9 17 3 2 -1. + <_>10 17 1 2 3. + 0 + -4.5610670931637287e-003 + 0.2773773968219757 + 1 + <_> + + + + <_>9 10 2 2 -1. + <_>9 11 2 1 2. + 0 + 4.5506159949582070e-005 + 0.4626461863517761 + 0.5768079161643982 + <_> + + <_> + + + + <_>8 17 3 2 -1. + <_>9 17 1 2 3. + 0 + -6.1903791502118111e-003 + 0.1644289940595627 + 1 + <_> + + + + <_>5 6 1 3 -1. + <_>5 7 1 1 3. + 0 + 8.1186462193727493e-004 + 0.4778591096401215 + 0.6261864900588989 + <_> + + <_> + + + + <_>0 1 20 2 -1. + <_>10 1 10 1 2. + <_>0 2 10 1 2. + 0 + 0.0137798096984625 + 0.5257307887077332 + 1 + <_> + + + + <_>14 2 6 9 -1. + <_>14 5 6 3 3. + 0 + 1.1290319962427020e-003 + 0.5498048067092896 + 0.3983106911182404 + <_> + + <_> + + + + <_>5 3 3 2 -1. + <_>5 4 3 1 2. + 0 + -1.0610350000206381e-004 + 0.4033519029617310 + 1 + <_> + + + + <_>5 4 4 2 -1. + <_>7 4 2 2 2. + 0 + 1.6695790691301227e-004 + 0.4149340093135834 + 0.5795341134071350 + <_> + + <_> + + + + <_>14 2 6 9 -1. + <_>14 5 6 3 3. + 0 + 1.1290319962427020e-003 + 1 + 0.3934114873409271 + <_> + + + + <_>0 12 20 6 -1. + <_>0 14 20 2 3. + 0 + -0.1201934963464737 + 0.0734004825353622 + 0.5202586054801941 + <_> + + <_> + + + + <_>2 2 16 4 -1. + <_>2 2 8 2 2. + <_>10 4 8 2 2. + 0 + -0.0152307404205203 + 0.3749505877494812 + 1 + <_> + + + + <_>7 12 5 3 -1. + <_>7 13 5 1 3. + 0 + 3.5759829916059971e-003 + 0.5078150033950806 + 0.6606066226959229 + <_> + + <_> + + + + <_>14 9 6 10 -1. + <_>14 9 3 10 2. + 0 + 0.0134794600307941 + 0.4547711014747620 + 1 + <_> + + + + <_>16 6 3 2 -1. + <_>16 7 3 1 2. + 0 + -2.1162950433790684e-003 + 0.3311006128787994 + 0.5384259223937988 + <_> + + <_> + + + + <_>0 9 6 10 -1. + <_>3 9 3 10 2. + 0 + -0.0178777091205120 + 0.6513252854347229 + 1 + <_> + + + + <_>0 16 5 2 -1. + <_>0 17 5 1 2. + 0 + 1.0931970318779349e-003 + 0.5264765024185181 + 0.3456991016864777 + <_> + + <_> + + + + <_>9 12 2 3 -1. + <_>9 13 2 1 3. + 0 + -3.0553159303963184e-003 + 0.6268613934516907 + 1 + <_> + + + + <_>9 7 2 12 -1. + <_>9 11 2 4 3. + 0 + 3.6365049891173840e-003 + 0.5399212837219238 + 0.4345397055149078 + <_> + + <_> + + + + <_>3 2 6 2 -1. + <_>5 2 2 2 3. + 0 + 9.7896481747739017e-005 + 0.3835605978965759 + 1 + <_> + + + + <_>4 1 1 2 -1. + <_>4 2 1 1 2. + 0 + -3.2714448752813041e-004 + 0.3337667882442474 + 0.5539165735244751 + <_> + + <_> + + + + <_>11 15 1 2 -1. + <_>11 16 1 1 2. + 0 + 4.3425030889920890e-004 + 1 + 0.5788270235061646 + <_> + + + + <_>3 1 16 2 -1. + <_>11 1 8 1 2. + <_>3 2 8 1 2. + 0 + 0.0140055799856782 + 0.5275077819824219 + 0.2701125144958496 + <_> + + <_> + + + + <_>3 6 2 2 -1. + <_>3 6 1 1 2. + <_>4 7 1 1 2. + 0 + -9.2654931358993053e-004 + 0.5852280259132385 + 1 + <_> + + + + <_>5 11 10 6 -1. + <_>5 11 5 3 2. + <_>10 14 5 3 2. + 0 + 3.9504268206655979e-003 + 0.4728336930274963 + 0.3313918113708496 + <_> + + <_> + + + + <_>10 11 4 6 -1. + <_>10 14 4 3 2. + 0 + -5.8086868375539780e-004 + 1 + 0.4258810877799988 + <_> + + + + <_>14 9 6 11 -1. + <_>16 9 2 11 3. + 0 + -0.0120180202648044 + 0.5609787106513977 + 0.4895192086696625 + <_> + + <_> + + + + <_>0 9 6 11 -1. + <_>2 9 2 11 3. + 0 + -0.1452154070138931 + 0.0438944809138775 + 1 + <_> + + + + <_>2 11 16 6 -1. + <_>2 11 8 3 2. + <_>10 14 8 3 2. + 0 + -6.6049019806087017e-003 + 0.4229170978069305 + 0.5616292953491211 + <_> + + <_> + + + + <_>12 0 8 10 -1. + <_>16 0 4 5 2. + <_>12 5 4 5 2. + 0 + -0.0349097512662411 + 1 + 0.4788128137588501 + <_> + + + + <_>14 2 6 4 -1. + <_>16 2 2 4 3. + 0 + 3.7478420417755842e-003 + 0.4800282120704651 + 0.5801389217376709 + <_> + + <_> + + + + <_>0 0 8 10 -1. + <_>0 0 4 5 2. + <_>4 5 4 5 2. + 0 + 0.0330380313098431 + 1 + 0.7078176140785217 + <_> + + + + <_>0 2 6 4 -1. + <_>2 2 2 4 3. + 0 + 3.6872599739581347e-003 + 0.4449624121189117 + 0.5957731008529663 + <_> + + <_> + + + + <_>4 9 15 2 -1. + <_>9 9 5 2 3. + 0 + -4.5311939902603626e-003 + 0.4177047014236450 + 1 + <_> + + + + <_>12 3 4 8 -1. + <_>14 3 2 4 2. + <_>12 7 2 4 2. + 0 + 4.1058510541915894e-003 + 0.5372948050498962 + 0.3736926913261414 + <_> + + <_> + + + + <_>9 2 2 9 -1. + <_>10 2 1 9 2. + 0 + -8.7599847465753555e-003 + 0.6658807992935181 + 1 + <_> + + + + <_>0 2 20 1 -1. + <_>10 2 10 1 2. + 0 + -0.0230033099651337 + 0.2647922039031982 + 0.5101817846298218 + <_> + + <_> + + + + <_>16 1 4 5 -1. + <_>16 1 2 5 2. + 0 + 5.3664818406105042e-003 + 0.4548634886741638 + 1 + <_> + + + + <_>16 0 4 6 -1. + <_>16 3 4 3 2. + 0 + 0.0389717705547810 + 0.5157061815261841 + 0.3436439037322998 + <_> + + <_> + + + + <_>4 3 6 4 -1. + <_>6 3 2 4 3. + 0 + -0.0277671907097101 + 0.2354391068220139 + 1 + <_> + + + + <_>0 0 18 5 -1. + <_>6 0 6 5 3. + 0 + -9.8894089460372925e-003 + 0.6887741088867188 + 0.5111051797866821 + <_> + + <_> + + + + <_>6 2 12 14 -1. + <_>12 2 6 7 2. + <_>6 9 6 7 2. + 0 + -3.2073140610009432e-003 + 0.5438867807388306 + 1 + <_> + + + + <_>11 8 3 5 -1. + <_>12 8 1 5 3. + 0 + -6.7484978353604674e-004 + 0.5451148748397827 + 0.4831353127956390 + <_> + + <_> + + + + <_>5 12 2 2 -1. + <_>5 13 2 1 2. + 0 + -5.1947520114481449e-003 + 0.2113419026136398 + 1 + <_> + + + + <_>5 10 4 3 -1. + <_>7 10 2 3 2. + 0 + -2.6169899501837790e-004 + 0.5273681879043579 + 0.3992587029933929 + <_> + + <_> + + + + <_>4 9 15 2 -1. + <_>9 9 5 2 3. + 0 + 2.2421479225158691e-003 + 0.4688260853290558 + 1 + <_> + + + + <_>10 7 6 2 -1. + <_>12 7 2 2 3. + 0 + -1.2139769969508052e-003 + 0.5504235029220581 + 0.4384871125221252 + <_> + + <_> + + + + <_>1 9 15 2 -1. + <_>6 9 5 2 3. + 0 + -2.9469770379364491e-003 + 0.3892847001552582 + 1 + <_> + + + + <_>5 0 2 10 -1. + <_>5 0 1 5 2. + <_>6 5 1 5 2. + 0 + -3.9291830034926534e-004 + 0.6001722812652588 + 0.4561662971973419 + <_> + + <_> + + + + <_>0 0 20 14 -1. + <_>0 7 20 7 2. + 0 + 0.6255072951316834 + 1 + 0.0681256130337715 + <_> + + + + <_>12 7 8 4 -1. + <_>12 7 4 4 2. + 0 + 9.7744520753622055e-003 + 0.4813025891780853 + 0.5620657205581665 + <_> + + <_> + + + + <_>0 7 8 4 -1. + <_>4 7 4 4 2. + 0 + 0.0943782478570938 + 1 + 0.0666322931647301 + <_> + + + + <_>8 1 3 3 -1. + <_>9 1 1 3 3. + 0 + -1.9560910295695066e-003 + 0.3588232994079590 + 0.5295407176017761 + <_> + + <_> + + + + <_>9 7 3 4 -1. + <_>10 7 1 4 3. + 0 + 9.0652769431471825e-003 + 0.4822688102722168 + 1 + <_> + + + + <_>9 9 3 1 -1. + <_>10 9 1 1 3. + 0 + 4.2138071148656309e-004 + 0.4670332968235016 + 0.5683112740516663 + <_> + + <_> + + + + <_>8 9 3 2 -1. + <_>8 10 3 1 2. + 0 + -4.4220191193744540e-004 + 1 + 0.5360795259475708 + <_> + + + + <_>8 4 2 8 -1. + <_>8 4 1 4 2. + <_>9 8 1 4 2. + 0 + -4.7313501127064228e-003 + 0.6137245893478394 + 0.3188089132308960 + <_> + + <_> + + + + <_>5 8 12 3 -1. + <_>5 9 12 1 3. + 0 + 1.5395509544759989e-003 + 0.4487720131874085 + 1 + <_> + + + + <_>11 14 1 3 -1. + <_>11 15 1 1 3. + 0 + 2.4315000046044588e-003 + 0.4894166886806488 + 0.6716653704643250 + <_> + + <_> + + + + <_>6 10 3 6 -1. + <_>6 12 3 2 3. + 0 + -0.0155816199257970 + 0.3336741924285889 + 1 + <_> + + + + <_>4 17 8 3 -1. + <_>4 18 8 1 3. + 0 + 1.0816920548677444e-003 + 0.4718219935894013 + 0.5960627198219299 + <_> + + <_> + + + + <_>17 6 2 3 -1. + <_>17 7 2 1 3. + 0 + -2.2197659127414227e-003 + 0.3588554859161377 + 1 + <_> + + + + <_>9 12 2 2 -1. + <_>10 12 1 1 2. + <_>9 13 1 1 2. + 0 + -9.3048671260476112e-004 + 0.6218712925910950 + 0.4817300140857697 + <_> + + <_> + + + + <_>9 13 2 4 -1. + <_>9 13 1 2 2. + <_>10 15 1 2 2. + 0 + -4.7418707981705666e-003 + 0.2550027072429657 + 1 + <_> + + + + <_>9 11 2 3 -1. + <_>9 12 2 1 3. + 0 + -6.2950369901955128e-003 + 0.6728078722953796 + 0.5051063895225525 + <_> + + <_> + + + + <_>5 5 12 10 -1. + <_>11 5 6 5 2. + <_>5 10 6 5 2. + 0 + 3.5216049291193485e-003 + 0.5401909947395325 + 1 + <_> + + + + <_>6 3 12 12 -1. + <_>12 3 6 6 2. + <_>6 9 6 6 2. + 0 + -2.4289379362016916e-003 + 0.5419461727142334 + 0.4347142875194550 + <_> + + <_> + + + + <_>5 7 2 2 -1. + <_>5 7 1 1 2. + <_>6 8 1 1 2. + 0 + -2.5261470582336187e-003 + 0.6970624923706055 + 1 + <_> + + + + <_>4 3 3 2 -1. + <_>5 3 1 2 3. + 0 + -1.4817339833825827e-003 + 0.3263416886329651 + 0.4917873144149780 + <_> + + <_> + + + + <_>6 2 12 14 -1. + <_>12 2 6 7 2. + <_>6 9 6 7 2. + 0 + -0.2247453033924103 + 7.2937291115522385e-003 + 1 + <_> + + + + <_>5 2 12 3 -1. + <_>9 2 4 3 3. + 0 + 2.8342509176582098e-003 + 0.4579229950904846 + 0.5379881262779236 + <_> + + <_> + + + + <_>1 1 18 17 -1. + <_>7 1 6 17 3. + 0 + -0.0208216104656458 + 0.6024088859558106 + 1 + <_> + + + + <_>0 9 10 1 -1. + <_>5 9 5 1 2. + 0 + 1.4896340144332498e-004 + 0.3336144089698792 + 0.4962815940380096 + <_> + + <_> + + + + <_>16 8 4 3 -1. + <_>16 9 4 1 3. + 0 + -3.3524499740451574e-003 + 0.3558751046657562 + 1 + <_> + + + + <_>7 13 6 6 -1. + <_>7 16 6 3 2. + 0 + -0.0372798815369606 + 0.1698562949895859 + 0.5208985805511475 + <_> + + <_> + + + + <_>6 14 1 6 -1. + <_>6 16 1 2 3. + 0 + 1.3896770542487502e-004 + 1 + 0.5590686202049255 + <_> + + + + <_>6 17 4 2 -1. + <_>6 18 4 1 2. + 0 + -3.1912620761431754e-004 + 0.5848733782768250 + 0.3795836865901947 + <_> + + <_> + + + + <_>10 18 6 2 -1. + <_>13 18 3 1 2. + <_>10 19 3 1 2. + 0 + 5.4003461264073849e-004 + 1 + 0.5670288205146790 + <_> + + + + <_>16 8 1 3 -1. + <_>16 9 1 1 3. + 0 + 3.8956850767135620e-003 + 0.5182694792747498 + 0.3327709138393402 + <_> + + <_> + + + + <_>8 13 4 3 -1. + <_>8 14 4 1 3. + 0 + 1.6084529925137758e-003 + 1 + 0.5410485863685608 + <_> + + + + <_>9 15 1 2 -1. + <_>9 16 1 1 2. + 0 + -5.7474587811157107e-004 + 0.6022642254829407 + 0.3644644021987915 + <_> + + <_> + + + + <_>13 0 3 12 -1. + <_>14 0 1 12 3. + 0 + 0.0134350396692753 + 1 + 0.3441281914710999 + <_> + + + + <_>15 11 1 3 -1. + <_>15 12 1 1 3. + 0 + 2.1368139423429966e-003 + 0.5292434096336365 + 0.2747075855731964 + <_> + + <_> + + + + <_>8 15 3 3 -1. + <_>8 16 3 1 3. + 0 + 0.0141576295718551 + 1 + 0.8027868270874023 + <_> + + + + <_>4 0 3 12 -1. + <_>5 0 1 12 3. + 0 + 5.3884391672909260e-003 + 0.5222315192222595 + 0.3586727976799011 + <_> + + <_> + + + + <_>9 7 3 3 -1. + <_>10 7 1 3 3. + 0 + 8.8013410568237305e-003 + 0.4900386929512024 + 1 + <_> + + + + <_>9 9 3 1 -1. + <_>10 9 1 1 3. + 0 + 3.8858849438838661e-004 + 0.4681056141853333 + 0.5721952915191650 + <_> + + <_> + + + + <_>2 2 12 14 -1. + <_>2 2 6 7 2. + <_>8 9 6 7 2. + 0 + -2.2143588867038488e-003 + 0.5388805866241455 + 1 + <_> + + + + <_>4 2 12 3 -1. + <_>8 2 4 3 3. + 0 + -8.4642972797155380e-003 + 0.6675537824630737 + 0.3448441922664642 + <_> + + <_> + + + + <_>18 18 2 2 -1. + <_>18 18 1 2 2. + 0 + 0.0150443902239203 + 1 + 0.9239614009857178 + <_> + + + + <_>17 2 3 8 -1. + <_>18 2 1 8 3. + 0 + 7.6346402056515217e-003 + 0.4884896874427795 + 0.6306052803993225 + <_> + + <_> + + + + <_>0 18 2 2 -1. + <_>1 18 1 2 2. + 0 + 3.3895121305249631e-004 + 1 + 0.3997431099414825 + <_> + + + + <_>6 11 2 6 -1. + <_>6 14 2 3 2. + 0 + 2.1157610171940178e-004 + 0.5663982033729553 + 0.3972980976104736 + <_> + + <_> + + + + <_>13 10 5 6 -1. + <_>13 12 5 2 3. + 0 + -0.0275149494409561 + 1 + 0.5201063752174377 + <_> + + + + <_>5 8 15 3 -1. + <_>5 9 15 1 3. + 0 + 0.0516030602157116 + 0.5140730142593384 + 0.1245130971074104 + <_> + + <_> + + + + <_>2 10 5 6 -1. + <_>2 12 5 2 3. + 0 + 3.7510651163756847e-003 + 1 + 0.3802095055580139 + <_> + + + + <_>0 8 15 3 -1. + <_>0 9 15 1 3. + 0 + -2.1457639522850513e-003 + 0.3309448063373566 + 0.5474538803100586 + <_> + + <_> + + + + <_>16 2 3 1 -1. + <_>17 2 1 1 3. + 0 + -5.8178009930998087e-004 + 1 + 0.4892601966857910 + <_> + + + + <_>17 4 3 2 -1. + <_>18 4 1 2 3. + 0 + -9.3638541875407100e-004 + 0.5937399268150330 + 0.4664669036865234 + <_> + + <_> + + + + <_>0 8 8 12 -1. + <_>0 8 4 6 2. + <_>4 14 4 6 2. + 0 + 0.0416674911975861 + 1 + 0.7021353244781494 + <_> + + + + <_>1 7 8 6 -1. + <_>1 7 4 3 2. + <_>5 10 4 3 2. + 0 + -6.7763780243694782e-003 + 0.3222751021385193 + 0.5068395137786865 + <_> + + <_> + + + + <_>14 1 6 2 -1. + <_>16 1 2 2 3. + 0 + -2.9170580673962831e-003 + 1 + 0.4717701077461243 + <_> + + + + <_>15 0 4 4 -1. + <_>17 0 2 2 2. + <_>15 2 2 2 2. + 0 + 3.2789530814625323e-004 + 0.4509383141994476 + 0.5651162862777710 + 38.2360382080078130 + 14 + -1 + <_> + + + <_> + + <_> + + + + <_>1 1 4 11 -1. + <_>3 1 2 11 2. + 0 + 0.0117298001423478 + 0.3805224895477295 + 1 + <_> + + + + <_>5 5 1 8 -1. + <_>5 9 1 4 2. + 0 + 1.1712179984897375e-003 + 0.3140017986297607 + 0.6858146190643311 + <_> + + <_> + + + + <_>7 7 6 1 -1. + <_>9 7 2 1 3. + 0 + 9.3555096536874771e-003 + 1 + 0.6834673285484314 + <_> + + + + <_>4 7 12 2 -1. + <_>8 7 4 2 3. + 0 + 1.6570610459893942e-003 + 0.2992472946643829 + 0.5475677847862244 + <_> + + <_> + + + + <_>8 4 4 4 -1. + <_>8 6 4 2 2. + 0 + -1.3387809740379453e-003 + 1 + 0.2941406965255737 + <_> + + + + <_>2 4 9 1 -1. + <_>5 4 3 1 3. + 0 + 1.7580550047568977e-004 + 0.3896977901458740 + 0.5872970819473267 + <_> + + <_> + + + + <_>9 12 2 8 -1. + <_>9 16 2 4 2. + 0 + -2.9473248869180679e-003 + 0.3576571941375732 + 1 + <_> + + + + <_>3 8 14 12 -1. + <_>3 14 14 6 2. + 0 + 8.3220899105072021e-003 + 0.5232400894165039 + 0.3231087923049927 + <_> + + <_> + + + + <_>6 13 7 3 -1. + <_>6 14 7 1 3. + 0 + 7.4366689659655094e-003 + 1 + 0.6715673208236694 + <_> + + + + <_>5 9 6 3 -1. + <_>7 9 2 3 3. + 0 + -2.1322889369912446e-004 + 0.5470541715621948 + 0.3863396048545837 + <_> + + <_> + + + + <_>12 1 6 3 -1. + <_>12 2 6 1 3. + 0 + -7.8024631366133690e-003 + 0.2771460115909576 + 1 + <_> + + + + <_>8 12 6 2 -1. + <_>8 13 6 1 2. + 0 + 5.6611228501424193e-004 + 0.4689136147499085 + 0.5851963758468628 + <_> + + <_> + + + + <_>0 2 18 2 -1. + <_>0 2 9 1 2. + <_>9 3 9 1 2. + 0 + -9.2346500605344772e-003 + 0.2704397141933441 + 1 + <_> + + + + <_>6 10 3 6 -1. + <_>6 13 3 3 2. + 0 + -1.4676499631605111e-005 + 0.5622550249099731 + 0.3579317033290863 + <_> + + <_> + + + + <_>14 0 6 6 -1. + <_>14 0 3 6 2. + 0 + 9.7007937729358673e-003 + 0.4173871874809265 + 1 + <_> + + + + <_>15 0 5 8 -1. + <_>15 4 5 4 2. + 0 + -3.5320650786161423e-003 + 0.4195013046264648 + 0.5549468994140625 + <_> + + <_> + + + + <_>7 16 6 4 -1. + <_>9 16 2 4 3. + 0 + 0.0216164104640484 + 1 + 0.2857390940189362 + <_> + + + + <_>2 11 14 4 -1. + <_>2 11 7 2 2. + <_>9 13 7 2 2. + 0 + 3.4567608963698149e-003 + 0.6024532914161682 + 0.4377507865428925 + <_> + + <_> + + + + <_>14 10 6 10 -1. + <_>14 10 3 10 2. + 0 + 0.0229143202304840 + 0.4689350128173828 + 1 + <_> + + + + <_>9 8 10 12 -1. + <_>14 8 5 6 2. + <_>9 14 5 6 2. + 0 + 3.4328910987824202e-003 + 0.4664604961872101 + 0.5762562155723572 + <_> + + <_> + + + + <_>0 10 6 10 -1. + <_>3 10 3 10 2. + 0 + -8.6510833352804184e-003 + 0.6381739974021912 + 1 + <_> + + + + <_>1 8 10 12 -1. + <_>1 8 5 6 2. + <_>6 14 5 6 2. + 0 + 1.4510039472952485e-003 + 0.3711487948894501 + 0.5530750751495361 + <_> + + <_> + + + + <_>9 3 6 1 -1. + <_>11 3 2 1 3. + 0 + 7.8191719949245453e-003 + 0.5264362096786499 + 1 + <_> + + + + <_>7 4 6 3 -1. + <_>9 4 2 3 3. + 0 + 2.0798550394829363e-004 + 0.3730512857437134 + 0.5445731282234192 + <_> + + <_> + + + + <_>5 3 6 1 -1. + <_>7 3 2 1 3. + 0 + -3.9962218143045902e-003 + 0.2438170015811920 + 1 + <_> + + + + <_>4 5 6 3 -1. + <_>6 5 2 3 3. + 0 + -1.5010139577498194e-005 + 0.5324671268463135 + 0.3682988882064819 + <_> + + <_> + + + + <_>9 16 3 3 -1. + <_>9 17 3 1 3. + 0 + -4.2428788729012012e-003 + 0.6481474041938782 + 1 + <_> + + + + <_>8 14 6 3 -1. + <_>8 15 6 1 3. + 0 + 9.1374982148408890e-003 + 0.4896158874034882 + 0.6558843255043030 + <_> + + <_> + + + + <_>6 0 8 12 -1. + <_>6 0 4 6 2. + <_>10 6 4 6 2. + 0 + 8.8254585862159729e-003 + 1 + 0.3613870143890381 + <_> + + + + <_>4 12 2 3 -1. + <_>4 13 2 1 3. + 0 + 9.4092212384566665e-004 + 0.5502895712852478 + 0.3632518053054810 + <_> + + <_> + + + + <_>12 16 6 3 -1. + <_>12 17 6 1 3. + 0 + -0.0125033501535654 + 0.2261132001876831 + 1 + <_> + + + + <_>7 12 7 2 -1. + <_>7 13 7 1 2. + 0 + 8.6759645491838455e-003 + 0.4987890124320984 + 0.6847196221351624 + <_> + + <_> + + + + <_>2 16 6 3 -1. + <_>2 17 6 1 3. + 0 + -0.0104167601093650 + 0.2446299046278000 + 1 + <_> + + + + <_>0 7 16 6 -1. + <_>0 10 16 3 2. + 0 + 2.7432460337877274e-003 + 0.3511525094509125 + 0.5399826765060425 + <_> + + <_> + + + + <_>9 7 3 3 -1. + <_>10 7 1 3 3. + 0 + -4.2385691776871681e-003 + 0.6823673248291016 + 1 + <_> + + + + <_>9 7 3 5 -1. + <_>10 7 1 5 3. + 0 + 0.0183258708566427 + 0.4891580045223236 + 0.7135618925094605 + <_> + + <_> + + + + <_>0 5 20 10 -1. + <_>0 5 10 5 2. + <_>10 10 10 5 2. + 0 + -0.0243345405906439 + 0.3522521853446960 + 1 + <_> + + + + <_>3 1 4 2 -1. + <_>5 1 2 2 2. + 0 + 4.6469361404888332e-004 + 0.4049868881702423 + 0.5515825748443604 + <_> + + <_> + + + + <_>7 6 8 10 -1. + <_>11 6 4 5 2. + <_>7 11 4 5 2. + 0 + 3.4260009415447712e-003 + 1 + 0.4126769900321960 + <_> + + + + <_>17 6 3 2 -1. + <_>17 7 3 1 2. + 0 + -2.5827318895608187e-003 + 0.2899428904056549 + 0.5386431813240051 + <_> + + <_> + + + + <_>5 6 8 10 -1. + <_>5 6 4 5 2. + <_>9 11 4 5 2. + 0 + 1.0545699624344707e-003 + 1 + 0.3771344125270844 + <_> + + + + <_>5 12 10 6 -1. + <_>5 14 10 2 3. + 0 + -9.1257691383361816e-004 + 0.5827386975288391 + 0.4267556965351105 + <_> + + <_> + + + + <_>9 7 3 3 -1. + <_>10 7 1 3 3. + 0 + 2.6589010376483202e-003 + 0.4688124954700470 + 1 + <_> + + + + <_>10 3 2 6 -1. + <_>11 3 1 3 2. + <_>10 6 1 3 2. + 0 + 4.8598358407616615e-003 + 0.4853922128677368 + 0.6163644790649414 + <_> + + <_> + + + + <_>0 4 3 3 -1. + <_>0 5 3 1 3. + 0 + 8.0638676881790161e-003 + 1 + 0.1749195009469986 + <_> + + + + <_>3 16 8 4 -1. + <_>3 16 4 2 2. + <_>7 18 4 2 2. + 0 + -7.5898370705544949e-003 + 0.6826189756393433 + 0.4894070029258728 + <_> + + <_> + + + + <_>8 13 5 2 -1. + <_>8 14 5 1 2. + 0 + 3.6368070868775249e-004 + 0.4614596068859100 + 1 + <_> + + + + <_>8 7 4 12 -1. + <_>8 11 4 4 3. + 0 + 0.0625949501991272 + 0.5183017253875732 + 0.2686696052551270 + <_> + + <_> + + + + <_>5 9 2 2 -1. + <_>6 9 1 2 2. + 0 + -4.9753207713365555e-003 + 0.1758466958999634 + 1 + <_> + + + + <_>9 15 2 3 -1. + <_>9 16 2 1 3. + 0 + -2.0880119409412146e-003 + 0.6369382143020630 + 0.4930044114589691 + <_> + + <_> + + + + <_>13 9 2 3 -1. + <_>13 9 1 3 2. + 0 + 9.5644511748105288e-004 + 1 + 0.4139398932456970 + <_> + + + + <_>14 0 6 17 -1. + <_>16 0 2 17 3. + 0 + -0.0317214615643024 + 0.6045557260513306 + 0.4816364049911499 + <_> + + <_> + + + + <_>5 10 2 2 -1. + <_>6 10 1 2 2. + 0 + 1.2898689601570368e-003 + 0.5450810790061951 + 1 + <_> + + + + <_>2 9 9 1 -1. + <_>5 9 3 1 3. + 0 + 9.8405163735151291e-003 + 0.2924000918865204 + 0.6699606180191040 + <_> + + <_> + + + + <_>9 11 2 3 -1. + <_>9 12 2 1 3. + 0 + 1.2237089686095715e-003 + 1 + 0.6282836794853210 + <_> + + + + <_>7 11 6 3 -1. + <_>7 12 6 1 3. + 0 + -8.4232585504651070e-003 + 0.5986570119857788 + 0.4852580130100250 + <_> + + <_> + + + + <_>0 6 3 2 -1. + <_>0 7 3 1 2. + 0 + -7.2726322105154395e-004 + 0.3340049088001251 + 1 + <_> + + + + <_>7 0 6 1 -1. + <_>9 0 2 1 3. + 0 + 4.6842931769788265e-003 + 0.5168923735618591 + 0.2679480016231537 + <_> + + <_> + + + + <_>9 16 3 3 -1. + <_>9 17 3 1 3. + 0 + -1.0379579616710544e-003 + 0.5925791859626770 + 1 + <_> + + + + <_>2 13 17 6 -1. + <_>2 16 17 3 2. + 0 + 9.1342730447649956e-003 + 0.5437728166580200 + 0.4346800148487091 + <_> + + <_> + + + + <_>1 3 3 7 -1. + <_>2 3 1 7 3. + 0 + 1.4971119817346334e-003 + 0.4129500985145569 + 1 + <_> + + + + <_>1 1 6 4 -1. + <_>3 1 2 4 3. + 0 + 1.5762320253998041e-003 + 0.4522874057292938 + 0.6556292176246643 + <_> + + <_> + + + + <_>14 1 6 5 -1. + <_>14 1 3 5 2. + 0 + 8.7496247142553329e-003 + 0.4532034099102020 + 1 + <_> + + + + <_>13 2 3 2 -1. + <_>13 3 3 1 2. + 0 + -8.5103599121794105e-004 + 0.3785983920097351 + 0.5416975021362305 + <_> + + <_> + + + + <_>0 1 6 5 -1. + <_>3 1 3 5 2. + 0 + -0.0173255708068609 + 0.6884248256683350 + 1 + <_> + + + + <_>2 3 2 6 -1. + <_>2 5 2 2 3. + 0 + -8.3266440778970718e-003 + 0.3091326057910919 + 0.5243654847145081 + <_> + + <_> + + + + <_>9 10 3 2 -1. + <_>9 11 3 1 2. + 0 + 1.5157909729168750e-005 + 0.4765793979167938 + 1 + <_> + + + + <_>8 13 4 3 -1. + <_>8 14 4 1 3. + 0 + 1.8041470320895314e-003 + 0.4725385904312134 + 0.5716555118560791 + <_> + + <_> + + + + <_>6 3 3 1 -1. + <_>7 3 1 1 3. + 0 + 3.0691560823470354e-003 + 1 + 0.2143359929323196 + <_> + + + + <_>8 2 3 12 -1. + <_>8 6 3 4 3. + 0 + -5.2225510444259271e-005 + 0.5653210282325745 + 0.4385111033916473 + <_> + + <_> + + + + <_>11 12 1 2 -1. + <_>11 13 1 1 2. + 0 + 1.0072169970953837e-004 + 1 + 0.5924776196479797 + <_> + + + + <_>11 12 2 2 -1. + <_>12 12 1 1 2. + <_>11 13 1 1 2. + 0 + 1.3573700562119484e-004 + 0.4573448896408081 + 0.5769382715225220 + <_> + + <_> + + + + <_>5 5 2 2 -1. + <_>5 6 2 1 2. + 0 + 9.2137878527864814e-004 + 1 + 0.5992609262466431 + <_> + + + + <_>5 4 1 3 -1. + <_>5 5 1 1 3. + 0 + 3.0316581251099706e-004 + 0.3610081076622009 + 0.5049325823783875 + <_> + + <_> + + + + <_>3 11 16 4 -1. + <_>11 11 8 2 2. + <_>3 13 8 2 2. + 0 + 0.0395824797451496 + 1 + 0.1538489013910294 + <_> + + + + <_>0 10 20 3 -1. + <_>0 11 20 1 3. + 0 + 0.0475196801126003 + 0.5216140747070313 + 0.1428391039371491 + <_> + + <_> + + + + <_>1 11 16 4 -1. + <_>1 11 8 2 2. + <_>9 13 8 2 2. + 0 + 0.0188717599958181 + 1 + 0.2825506925582886 + <_> + + + + <_>4 2 4 2 -1. + <_>4 3 4 1 2. + 0 + -3.9876459049992263e-004 + 0.4035016894340515 + 0.5437793135643005 + <_> + + <_> + + + + <_>12 6 2 2 -1. + <_>13 6 1 1 2. + <_>12 7 1 1 2. + 0 + 4.6556600136682391e-004 + 0.4668996930122376 + 1 + <_> + + + + <_>12 11 6 6 -1. + <_>12 13 6 2 3. + 0 + 6.7090610973536968e-003 + 0.5331354737281799 + 0.4136571884155273 + <_> + + <_> + + + + <_>6 6 2 2 -1. + <_>6 6 1 1 2. + <_>7 7 1 1 2. + 0 + -1.8931160448119044e-003 + 0.7155163288116455 + 1 + <_> + + + + <_>6 4 4 16 -1. + <_>8 4 2 16 2. + 0 + -0.0130569497123361 + 0.3117899894714356 + 0.5208439826965332 + <_> + + <_> + + + + <_>11 18 3 2 -1. + <_>11 19 3 1 2. + 0 + -1.9484119547996670e-004 + 1 + 0.4637658894062042 + <_> + + + + <_>9 17 6 2 -1. + <_>12 17 3 1 2. + <_>9 18 3 1 2. + 0 + 1.5093220099515747e-005 + 0.4561653137207031 + 0.5445234179496765 + <_> + + <_> + + + + <_>2 13 5 2 -1. + <_>2 14 5 1 2. + 0 + -7.1617960202274844e-006 + 1 + 0.4193108081817627 + <_> + + + + <_>3 15 2 2 -1. + <_>3 16 2 1 2. + 0 + 3.0164679628796875e-004 + 0.5966237783432007 + 0.4100500047206879 + <_> + + <_> + + + + <_>9 7 3 3 -1. + <_>10 7 1 3 3. + 0 + 4.4195181690156460e-003 + 0.4845055937767029 + 1 + <_> + + + + <_>9 6 2 6 -1. + <_>9 6 1 6 2. + 0 + -7.3984181508421898e-003 + 0.6206846237182617 + 0.4931209087371826 + <_> + + <_> + + + + <_>1 14 7 6 -1. + <_>1 16 7 2 3. + 0 + -7.8031201846897602e-003 + 1 + 0.5282462835311890 + <_> + + + + <_>8 1 2 11 -1. + <_>9 1 1 11 2. + 0 + -0.0107314297929406 + 0.9104834198951721 + 0.3455922007560730 + <_> + + <_> + + + + <_>9 7 2 4 -1. + <_>9 7 1 4 2. + 0 + 1.4246780192479491e-003 + 0.4708554148674011 + 1 + <_> + + + + <_>11 10 2 1 -1. + <_>11 10 1 1 2. + 0 + -8.2717568147927523e-005 + 0.5651623010635376 + 0.4731023907661438 + <_> + + <_> + + + + <_>0 3 3 9 -1. + <_>1 3 1 9 3. + 0 + 4.4803409837186337e-003 + 1 + 0.6175886988639832 + <_> + + + + <_>0 3 3 6 -1. + <_>0 5 3 2 3. + 0 + 3.0789140146225691e-003 + 0.5139533281326294 + 0.3423087894916534 + <_> + + <_> + + + + <_>11 15 2 2 -1. + <_>12 15 1 1 2. + <_>11 16 1 1 2. + 0 + -1.1310289846733212e-003 + 1 + 0.4918282032012940 + <_> + + + + <_>11 14 2 2 -1. + <_>12 14 1 1 2. + <_>11 15 1 1 2. + 0 + -1.0410690447315574e-003 + 0.5942087173461914 + 0.4923042953014374 + <_> + + <_> + + + + <_>7 15 2 2 -1. + <_>7 15 1 1 2. + <_>8 16 1 1 2. + 0 + 1.1648540385067463e-003 + 1 + 0.6405271887779236 + <_> + + + + <_>7 14 2 2 -1. + <_>7 14 1 1 2. + <_>8 15 1 1 2. + 0 + 9.0057362103834748e-004 + 0.4504396915435791 + 0.6192076802253723 + <_> + + <_> + + + + <_>8 13 4 6 -1. + <_>10 13 2 3 2. + <_>8 16 2 3 2. + 0 + 6.8781538866460323e-003 + 0.5374813079833984 + 1 + <_> + + + + <_>2 14 16 4 -1. + <_>10 14 8 2 2. + <_>2 16 8 2 2. + 0 + -0.0352839007973671 + 0.2247101068496704 + 0.5217170715332031 + <_> + + <_> + + + + <_>9 8 2 2 -1. + <_>9 9 2 1 2. + 0 + -1.3320200378075242e-003 + 0.2554703056812286 + 1 + <_> + + + + <_>7 7 5 3 -1. + <_>7 8 5 1 3. + 0 + -2.3177571129053831e-003 + 0.3792515993118286 + 0.5243226885795593 + <_> + + <_> + + + + <_>7 5 6 2 -1. + <_>9 5 2 2 3. + 0 + 2.1332940377760679e-004 + 0.3860337138175964 + 1 + <_> + + + + <_>9 1 6 18 -1. + <_>11 1 2 18 3. + 0 + 0.0134679004549980 + 0.5380687713623047 + 0.4178363978862763 + <_> + + <_> + + + + <_>8 6 3 4 -1. + <_>9 6 1 4 3. + 0 + -1.2829169863834977e-003 + 0.6133623123168945 + 1 + <_> + + + + <_>8 5 2 4 -1. + <_>8 5 1 2 2. + <_>9 7 1 2 2. + 0 + 5.1571638323366642e-004 + 0.4028537869453430 + 0.5536851882934570 + <_> + + <_> + + + + <_>9 13 2 6 -1. + <_>10 13 1 3 2. + <_>9 16 1 3 2. + 0 + 3.9254198782145977e-003 + 0.5279921293258667 + 1 + <_> + + + + <_>11 0 3 18 -1. + <_>12 0 1 18 3. + 0 + -0.0337805896997452 + 0.2334675043821335 + 0.5175911784172058 + <_> + + <_> + + + + <_>6 0 3 18 -1. + <_>7 0 1 18 3. + 0 + -0.0378537215292454 + 0.1074853017926216 + 1 + <_> + + + + <_>5 15 4 2 -1. + <_>7 15 2 2 2. + 0 + -4.0752900531515479e-004 + 0.5345929861068726 + 0.4198938012123108 + <_> + + <_> + + + + <_>1 9 18 1 -1. + <_>7 9 6 1 3. + 0 + -3.1193809118121862e-003 + 0.3855825066566467 + 1 + <_> + + + + <_>0 0 20 3 -1. + <_>0 1 20 1 3. + 0 + -0.0157149694859982 + 0.3335190117359161 + 0.5263202190399170 + <_> + + <_> + + + + <_>9 6 2 4 -1. + <_>10 6 1 4 2. + 0 + -7.8525702701881528e-004 + 0.5860397219657898 + 1 + <_> + + + + <_>6 10 6 2 -1. + <_>8 10 2 2 3. + 0 + -2.8750501223839819e-004 + 0.5437784790992737 + 0.3716104924678803 + <_> + + <_> + + + + <_>0 7 20 1 -1. + <_>0 7 10 1 2. + 0 + 0.0280168596655130 + 1 + 0.3330754935741425 + <_> + + + + <_>11 3 5 4 -1. + <_>11 5 5 2 2. + 0 + -1.9018839811906219e-003 + 0.5366597771644592 + 0.4693793952465057 + <_> + + <_> + + + + <_>5 7 10 1 -1. + <_>10 7 5 1 2. + 0 + 0.0206475593149662 + 1 + 0.1006956025958061 + <_> + + + + <_>8 10 3 3 -1. + <_>8 11 3 1 3. + 0 + 4.3002571910619736e-003 + 0.4816035926342011 + 0.6215677261352539 + <_> + + <_> + + + + <_>2 0 16 8 -1. + <_>10 0 8 4 2. + <_>2 4 8 4 2. + 0 + 0.0134591404348612 + 0.5461953878402710 + 1 + <_> + + + + <_>11 0 9 10 -1. + <_>11 5 9 5 2. + 0 + -0.0103200403973460 + 0.4578453004360199 + 0.5419309735298157 + <_> + + <_> + + + + <_>0 2 8 18 -1. + <_>4 2 4 18 2. + 0 + 0.3199074864387512 + 1 + 0.2008046954870224 + <_> + + + + <_>0 0 2 6 -1. + <_>0 2 2 2 3. + 0 + 9.2198798665776849e-004 + 0.5193281173706055 + 0.3912194073200226 + <_> + + <_> + + + + <_>6 0 9 2 -1. + <_>6 1 9 1 2. + 0 + 4.1852539288811386e-004 + 0.4299744069576263 + 1 + <_> + + + + <_>4 1 12 2 -1. + <_>4 2 12 1 2. + 0 + 3.5891108564101160e-004 + 0.4344502985477448 + 0.5531973838806152 + <_> + + <_> + + + + <_>2 1 16 14 -1. + <_>2 8 16 7 2. + 0 + -0.2099243998527527 + 0.1075721010565758 + 1 + <_> + + + + <_>5 1 8 12 -1. + <_>5 7 8 6 2. + 0 + -4.9328152090311050e-003 + 0.5762796998023987 + 0.4574643969535828 + <_> + + <_> + + + + <_>9 11 2 2 -1. + <_>9 12 2 1 2. + 0 + 2.3409130517393351e-003 + 1 + 0.7476807832717896 + <_> + + + + <_>9 10 5 6 -1. + <_>9 12 5 2 3. + 0 + 4.7120270319283009e-003 + 0.5261765122413635 + 0.4505550861358643 + <_> + + <_> + + + + <_>3 0 13 8 -1. + <_>3 4 13 4 2. + 0 + 0.0287131909281015 + 0.4407103061676025 + 1 + <_> + + + + <_>6 7 5 8 -1. + <_>6 11 5 4 2. + 0 + -2.6156550738960505e-003 + 0.4244270920753479 + 0.6892976760864258 + <_> + + <_> + + + + <_>9 5 2 3 -1. + <_>9 6 2 1 3. + 0 + -0.0135589698329568 + 0.1252267956733704 + 1 + <_> + + + + <_>6 8 8 3 -1. + <_>6 9 8 1 3. + 0 + -3.0331799644045532e-004 + 0.4077791869640350 + 0.5442817807197571 + <_> + + <_> + + + + <_>2 2 7 6 -1. + <_>2 5 7 3 2. + 0 + -5.5601762142032385e-004 + 0.5378003716468811 + 1 + <_> + + + + <_>2 1 14 4 -1. + <_>2 1 7 2 2. + <_>9 3 7 2 2. + 0 + 2.4025330785661936e-003 + 0.3166579902172089 + 0.5285738110542297 + <_> + + <_> + + + + <_>11 14 1 3 -1. + <_>11 15 1 1 3. + 0 + -3.4089901018887758e-003 + 1 + 0.4905214905738831 + <_> + + + + <_>6 15 8 2 -1. + <_>6 16 8 1 2. + 0 + 8.0019602319225669e-004 + 0.4522736072540283 + 0.5580614209175110 + <_> + + <_> + + + + <_>8 14 1 3 -1. + <_>8 15 1 1 3. + 0 + 2.1901070140302181e-003 + 1 + 0.6612681746482849 + <_> + + + + <_>8 11 2 8 -1. + <_>8 15 2 4 2. + 0 + 3.3745369873940945e-003 + 0.5107765197753906 + 0.3386929929256439 + <_> + + <_> + + + + <_>6 15 8 2 -1. + <_>6 16 8 1 2. + 0 + 8.0019602319225669e-004 + 1 + 0.5707560181617737 + <_> + + + + <_>7 16 8 3 -1. + <_>7 17 8 1 3. + 0 + 0.0173460692167282 + 0.5016021132469177 + 0.6306459903717041 + <_> + + <_> + + + + <_>0 16 2 2 -1. + <_>0 17 2 1 2. + 0 + -1.9568449351936579e-003 + 0.3017806112766266 + 1 + <_> + + + + <_>1 16 8 4 -1. + <_>1 16 4 2 2. + <_>5 18 4 2 2. + 0 + -0.0112290196120739 + 0.6293851137161255 + 0.4520488977432251 + <_> + + <_> + + + + <_>2 9 16 3 -1. + <_>2 10 16 1 3. + 0 + -2.6608388870954514e-003 + 0.3344007134437561 + 1 + <_> + + + + <_>13 11 2 4 -1. + <_>13 11 1 4 2. + 0 + -0.0116151003167033 + 0.2825379073619843 + 0.5150970816612244 + <_> + + <_> + + + + <_>0 13 16 6 -1. + <_>0 15 16 2 3. + 0 + -0.0952486023306847 + 0.1398265063762665 + 1 + <_> + + + + <_>5 11 2 4 -1. + <_>6 11 1 4 2. + 0 + 7.3701781220734119e-003 + 0.5293998718261719 + 0.2331728041172028 + <_> + + <_> + + + + <_>18 2 2 18 -1. + <_>19 2 1 9 2. + <_>18 11 1 9 2. + 0 + -0.0149539001286030 + 1 + 0.4940465986728668 + <_> + + + + <_>19 7 1 9 -1. + <_>19 10 1 3 3. + 0 + 5.7038792874664068e-004 + 0.5466570854187012 + 0.4626767933368683 + <_> + + <_> + + + + <_>0 2 2 18 -1. + <_>0 2 1 9 2. + <_>1 11 1 9 2. + 0 + 5.8516198769211769e-003 + 1 + 0.6270040869712830 + <_> + + + + <_>0 7 1 9 -1. + <_>0 10 1 3 3. + 0 + 2.1150549582671374e-004 + 0.5508140921592712 + 0.4061872959136963 + <_> + + <_> + + + + <_>14 12 2 2 -1. + <_>14 13 2 1 2. + 0 + -6.9679190346505493e-006 + 1 + 0.4096567928791046 + <_> + + + + <_>11 14 2 3 -1. + <_>11 15 2 1 3. + 0 + -7.9677387839183211e-004 + 0.5615556836128235 + 0.4666886031627655 + <_> + + <_> + + + + <_>7 8 6 2 -1. + <_>7 9 6 1 2. + 0 + 0.0194594804197550 + 1 + 0.2311480939388275 + <_> + + + + <_>7 12 4 6 -1. + <_>7 12 2 3 2. + <_>9 15 2 3 2. + 0 + -0.0111608300358057 + 0.3087011873722076 + 0.5514662265777588 + <_> + + <_> + + + + <_>8 13 5 3 -1. + <_>8 14 5 1 3. + 0 + 0.0140561498701572 + 1 + 0.7005056142807007 + <_> + + + + <_>12 14 2 2 -1. + <_>13 14 1 1 2. + <_>12 15 1 1 2. + 0 + -3.2958350493572652e-004 + 0.5797485709190369 + 0.4691650867462158 + <_> + + <_> + + + + <_>7 13 6 3 -1. + <_>7 14 6 1 3. + 0 + -5.4636420682072639e-003 + 0.5928595066070557 + 1 + <_> + + + + <_>7 13 5 2 -1. + <_>7 14 5 1 2. + 0 + 5.8881669247057289e-005 + 0.3741397857666016 + 0.5170168876647949 + <_> + + <_> + + + + <_>2 10 16 4 -1. + <_>10 10 8 2 2. + <_>2 12 8 2 2. + 0 + 6.6343429498374462e-003 + 0.5414987802505493 + 1 + <_> + + + + <_>7 0 6 6 -1. + <_>9 0 2 6 3. + 0 + 0.0452634096145630 + 0.5180327296257019 + 0.1529684066772461 + <_> + + <_> + + + + <_>7 1 6 3 -1. + <_>7 2 6 1 3. + 0 + -8.0646127462387085e-003 + 0.2515468001365662 + 1 + <_> + + + + <_>0 12 6 2 -1. + <_>0 13 6 1 2. + 0 + 4.7389548853971064e-004 + 0.5121998786926270 + 0.3725948929786682 + <_> + + <_> + + + + <_>6 3 11 2 -1. + <_>6 4 11 1 2. + 0 + 1.4877359717502259e-005 + 1 + 0.5532435774803162 + <_> + + + + <_>12 0 8 6 -1. + <_>16 0 4 3 2. + <_>12 3 4 3 2. + 0 + 0.0243211593478918 + 0.4960766136646271 + 0.5983315110206604 + <_> + + <_> + + + + <_>8 12 1 2 -1. + <_>8 13 1 1 2. + 0 + 6.9931396865285933e-005 + 0.4163953065872192 + 1 + <_> + + + + <_>8 8 1 12 -1. + <_>8 12 1 4 3. + 0 + 2.6287760119885206e-003 + 0.5880144834518433 + 0.3399662971496582 + <_> + + <_> + + + + <_>11 11 2 2 -1. + <_>12 11 1 1 2. + <_>11 12 1 1 2. + 0 + 3.8190539926290512e-003 + 1 + 0.7846621274948120 + <_> + + + + <_>12 7 3 13 -1. + <_>13 7 1 13 3. + 0 + -0.0259891506284475 + 0.3288114070892334 + 0.5155087709426880 + <_> + + <_> + + + + <_>7 11 2 2 -1. + <_>7 11 1 1 2. + <_>8 12 1 1 2. + 0 + 1.2062400346621871e-003 + 0.4596059918403626 + 1 + <_> + + + + <_>3 13 1 3 -1. + <_>3 14 1 1 3. + 0 + -1.5557400183752179e-003 + 0.3126986920833588 + 0.7183399200439453 + <_> + + <_> + + + + <_>10 18 3 2 -1. + <_>11 18 1 2 3. + 0 + -2.2691930644214153e-003 + 1 + 0.5274006128311157 + <_> + + + + <_>11 11 2 1 -1. + <_>11 11 1 1 2. + 0 + 2.3287249496206641e-004 + 0.4878666102886200 + 0.5615152716636658 + <_> + + <_> + + + + <_>1 10 5 9 -1. + <_>1 13 5 3 3. + 0 + -5.5999699980020523e-003 + 1 + 0.5160812139511108 + <_> + + + + <_>4 8 6 4 -1. + <_>6 8 2 4 3. + 0 + -0.0104961898177862 + 0.5701614022254944 + 0.3204850852489471 + <_> + + <_> + + + + <_>13 12 1 4 -1. + <_>13 14 1 2 2. + 0 + -1.4814930182183161e-005 + 0.5538837909698486 + 1 + <_> + + + + <_>11 3 4 14 -1. + <_>13 3 2 7 2. + <_>11 10 2 7 2. + 0 + -6.4287078566849232e-004 + 0.5349429249763489 + 0.4472151100635529 + <_> + + <_> + + + + <_>6 12 1 4 -1. + <_>6 14 1 2 2. + 0 + -1.8891949730459601e-004 + 0.5012837052345276 + 1 + <_> + + + + <_>5 3 4 14 -1. + <_>5 3 2 7 2. + <_>7 10 2 7 2. + 0 + -9.0413521975278854e-003 + 0.2562935948371887 + 0.4503383040428162 + <_> + + <_> + + + + <_>10 18 3 2 -1. + <_>11 18 1 2 3. + 0 + 7.9534705728292465e-003 + 1 + 0.2630499899387360 + <_> + + + + <_>9 12 3 3 -1. + <_>9 13 3 1 3. + 0 + -2.7908999472856522e-003 + 0.5756508708000183 + 0.4854863882064819 + <_> + + <_> + + + + <_>2 2 12 6 -1. + <_>2 2 6 3 2. + <_>8 5 6 3 2. + 0 + 3.2857100013643503e-003 + 1 + 0.4084751904010773 + <_> + + + + <_>6 6 6 2 -1. + <_>9 6 3 2 2. + 0 + 7.7063008211553097e-004 + 0.4073356091976166 + 0.5920240879058838 + 44.6829681396484380 + 15 + -1 + <_> + + + <_> + + <_> + + + + <_>1 0 18 12 -1. + <_>7 0 6 12 3. + 0 + 0.0630219429731369 + 0.3419382870197296 + 1 + <_> + + + + <_>5 7 6 4 -1. + <_>5 7 3 2 2. + <_>8 9 3 2 2. + 0 + -2.8374609537422657e-003 + 0.6829563975334168 + 0.4404523074626923 + <_> + + <_> + + + + <_>5 7 10 4 -1. + <_>5 9 10 2 2. + 0 + 0.0464619509875774 + 0.4391745030879974 + 1 + <_> + + + + <_>7 7 6 4 -1. + <_>9 7 2 4 3. + 0 + 0.0291525404900312 + 0.4601063132286072 + 0.6357936859130859 + <_> + + <_> + + + + <_>9 5 2 2 -1. + <_>9 6 2 1 2. + 0 + -1.4000290320836939e-005 + 1 + 0.3730010092258453 + <_> + + + + <_>9 9 2 2 -1. + <_>9 10 2 1 2. + 0 + -1.2757079675793648e-003 + 0.3093824088573456 + 0.5901370048522949 + <_> + + <_> + + + + <_>6 17 8 3 -1. + <_>6 18 8 1 3. + 0 + 1.3596529606729746e-003 + 0.4337565004825592 + 1 + <_> + + + + <_>9 17 6 2 -1. + <_>12 17 3 1 2. + <_>9 18 3 1 2. + 0 + 1.7991929780691862e-004 + 0.4217503964900971 + 0.5846847891807556 + <_> + + <_> + + + + <_>4 12 2 2 -1. + <_>4 13 2 1 2. + 0 + -1.4166639630275313e-005 + 1 + 0.4084691107273102 + <_> + + + + <_>3 12 9 2 -1. + <_>3 13 9 1 2. + 0 + 6.0252390539972112e-005 + 0.5087286829948425 + 0.7277184128761292 + <_> + + <_> + + + + <_>8 3 6 1 -1. + <_>10 3 2 1 3. + 0 + 6.4320368692278862e-003 + 1 + 0.2967903017997742 + <_> + + + + <_>9 3 4 6 -1. + <_>11 3 2 3 2. + <_>9 6 2 3 2. + 0 + 4.6682319953106344e-004 + 0.4110462963581085 + 0.5581219792366028 + <_> + + <_> + + + + <_>0 3 6 5 -1. + <_>3 3 3 5 2. + 0 + 5.7436279021203518e-003 + 0.4287309944629669 + 1 + <_> + + + + <_>2 0 2 18 -1. + <_>2 6 2 6 3. + 0 + 3.2019240316003561e-003 + 0.4266195893287659 + 0.6444045901298523 + <_> + + <_> + + + + <_>14 2 4 9 -1. + <_>14 5 4 3 3. + 0 + -5.7637941790744662e-004 + 1 + 0.4084824919700623 + <_> + + + + <_>10 18 3 2 -1. + <_>11 18 1 2 3. + 0 + -3.7901920732110739e-003 + 0.3181920945644379 + 0.5230693221092224 + <_> + + <_> + + + + <_>2 2 4 9 -1. + <_>2 5 4 3 3. + 0 + 4.8914109356701374e-003 + 1 + 0.3548356890678406 + <_> + + + + <_>7 18 3 2 -1. + <_>8 18 1 2 3. + 0 + 4.6459292061626911e-003 + 0.5610597729682922 + 0.2693848907947540 + <_> + + <_> + + + + <_>10 14 3 3 -1. + <_>10 15 3 1 3. + 0 + -6.8799369037151337e-003 + 0.6235408186912537 + 1 + <_> + + + + <_>10 12 2 6 -1. + <_>10 15 2 3 2. + 0 + -0.0181474704295397 + 0.2861981987953186 + 0.5226848125457764 + <_> + + <_> + + + + <_>7 5 3 6 -1. + <_>7 7 3 2 3. + 0 + 1.1409220314817503e-004 + 1 + 0.3257833123207092 + <_> + + + + <_>3 3 6 2 -1. + <_>3 4 6 1 2. + 0 + -5.4334272863343358e-004 + 0.3882969021797180 + 0.5341166257858276 + <_> + + <_> + + + + <_>8 4 7 3 -1. + <_>8 5 7 1 3. + 0 + -2.7602489572018385e-003 + 0.6353965997695923 + 1 + <_> + + + + <_>13 6 2 3 -1. + <_>13 7 2 1 3. + 0 + -1.9730569329112768e-003 + 0.5880761146545410 + 0.4593090116977692 + <_> + + <_> + + + + <_>8 8 2 12 -1. + <_>8 12 2 4 3. + 0 + 2.4565239436924458e-003 + 1 + 0.3134010136127472 + <_> + + + + <_>5 4 8 14 -1. + <_>5 4 4 7 2. + <_>9 11 4 7 2. + 0 + 1.9392010290175676e-004 + 0.5277131795883179 + 0.3604106903076172 + <_> + + <_> + + + + <_>0 1 20 8 -1. + <_>10 1 10 4 2. + <_>0 5 10 4 2. + 0 + 0.0786430165171623 + 0.5290341973304749 + 1 + <_> + + + + <_>4 0 12 2 -1. + <_>4 1 12 1 2. + 0 + 6.5276869572699070e-003 + 0.4654479920864105 + 0.6044905185699463 + <_> + + <_> + + + + <_>0 1 20 8 -1. + <_>0 1 10 4 2. + <_>10 5 10 4 2. + 0 + -0.0787167996168137 + 0.2541126906871796 + 1 + <_> + + + + <_>4 0 12 2 -1. + <_>4 1 12 1 2. + 0 + 5.7298499159514904e-003 + 0.4366919100284576 + 0.5822886228561401 + <_> + + <_> + + + + <_>9 5 6 3 -1. + <_>9 5 3 3 2. + 0 + 6.2386557692661881e-004 + 1 + 0.5472692251205444 + <_> + + + + <_>8 13 10 6 -1. + <_>8 15 10 2 3. + 0 + -0.0852672308683395 + 0.1461607962846756 + 0.5181810855865479 + <_> + + <_> + + + + <_>5 5 6 3 -1. + <_>8 5 3 3 2. + 0 + 0.0409811101853848 + 1 + 0.1270135045051575 + <_> + + + + <_>6 3 6 1 -1. + <_>8 3 2 1 3. + 0 + 7.7135749161243439e-003 + 0.4832684993743897 + 0.2223578989505768 + <_> + + <_> + + + + <_>11 18 9 2 -1. + <_>14 18 3 2 3. + 0 + -6.8663940764963627e-003 + 0.5918928980827332 + 1 + <_> + + + + <_>13 11 6 7 -1. + <_>13 11 3 7 2. + 0 + 0.0145596396178007 + 0.4761506915092468 + 0.5727223753929138 + <_> + + <_> + + + + <_>4 6 12 10 -1. + <_>4 6 6 5 2. + <_>10 11 6 5 2. + 0 + -0.0100643103942275 + 0.3636730909347534 + 1 + <_> + + + + <_>8 17 3 3 -1. + <_>9 17 1 3 3. + 0 + 3.6274080630391836e-003 + 0.5271731019020081 + 0.2740525007247925 + <_> + + <_> + + + + <_>11 18 9 2 -1. + <_>14 18 3 2 3. + 0 + -2.3421540390700102e-003 + 0.5497784018516541 + 1 + <_> + + + + <_>13 11 6 8 -1. + <_>13 11 3 8 2. + 0 + -0.0246864091604948 + 0.6059895157814026 + 0.4960314035415649 + <_> + + <_> + + + + <_>4 16 2 2 -1. + <_>4 17 2 1 2. + 0 + 1.9456120207905769e-004 + 1 + 0.3769465088844299 + <_> + + + + <_>7 15 4 4 -1. + <_>7 17 4 2 2. + 0 + 3.1714211218059063e-004 + 0.4062362015247345 + 0.5668215155601502 + <_> + + <_> + + + + <_>12 4 3 3 -1. + <_>12 5 3 1 3. + 0 + 2.0793990697711706e-003 + 0.4618656933307648 + 1 + <_> + + + + <_>13 6 2 3 -1. + <_>13 7 2 1 3. + 0 + 1.7982709687203169e-003 + 0.4867505133152008 + 0.6518449783325195 + <_> + + <_> + + + + <_>5 11 6 1 -1. + <_>7 11 2 1 3. + 0 + -2.2287059982772917e-004 + 0.5677595734596252 + 1 + <_> + + + + <_>7 10 3 1 -1. + <_>8 10 1 1 3. + 0 + 3.2623921288177371e-004 + 0.3710733950138092 + 0.5676605105400085 + <_> + + <_> + + + + <_>0 12 20 4 -1. + <_>0 14 20 2 2. + 0 + -0.0667926818132401 + 0.2511521875858307 + 1 + <_> + + + + <_>10 2 3 2 -1. + <_>10 3 3 1 2. + 0 + -1.4869889710098505e-003 + 0.3886750936508179 + 0.5262253880500794 + <_> + + <_> + + + + <_>5 4 3 3 -1. + <_>5 5 3 1 3. + 0 + -5.0454870797693729e-003 + 0.6557472944259644 + 1 + <_> + + + + <_>5 5 4 3 -1. + <_>5 6 4 1 3. + 0 + -4.8297587782144547e-003 + 0.5934106111526489 + 0.4285922050476074 + <_> + + <_> + + + + <_>8 8 4 3 -1. + <_>8 9 4 1 3. + 0 + -1.0722599690780044e-003 + 1 + 0.5426058769226074 + <_> + + + + <_>10 4 2 12 -1. + <_>10 8 2 4 3. + 0 + 8.7901195511221886e-003 + 0.5351303219795227 + 0.4834277927875519 + <_> + + <_> + + + + <_>0 3 4 3 -1. + <_>0 4 4 1 3. + 0 + -7.1750381030142307e-003 + 0.2067168951034546 + 1 + <_> + + + + <_>1 3 2 3 -1. + <_>1 4 2 1 3. + 0 + 1.1251230025663972e-003 + 0.5112252235412598 + 0.3468714058399200 + <_> + + <_> + + + + <_>16 1 4 11 -1. + <_>16 1 2 11 2. + 0 + 0.0106347100809217 + 0.4479008018970490 + 1 + <_> + + + + <_>18 2 2 16 -1. + <_>19 2 1 8 2. + <_>18 10 1 8 2. + 0 + -0.0117632197216153 + 0.6253901720046997 + 0.4968987107276917 + <_> + + <_> + + + + <_>1 8 6 12 -1. + <_>3 8 2 12 3. + 0 + 0.0923240631818771 + 1 + 0.2031303942203522 + <_> + + + + <_>7 2 6 2 -1. + <_>7 2 3 1 2. + <_>10 3 3 1 2. + 0 + 1.8991080578416586e-003 + 0.5618721842765808 + 0.4046572148799896 + <_> + + <_> + + + + <_>12 4 8 2 -1. + <_>16 4 4 1 2. + <_>12 5 4 1 2. + 0 + -0.0105103403329849 + 1 + 0.4943264126777649 + <_> + + + + <_>10 6 6 2 -1. + <_>12 6 2 2 3. + 0 + -7.4531312566250563e-004 + 0.5613427758216858 + 0.3845331966876984 + <_> + + <_> + + + + <_>0 4 8 2 -1. + <_>0 4 4 1 2. + <_>4 5 4 1 2. + 0 + 8.0041000619530678e-003 + 1 + 0.7759842276573181 + <_> + + + + <_>1 3 3 5 -1. + <_>2 3 1 5 3. + 0 + 5.8110528625547886e-003 + 0.4624733030796051 + 0.6286277174949646 + <_> + + <_> + + + + <_>16 3 4 6 -1. + <_>16 5 4 2 3. + 0 + -0.0279185809195042 + 0.2409314066171646 + 1 + <_> + + + + <_>8 6 4 3 -1. + <_>8 7 4 1 3. + 0 + 2.1739399526268244e-003 + 0.5345504879951477 + 0.3507958054542542 + <_> + + <_> + + + + <_>8 14 1 3 -1. + <_>8 15 1 1 3. + 0 + -4.0639587678015232e-003 + 0.6647101044654846 + 1 + <_> + + + + <_>4 11 1 2 -1. + <_>4 12 1 1 2. + 0 + 6.0017139185220003e-004 + 0.4998509883880615 + 0.3022165000438690 + <_> + + <_> + + + + <_>8 14 6 3 -1. + <_>8 15 6 1 3. + 0 + 1.9214770291000605e-003 + 1 + 0.5919150710105896 + <_> + + + + <_>7 15 7 3 -1. + <_>7 16 7 1 3. + 0 + -0.0138608301058412 + 0.6351767778396606 + 0.4993310868740082 + <_> + + <_> + + + + <_>9 12 2 8 -1. + <_>9 16 2 4 2. + 0 + 0.0230068508535624 + 1 + 0.1902336031198502 + <_> + + + + <_>4 6 6 2 -1. + <_>6 6 2 2 3. + 0 + -1.3857929734513164e-003 + 0.5253369212150574 + 0.3985860049724579 + <_> + + <_> + + + + <_>12 7 4 2 -1. + <_>12 8 4 1 2. + 0 + 1.2637410545721650e-003 + 0.4666104018688202 + 1 + <_> + + + + <_>5 3 13 10 -1. + <_>5 8 13 5 2. + 0 + -0.0146752102300525 + 0.3823164999485016 + 0.5326632857322693 + <_> + + <_> + + + + <_>4 7 4 2 -1. + <_>4 8 4 1 2. + 0 + -2.9535070061683655e-003 + 0.7063655853271484 + 1 + <_> + + + + <_>0 8 16 2 -1. + <_>0 8 8 1 2. + <_>8 9 8 1 2. + 0 + -1.7189770005643368e-003 + 0.3813462853431702 + 0.5246735215187073 + <_> + + <_> + + + + <_>11 8 2 5 -1. + <_>11 8 1 5 2. + 0 + -4.2484089499339461e-004 + 1 + 0.4791638851165772 + <_> + + + + <_>10 0 6 13 -1. + <_>10 0 3 13 2. + 0 + -8.5248658433556557e-004 + 0.4491218030452728 + 0.5370901226997376 + <_> + + <_> + + + + <_>1 6 4 2 -1. + <_>1 7 4 1 2. + 0 + 8.9034568518400192e-003 + 1 + 0.2076473981142044 + <_> + + + + <_>4 3 2 1 -1. + <_>5 3 1 1 2. + 0 + 1.4895649655954912e-005 + 0.4447635114192963 + 0.5667163133621216 + <_> + + <_> + + + + <_>11 8 2 5 -1. + <_>11 8 1 5 2. + 0 + -4.7091601300053298e-004 + 0.5465071201324463 + 1 + <_> + + + + <_>12 10 4 8 -1. + <_>12 10 2 8 2. + 0 + 4.3084810022264719e-004 + 0.5493261814117432 + 0.4580708146095276 + <_> + + <_> + + + + <_>7 8 2 5 -1. + <_>8 8 1 5 2. + 0 + -6.3893961487337947e-004 + 0.5501571893692017 + 1 + <_> + + + + <_>4 10 4 8 -1. + <_>6 10 2 8 2. + 0 + -7.3733746830839664e-005 + 0.5085790753364563 + 0.3305698037147522 + <_> + + <_> + + + + <_>6 7 9 12 -1. + <_>9 7 3 12 3. + 0 + -8.8991485536098480e-003 + 0.4276469051837921 + 1 + <_> + + + + <_>11 13 2 3 -1. + <_>11 13 1 3 2. + 0 + -0.0102533502504230 + 0.1123218014836311 + 0.5152723193168640 + <_> + + <_> + + + + <_>7 10 6 10 -1. + <_>10 10 3 10 2. + 0 + -0.0596374906599522 + 0.7386772036552429 + 1 + <_> + + + + <_>8 11 4 8 -1. + <_>8 11 2 4 2. + <_>10 15 2 4 2. + 0 + 0.0217071995139122 + 0.4996291995048523 + 0.1339413970708847 + <_> + + <_> + + + + <_>16 1 4 11 -1. + <_>16 1 2 11 2. + 0 + 9.9107045680284500e-003 + 0.4679012000560761 + 1 + <_> + + + + <_>18 2 2 4 -1. + <_>18 2 1 4 2. + 0 + -0.0109983002766967 + 0.6928656101226807 + 0.5012068152427673 + <_> + + <_> + + + + <_>5 6 6 2 -1. + <_>5 6 3 1 2. + <_>8 7 3 1 2. + 0 + 7.4608891736716032e-004 + 1 + 0.5833582282066345 + <_> + + + + <_>5 4 1 3 -1. + <_>5 5 1 1 3. + 0 + 2.9539171373471618e-004 + 0.3826391100883484 + 0.5566350817680359 + <_> + + <_> + + + + <_>11 1 4 14 -1. + <_>11 1 2 14 2. + 0 + 0.0500541292130947 + 1 + 0.3002721071243286 + <_> + + + + <_>4 2 12 3 -1. + <_>8 2 4 3 3. + 0 + -7.2330660186707973e-003 + 0.5908042788505554 + 0.5000870823860169 + <_> + + <_> + + + + <_>5 1 4 14 -1. + <_>7 1 2 14 2. + 0 + -2.6863380335271358e-003 + 0.3975034952163696 + 1 + <_> + + + + <_>7 3 6 2 -1. + <_>9 3 2 2 3. + 0 + -1.0195849463343620e-003 + 0.3697685897350311 + 0.5756192803382874 + <_> + + <_> + + + + <_>2 0 18 4 -1. + <_>8 0 6 4 3. + 0 + -0.0202049203217030 + 0.6375268101692200 + 1 + <_> + + + + <_>9 5 2 10 -1. + <_>9 10 2 5 2. + 0 + 2.1340379025787115e-003 + 0.5363265872001648 + 0.4433170855045319 + <_> + + <_> + + + + <_>8 6 3 4 -1. + <_>9 6 1 4 3. + 0 + -1.8348889425396919e-003 + 0.5828999280929565 + 1 + <_> + + + + <_>5 5 9 11 -1. + <_>8 5 3 11 3. + 0 + -5.9489468112587929e-003 + 0.2680670917034149 + 0.4642885923385620 + <_> + + <_> + + + + <_>10 6 3 5 -1. + <_>11 6 1 5 3. + 0 + -2.3030120064504445e-004 + 0.5475320219993591 + 1 + <_> + + + + <_>8 9 6 5 -1. + <_>8 9 3 5 2. + 0 + 5.0581009127199650e-003 + 0.5320833921432495 + 0.4646492898464203 + <_> + + <_> + + + + <_>7 6 3 5 -1. + <_>8 6 1 5 3. + 0 + -5.1950011402368546e-004 + 0.5232744812965393 + 1 + <_> + + + + <_>6 10 6 3 -1. + <_>9 10 3 3 2. + 0 + -6.8620947422459722e-004 + 0.4935086071491242 + 0.3103117942810059 + <_> + + <_> + + + + <_>10 0 3 7 -1. + <_>11 0 1 7 3. + 0 + -7.4936267919838428e-003 + 0.2883046865463257 + 1 + <_> + + + + <_>0 3 20 12 -1. + <_>0 9 20 6 2. + 0 + -0.0156829301267862 + 0.3640313148498535 + 0.5368754863739014 + <_> + + <_> + + + + <_>9 7 2 2 -1. + <_>10 7 1 2 2. + 0 + -3.2649750355631113e-003 + 0.6468631029129028 + 1 + <_> + + + + <_>5 9 4 1 -1. + <_>7 9 2 1 2. + 0 + 3.8463930832222104e-004 + 0.5259659886360169 + 0.3831427991390228 + <_> + + <_> + + + + <_>13 13 3 2 -1. + <_>13 14 3 1 2. + 0 + 4.4492390006780624e-003 + 1 + 0.2086818963289261 + <_> + + + + <_>16 9 4 6 -1. + <_>16 9 2 6 2. + 0 + 0.0231183208525181 + 0.4978533089160919 + 0.5961257219314575 + <_> + + <_> + + + + <_>7 15 6 3 -1. + <_>7 16 6 1 3. + 0 + 2.0835159812122583e-003 + 1 + 0.5746421813964844 + <_> + + + + <_>6 16 7 3 -1. + <_>6 17 7 1 3. + 0 + 1.1513150529935956e-003 + 0.3586845099925995 + 0.5363473892211914 + <_> + + <_> + + + + <_>11 14 9 6 -1. + <_>11 16 9 2 3. + 0 + 0.0361047089099884 + 1 + 0.2833136916160584 + <_> + + + + <_>19 14 1 3 -1. + <_>19 15 1 1 3. + 0 + 3.6256198654882610e-004 + 0.5477722287178040 + 0.4110532104969025 + <_> + + <_> + + + + <_>0 9 6 6 -1. + <_>3 9 3 6 2. + 0 + -3.4635469783097506e-003 + 0.5990386009216309 + 1 + <_> + + + + <_>0 19 9 1 -1. + <_>3 19 3 1 3. + 0 + -2.8796829283237457e-003 + 0.5725253224372864 + 0.4149512052536011 + <_> + + <_> + + + + <_>11 14 9 6 -1. + <_>11 16 9 2 3. + 0 + -8.1119500100612640e-003 + 1 + 0.5396351814270020 + <_> + + + + <_>12 12 6 6 -1. + <_>12 14 6 2 3. + 0 + 4.5932079665362835e-003 + 0.5379704236984253 + 0.3891302943229675 + <_> + + <_> + + + + <_>1 14 8 6 -1. + <_>1 16 8 2 3. + 0 + 7.0014740340411663e-003 + 1 + 0.3714671134948731 + <_> + + + + <_>8 1 3 2 -1. + <_>9 1 1 2 3. + 0 + 8.0169539432972670e-004 + 0.5529567003250122 + 0.3755804896354675 + <_> + + <_> + + + + <_>18 2 2 4 -1. + <_>18 2 1 4 2. + 0 + -8.6652329191565514e-003 + 1 + 0.5025773048400879 + <_> + + + + <_>14 0 6 3 -1. + <_>16 0 2 3 3. + 0 + -2.7315050829201937e-003 + 0.5850322246551514 + 0.4617573916912079 + <_> + + <_> + + + + <_>0 2 2 4 -1. + <_>1 2 1 4 2. + 0 + 1.3301590224727988e-003 + 1 + 0.5937700867652893 + <_> + + + + <_>0 0 6 3 -1. + <_>2 0 2 3 3. + 0 + -4.2648240923881531e-003 + 0.5645368099212647 + 0.3937624990940094 + <_> + + <_> + + + + <_>9 0 3 2 -1. + <_>10 0 1 2 3. + 0 + 6.3251499086618423e-003 + 0.5182105898857117 + 1 + <_> + + + + <_>12 1 2 2 -1. + <_>12 1 1 2 2. + 0 + -3.0753740575164557e-003 + 0.3007416129112244 + 0.5196403861045837 + <_> + + <_> + + + + <_>8 0 3 2 -1. + <_>9 0 1 2 3. + 0 + -7.3622138006612659e-004 + 0.3697580099105835 + 1 + <_> + + + + <_>6 1 2 2 -1. + <_>7 1 1 2 2. + 0 + 3.0082479497650638e-005 + 0.4327593147754669 + 0.5715808868408203 + <_> + + <_> + + + + <_>10 8 2 3 -1. + <_>10 9 2 1 3. + 0 + -3.8722730241715908e-003 + 0.3473713099956513 + 1 + <_> + + + + <_>13 15 6 2 -1. + <_>13 16 6 1 2. + 0 + 6.2879058532416821e-004 + 0.5438259243965149 + 0.4453906118869782 + <_> + + <_> + + + + <_>8 12 2 2 -1. + <_>8 12 1 1 2. + <_>9 13 1 1 2. + 0 + 1.3411579420790076e-003 + 1 + 0.6511713862419128 + <_> + + + + <_>8 15 3 5 -1. + <_>9 15 1 5 3. + 0 + -8.3681922405958176e-003 + 0.1443295031785965 + 0.4888199865818024 + <_> + + <_> + + + + <_>8 6 4 12 -1. + <_>8 12 4 6 2. + 0 + 9.3305751215666533e-004 + 1 + 0.3951109051704407 + <_> + + + + <_>7 6 7 8 -1. + <_>7 10 7 4 2. + 0 + -1.0746510233730078e-003 + 0.3910265862941742 + 0.5349503755569458 + <_> + + <_> + + + + <_>0 11 8 2 -1. + <_>0 12 8 1 2. + 0 + -0.0186100509017706 + 0.1275743991136551 + 1 + <_> + + + + <_>8 11 2 2 -1. + <_>8 11 1 1 2. + <_>9 12 1 1 2. + 0 + 1.3651419430971146e-003 + 0.5038288831710815 + 0.6951304078102112 + <_> + + <_> + + + + <_>7 7 12 1 -1. + <_>11 7 4 1 3. + 0 + 7.3744421824812889e-003 + 0.5253443121910095 + 1 + <_> + + + + <_>10 8 3 2 -1. + <_>11 8 1 2 3. + 0 + 8.4163323044776917e-003 + 0.5011243820190430 + 0.7311332821846008 + <_> + + <_> + + + + <_>1 7 12 1 -1. + <_>5 7 4 1 3. + 0 + 5.1413988694548607e-003 + 0.4953536093235016 + 1 + <_> + + + + <_>6 5 8 2 -1. + <_>6 5 4 1 2. + <_>10 6 4 1 2. + 0 + 4.5847031287848949e-003 + 0.2535555958747864 + 0.6462442874908447 + <_> + + <_> + + + + <_>9 10 3 10 -1. + <_>10 10 1 10 3. + 0 + 0.0285652391612530 + 1 + 0.2330722063779831 + <_> + + + + <_>16 0 2 4 -1. + <_>16 0 1 4 2. + 0 + 4.3958800961263478e-004 + 0.4702244102954865 + 0.5544549226760864 + <_> + + <_> + + + + <_>8 10 3 10 -1. + <_>9 10 1 10 3. + 0 + 0.0314594581723213 + 1 + 0.0336896888911724 + <_> + + + + <_>9 10 2 3 -1. + <_>9 11 2 1 3. + 0 + 5.6011630222201347e-003 + 0.4787121117115021 + 0.6338351964950562 + <_> + + <_> + + + + <_>8 9 4 2 -1. + <_>10 9 2 1 2. + <_>8 10 2 1 2. + 0 + 7.1835669223219156e-004 + 0.5431486964225769 + 1 + <_> + + + + <_>12 14 7 6 -1. + <_>12 16 7 2 3. + 0 + -5.5303089320659637e-003 + 0.4105832874774933 + 0.5403990745544434 + <_> + + <_> + + + + <_>6 1 3 1 -1. + <_>7 1 1 1 3. + 0 + 1.4129279879853129e-003 + 1 + 0.3105539977550507 + <_> + + + + <_>2 0 2 4 -1. + <_>3 0 1 4 2. + 0 + 2.5530709535814822e-004 + 0.4254471957683563 + 0.5447154045104981 + <_> + + <_> + + + + <_>11 11 2 2 -1. + <_>12 11 1 1 2. + <_>11 12 1 1 2. + 0 + 3.1966410460881889e-004 + 1 + 0.6118361949920654 + <_> + + + + <_>12 12 6 6 -1. + <_>12 14 6 2 3. + 0 + 5.0411392003297806e-003 + 0.5290042161941528 + 0.4224787056446075 + <_> + + <_> + + + + <_>1 0 6 10 -1. + <_>1 0 3 5 2. + <_>4 5 3 5 2. + 0 + 7.7617880888283253e-003 + 0.4315345883369446 + 1 + <_> + + + + <_>3 0 2 9 -1. + <_>3 3 2 3 3. + 0 + 2.9374631121754646e-003 + 0.6629263162612915 + 0.3028964996337891 + <_> + + <_> + + + + <_>14 13 3 2 -1. + <_>14 14 3 1 2. + 0 + -1.6497720498591661e-003 + 1 + 0.5491852760314941 + <_> + + + + <_>15 2 3 2 -1. + <_>15 3 3 1 2. + 0 + -5.8834417723119259e-003 + 0.3188554048538208 + 0.5184289216995239 + <_> + + <_> + + + + <_>2 13 5 2 -1. + <_>2 14 5 1 2. + 0 + 8.7459187489002943e-004 + 1 + 0.3328830897808075 + <_> + + + + <_>3 4 12 10 -1. + <_>3 4 6 5 2. + <_>9 9 6 5 2. + 0 + -0.0153087796643376 + 0.3923608064651489 + 0.5235139131546021 + <_> + + <_> + + + + <_>5 1 14 6 -1. + <_>5 3 14 2 3. + 0 + 0.0322924517095089 + 1 + 0.5977646708488464 + <_> + + + + <_>15 3 3 2 -1. + <_>15 4 3 1 2. + 0 + -4.3842519517056644e-004 + 0.4541687965393066 + 0.5369428992271423 + <_> + + <_> + + + + <_>7 11 2 2 -1. + <_>7 11 1 1 2. + <_>8 12 1 1 2. + 0 + 1.5429529594257474e-003 + 1 + 0.6318141222000122 + <_> + + + + <_>2 14 6 6 -1. + <_>2 16 6 2 3. + 0 + -2.4733028840273619e-003 + 0.3490633070468903 + 0.4759024977684021 + <_> + + <_> + + + + <_>6 13 8 3 -1. + <_>6 14 8 1 3. + 0 + 2.0994939841330051e-003 + 1 + 0.5887197852134705 + <_> + + + + <_>1 19 18 1 -1. + <_>7 19 6 1 3. + 0 + -5.7541108690202236e-003 + 0.5961331725120544 + 0.4841983020305634 + <_> + + <_> + + + + <_>8 12 1 6 -1. + <_>8 15 1 3 2. + 0 + -0.0102331303060055 + 0.1705404072999954 + 1 + <_> + + + + <_>0 0 14 15 -1. + <_>0 5 14 5 3. + 0 + 0.2255450934171677 + 0.4779379963874817 + 0.0978796631097794 + <_> + + <_> + + + + <_>3 0 16 8 -1. + <_>3 4 16 4 2. + 0 + 0.0296665597707033 + 1 + 0.5822224020957947 + <_> + + + + <_>6 1 8 12 -1. + <_>6 7 8 6 2. + 0 + -2.8518449980765581e-003 + 0.5459626913070679 + 0.4610066115856171 + <_> + + <_> + + + + <_>5 3 3 3 -1. + <_>6 3 1 3 3. + 0 + 9.7465328872203827e-004 + 1 + 0.3670322895050049 + <_> + + + + <_>5 1 3 4 -1. + <_>6 1 1 4 3. + 0 + 1.4044740055396687e-005 + 0.4302386045455933 + 0.5691710710525513 + <_> + + <_> + + + + <_>15 14 4 6 -1. + <_>17 14 2 3 2. + <_>15 17 2 3 2. + 0 + -0.0175794307142496 + 0.6917321085929871 + 1 + <_> + + + + <_>12 11 6 8 -1. + <_>15 11 3 4 2. + <_>12 15 3 4 2. + 0 + -0.0523816794157028 + 0.7110040187835693 + 0.5060154795646668 + <_> + + <_> + + + + <_>8 7 2 4 -1. + <_>9 7 1 4 2. + 0 + -0.0112421102821827 + 0.8769189119338989 + 1 + <_> + + + + <_>6 11 3 1 -1. + <_>7 11 1 1 3. + 0 + -3.6728400737047195e-003 + 0.6519191861152649 + 0.4546068906784058 + <_> + + <_> + + + + <_>12 3 2 14 -1. + <_>12 3 1 14 2. + 0 + 3.5082760732620955e-003 + 0.5329865813255310 + 1 + <_> + + + + <_>12 11 6 2 -1. + <_>15 11 3 1 2. + <_>12 12 3 1 2. + 0 + 6.1679710634052753e-003 + 0.5220459103584290 + 0.2953518927097321 + <_> + + <_> + + + + <_>0 2 5 2 -1. + <_>0 3 5 1 2. + 0 + -9.7009900491684675e-004 + 1 + 0.5048633217811585 + <_> + + + + <_>0 0 15 1 -1. + <_>5 0 5 1 3. + 0 + -0.0109570100903511 + 0.5837358236312866 + 0.3020085990428925 + <_> + + <_> + + + + <_>12 11 6 2 -1. + <_>15 11 3 1 2. + <_>12 12 3 1 2. + 0 + -8.3272513002157211e-003 + 0.3158063888549805 + 1 + <_> + + + + <_>10 5 2 2 -1. + <_>10 5 1 2 2. + 0 + 2.9798380637657829e-005 + 0.4386389851570129 + 0.5443211197853088 + <_> + + <_> + + + + <_>9 7 2 2 -1. + <_>10 7 1 2 2. + 0 + 2.8244039276614785e-004 + 1 + 0.5625395774841309 + <_> + + + + <_>9 0 2 10 -1. + <_>9 0 1 5 2. + <_>10 5 1 5 2. + 0 + -8.1364117795601487e-004 + 0.5281198024749756 + 0.3401407897472382 + <_> + + <_> + + + + <_>18 14 2 2 -1. + <_>18 15 2 1 2. + 0 + 1.8008040497079492e-003 + 1 + 0.3471659123897553 + <_> + + + + <_>13 11 4 9 -1. + <_>13 14 4 3 3. + 0 + -6.9944779388606548e-003 + 0.4481697082519531 + 0.5385770201683044 + <_> + + <_> + + + + <_>8 13 2 2 -1. + <_>8 13 1 1 2. + <_>9 14 1 1 2. + 0 + 4.5625398342963308e-005 + 0.4492512941360474 + 1 + <_> + + + + <_>7 8 4 3 -1. + <_>7 9 4 1 3. + 0 + -7.3189922841265798e-004 + 0.4167312085628510 + 0.6021102070808411 + <_> + + <_> + + + + <_>8 9 4 2 -1. + <_>8 10 4 1 2. + 0 + -2.9980219551362097e-004 + 0.4148428142070770 + 1 + <_> + + + + <_>13 12 4 2 -1. + <_>13 13 4 1 2. + 0 + -2.9060940505587496e-005 + 0.5592089891433716 + 0.4073210954666138 + <_> + + <_> + + + + <_>6 14 2 2 -1. + <_>6 14 1 1 2. + <_>7 15 1 1 2. + 0 + -5.9742690064013004e-004 + 0.6088914275169373 + 1 + <_> + + + + <_>0 14 2 2 -1. + <_>0 15 2 1 2. + 0 + 1.4831830048933625e-004 + 0.5298305153846741 + 0.3761950135231018 + <_> + + <_> + + + + <_>7 13 6 3 -1. + <_>7 14 6 1 3. + 0 + -2.9441029764711857e-003 + 1 + 0.4716084897518158 + <_> + + + + <_>7 9 10 6 -1. + <_>7 11 10 2 3. + 0 + 0.1374121010303497 + 0.5101336836814880 + 0.0467468015849590 + <_> + + <_> + + + + <_>2 9 12 4 -1. + <_>6 9 4 4 3. + 0 + -0.0884141772985458 + 0.1181868985295296 + 1 + <_> + + + + <_>7 9 6 11 -1. + <_>10 9 3 11 2. + 0 + 0.0706102773547173 + 0.5119063258171082 + 0.7778441905975342 + <_> + + <_> + + + + <_>9 7 2 3 -1. + <_>9 8 2 1 3. + 0 + -7.7188978902995586e-003 + 0.1874134987592697 + 1 + <_> + + + + <_>9 14 4 3 -1. + <_>9 15 4 1 3. + 0 + 0.0151153998449445 + 0.4980027973651886 + 0.7005817890167236 + <_> + + <_> + + + + <_>2 3 3 17 -1. + <_>3 3 1 17 3. + 0 + 1.0671879863366485e-003 + 0.4482238888740540 + 1 + <_> + + + + <_>0 11 6 3 -1. + <_>0 12 6 1 3. + 0 + 7.0487911580130458e-004 + 0.6265752911567688 + 0.4402655065059662 + 47.7634506225585940 + 16 + -1 + <_> + + + <_> + + <_> + + + + <_>4 3 11 9 -1. + <_>4 6 11 3 3. + 0 + -0.0986907333135605 + 1 + 0.3999474942684174 + <_> + + + + <_>0 2 6 11 -1. + <_>3 2 3 11 2. + 0 + 0.0623734183609486 + 0.5247784852981567 + 0.8193575739860535 + <_> + + <_> + + + + <_>13 0 4 5 -1. + <_>13 0 2 5 2. + 0 + 1.9496519817039371e-003 + 0.3529816865921021 + 1 + <_> + + + + <_>9 7 6 4 -1. + <_>12 7 3 2 2. + <_>9 9 3 2 2. + 0 + -8.9139147894456983e-004 + 0.5852727890014648 + 0.3245978057384491 + <_> + + <_> + + + + <_>5 7 8 2 -1. + <_>9 7 4 2 2. + 0 + -5.5150408297777176e-004 + 0.3892816901206970 + 1 + <_> + + + + <_>1 8 15 1 -1. + <_>6 8 5 1 3. + 0 + -1.1721949558705091e-003 + 0.4335052073001862 + 0.6520624160766602 + <_> + + <_> + + + + <_>4 12 12 2 -1. + <_>8 12 4 2 3. + 0 + -7.4480642797425389e-004 + 1 + 0.4041135013103485 + <_> + + + + <_>13 0 4 10 -1. + <_>15 0 2 5 2. + <_>13 5 2 5 2. + 0 + -2.6264840271323919e-003 + 0.5624982118606567 + 0.3967525064945221 + <_> + + <_> + + + + <_>9 9 2 2 -1. + <_>9 10 2 1 2. + 0 + -3.9712688885629177e-004 + 0.3856112062931061 + 1 + <_> + + + + <_>3 9 6 2 -1. + <_>6 9 3 2 2. + 0 + 3.5984949208796024e-003 + 0.5997889041900635 + 0.4241614043712616 + <_> + + <_> + + + + <_>8 17 4 3 -1. + <_>8 18 4 1 3. + 0 + 5.3080618381500244e-003 + 1 + 0.6660168766975403 + <_> + + + + <_>8 3 9 2 -1. + <_>11 3 3 2 3. + 0 + 9.6319877775385976e-004 + 0.4481379091739655 + 0.5583487749099731 + <_> + + <_> + + + + <_>3 3 9 2 -1. + <_>6 3 3 2 3. + 0 + 5.0776469288393855e-004 + 0.3535459041595459 + 1 + <_> + + + + <_>5 0 9 14 -1. + <_>8 0 3 14 3. + 0 + 3.6223160568624735e-003 + 0.3409807085990906 + 0.5420687794685364 + <_> + + <_> + + + + <_>7 3 7 10 -1. + <_>7 8 7 5 2. + 0 + -0.0620614103972912 + 0.1934083998203278 + 1 + <_> + + + + <_>4 8 13 3 -1. + <_>4 9 13 1 3. + 0 + 6.4387189922854304e-004 + 0.4083626866340637 + 0.5490221977233887 + <_> + + <_> + + + + <_>3 12 14 4 -1. + <_>3 12 7 2 2. + <_>10 14 7 2 2. + 0 + 0.0262399092316628 + 1 + 0.2285708039999008 + <_> + + + + <_>8 12 4 2 -1. + <_>8 13 4 1 2. + 0 + 8.1940297968685627e-004 + 0.4648667871952057 + 0.6017355918884277 + <_> + + <_> + + + + <_>6 10 9 8 -1. + <_>6 14 9 4 2. + 0 + 2.3833119485061616e-004 + 1 + 0.3598038852214813 + <_> + + + + <_>9 12 2 8 -1. + <_>9 16 2 4 2. + 0 + -1.5869759954512119e-003 + 0.4259651005268097 + 0.5476434826850891 + <_> + + <_> + + + + <_>8 12 3 3 -1. + <_>8 13 3 1 3. + 0 + -6.7263417877256870e-003 + 0.6507238149642944 + 1 + <_> + + + + <_>5 5 4 10 -1. + <_>7 5 2 10 2. + 0 + 0.0110061103478074 + 0.5149409770965576 + 0.3362984955310822 + <_> + + <_> + + + + <_>14 15 3 3 -1. + <_>14 16 3 1 3. + 0 + 7.1445819921791553e-003 + 1 + 0.2672930061817169 + <_> + + + + <_>4 6 13 3 -1. + <_>4 7 13 1 3. + 0 + -4.7233798541128635e-003 + 0.5652182102203369 + 0.4298144876956940 + <_> + + <_> + + + + <_>3 15 3 3 -1. + <_>3 16 3 1 3. + 0 + 9.8437406122684479e-003 + 1 + 0.1151885986328125 + <_> + + + + <_>3 9 4 2 -1. + <_>3 9 2 1 2. + <_>5 10 2 1 2. + 0 + 1.5124640412977897e-005 + 0.4373598098754883 + 0.5612128973007202 + <_> + + <_> + + + + <_>0 11 20 4 -1. + <_>10 11 10 2 2. + <_>0 13 10 2 2. + 0 + 0.0399088710546494 + 0.5204648971557617 + 1 + <_> + + + + <_>8 15 4 3 -1. + <_>8 16 4 1 3. + 0 + 5.3903679363429546e-003 + 0.4813467860221863 + 0.6361209154129028 + <_> + + <_> + + + + <_>0 11 20 4 -1. + <_>0 11 10 2 2. + <_>10 13 10 2 2. + 0 + -0.0399088710546494 + 0.1506870985031128 + 1 + <_> + + + + <_>8 15 4 3 -1. + <_>8 16 4 1 3. + 0 + 5.3903679363429546e-003 + 0.4581694900989533 + 0.6200240850448608 + <_> + + <_> + + + + <_>10 13 1 6 -1. + <_>10 16 1 3 2. + 0 + 6.7005190066993237e-003 + 1 + 0.3432235121726990 + <_> + + + + <_>2 1 18 2 -1. + <_>11 1 9 1 2. + <_>2 2 9 1 2. + 0 + -0.0126237897202373 + 0.3088226914405823 + 0.5226737856864929 + <_> + + <_> + + + + <_>8 14 3 3 -1. + <_>8 15 3 1 3. + 0 + 0.0118066100403667 + 1 + 0.7187939286231995 + <_> + + + + <_>4 1 6 1 -1. + <_>6 1 2 1 3. + 0 + -3.4257229417562485e-003 + 0.3120814859867096 + 0.5065844058990479 + <_> + + <_> + + + + <_>11 13 1 3 -1. + <_>11 14 1 1 3. + 0 + 3.9385299896821380e-004 + 0.4754584133625031 + 1 + <_> + + + + <_>13 5 2 12 -1. + <_>13 11 2 6 2. + 0 + 0.0343881882727146 + 0.5261657834053040 + 0.3350174129009247 + <_> + + <_> + + + + <_>1 14 18 6 -1. + <_>1 16 18 2 3. + 0 + -0.0750099867582321 + 0.1713480949401856 + 1 + <_> + + + + <_>8 13 1 3 -1. + <_>8 14 1 1 3. + 0 + 4.9022492021322250e-004 + 0.4725801944732666 + 0.5956469178199768 + <_> + + <_> + + + + <_>7 13 6 3 -1. + <_>7 14 6 1 3. + 0 + -8.5525289177894592e-003 + 0.6558222770690918 + 1 + <_> + + + + <_>9 10 3 2 -1. + <_>9 11 3 1 2. + 0 + 1.3135520566720515e-004 + 0.4835400879383087 + 0.5586913824081421 + <_> + + <_> + + + + <_>5 1 3 3 -1. + <_>6 1 1 3 3. + 0 + 4.7948658466339111e-003 + 1 + 0.2645705938339233 + <_> + + + + <_>5 5 6 5 -1. + <_>8 5 3 5 2. + 0 + 2.0124691072851419e-003 + 0.3657945096492767 + 0.5124772191047669 + <_> + + <_> + + + + <_>7 5 6 14 -1. + <_>7 12 6 7 2. + 0 + -0.1178547963500023 + 0.2385654002428055 + 1 + <_> + + + + <_>7 16 6 2 -1. + <_>9 16 2 2 3. + 0 + 1.5575019642710686e-003 + 0.5490474104881287 + 0.4274747967720032 + <_> + + <_> + + + + <_>0 2 2 12 -1. + <_>1 2 1 12 2. + 0 + -0.0155737595632672 + 0.6938900947570801 + 1 + <_> + + + + <_>1 0 5 3 -1. + <_>1 1 5 1 3. + 0 + -2.1854790393263102e-003 + 0.3645988106727600 + 0.5092526078224182 + <_> + + <_> + + + + <_>12 4 3 3 -1. + <_>12 5 3 1 3. + 0 + 2.9272339306771755e-003 + 0.4685808122158051 + 1 + <_> + + + + <_>12 6 3 3 -1. + <_>12 7 3 1 3. + 0 + 6.4663668163120747e-003 + 0.4973410069942474 + 0.7726097106933594 + <_> + + <_> + + + + <_>5 4 3 3 -1. + <_>5 5 3 1 3. + 0 + -7.6140360906720161e-003 + 0.6877465844154358 + 1 + <_> + + + + <_>5 6 3 3 -1. + <_>5 7 3 1 3. + 0 + 4.1512572206556797e-003 + 0.4788525104522705 + 0.6921657919883728 + <_> + + <_> + + + + <_>8 12 4 8 -1. + <_>10 12 2 4 2. + <_>8 16 2 4 2. + 0 + 2.7711640577763319e-003 + 0.5481839776039124 + 1 + <_> + + + + <_>2 17 18 2 -1. + <_>11 17 9 1 2. + <_>2 18 9 1 2. + 0 + -0.0128361098468304 + 0.3800162971019745 + 0.5204492807388306 + <_> + + <_> + + + + <_>9 3 2 2 -1. + <_>9 4 2 1 2. + 0 + -2.4380050599575043e-003 + 0.2582435011863709 + 1 + <_> + + + + <_>8 5 4 6 -1. + <_>8 7 4 2 3. + 0 + 2.1713329479098320e-003 + 0.4961163103580475 + 0.3215202987194061 + <_> + + <_> + + + + <_>9 0 8 6 -1. + <_>9 2 8 2 3. + 0 + 6.2800728483125567e-004 + 1 + 0.5460423827171326 + <_> + + + + <_>1 0 18 4 -1. + <_>7 0 6 4 3. + 0 + -9.7982389852404594e-003 + 0.6046543717384338 + 0.4939922094345093 + <_> + + <_> + + + + <_>0 0 4 8 -1. + <_>2 0 2 8 2. + 0 + 7.3543828912079334e-003 + 1 + 0.5291094183921814 + <_> + + + + <_>0 4 6 9 -1. + <_>2 4 2 9 3. + 0 + -0.0146650401875377 + 0.5446122884750366 + 0.3567362129688263 + <_> + + <_> + + + + <_>1 4 18 2 -1. + <_>7 4 6 2 3. + 0 + 0.0302445106208324 + 0.5518329143524170 + 1 + <_> + + + + <_>8 16 12 4 -1. + <_>14 16 6 2 2. + <_>8 18 6 2 2. + 0 + -0.0566602088510990 + 0.6930978894233704 + 0.5093387961387634 + <_> + + <_> + + + + <_>0 0 18 2 -1. + <_>0 0 9 1 2. + <_>9 1 9 1 2. + 0 + -5.6967479176819324e-003 + 0.3201526105403900 + 1 + <_> + + + + <_>3 0 3 18 -1. + <_>4 0 1 18 3. + 0 + 0.0308067705482244 + 0.4989246129989624 + 0.2277054041624069 + <_> + + <_> + + + + <_>14 9 4 7 -1. + <_>14 9 2 7 2. + 0 + 2.2748769260942936e-003 + 0.4810931086540222 + 1 + <_> + + + + <_>15 14 2 2 -1. + <_>15 15 2 1 2. + 0 + 2.0436900667846203e-003 + 0.5283867120742798 + 0.3255924880504608 + <_> + + <_> + + + + <_>2 9 4 7 -1. + <_>4 9 2 7 2. + 0 + -8.6277956143021584e-003 + 0.6266536116600037 + 1 + <_> + + + + <_>3 14 2 2 -1. + <_>3 15 2 1 2. + 0 + 6.5113382879644632e-004 + 0.5097137093544006 + 0.3191910088062286 + <_> + + <_> + + + + <_>11 0 6 6 -1. + <_>11 2 6 2 3. + 0 + 8.8188261725008488e-004 + 0.4549585878849030 + 1 + <_> + + + + <_>14 0 2 6 -1. + <_>15 0 1 3 2. + <_>14 3 1 3 2. + 0 + -0.0145949097350240 + 0.2645038962364197 + 0.5153868198394775 + <_> + + <_> + + + + <_>7 11 2 2 -1. + <_>7 11 1 1 2. + <_>8 12 1 1 2. + 0 + -1.2304580304771662e-003 + 0.6197584867477417 + 1 + <_> + + + + <_>7 10 2 2 -1. + <_>8 10 1 2 2. + 0 + -2.1867299801670015e-004 + 0.5469198822975159 + 0.4206855893135071 + <_> + + <_> + + + + <_>9 14 2 6 -1. + <_>9 17 2 3 2. + 0 + -1.0909959673881531e-003 + 0.4140760004520416 + 1 + <_> + + + + <_>12 18 4 2 -1. + <_>12 19 4 1 2. + 0 + 3.5210378700867295e-004 + 0.5476608872413635 + 0.4155021011829376 + <_> + + <_> + + + + <_>8 17 4 3 -1. + <_>8 18 4 1 3. + 0 + -7.2563779540359974e-003 + 0.7160469293594360 + 1 + <_> + + + + <_>2 18 8 2 -1. + <_>2 19 8 1 2. + 0 + 1.4701850013807416e-003 + 0.5240808129310608 + 0.3729662895202637 + <_> + + <_> + + + + <_>2 9 16 3 -1. + <_>2 10 16 1 3. + 0 + 1.1472719779703766e-004 + 0.4033798873424530 + 1 + <_> + + + + <_>9 9 2 2 -1. + <_>9 10 2 1 2. + 0 + 3.0506469774991274e-003 + 0.5263985991477966 + 0.3560093045234680 + <_> + + <_> + + + + <_>5 14 2 4 -1. + <_>5 14 1 2 2. + <_>6 16 1 2 2. + 0 + 2.6269949739798903e-004 + 0.4569799900054932 + 1 + <_> + + + + <_>8 9 4 2 -1. + <_>8 9 2 1 2. + <_>10 10 2 1 2. + 0 + -3.6365550477057695e-003 + 0.3042570948600769 + 0.5868253707885742 + <_> + + <_> + + + + <_>9 5 2 5 -1. + <_>9 5 1 5 2. + 0 + -8.4893293678760529e-003 + 1 + 0.4914157092571259 + <_> + + + + <_>9 9 3 2 -1. + <_>10 9 1 2 3. + 0 + 5.8107408694922924e-003 + 0.4918529987335205 + 0.6266962885856628 + <_> + + <_> + + + + <_>8 9 3 2 -1. + <_>9 9 1 2 3. + 0 + 7.5583951547741890e-004 + 1 + 0.5633236169815064 + <_> + + + + <_>8 8 3 6 -1. + <_>9 8 1 6 3. + 0 + -2.2017690353095531e-003 + 0.5553916096687317 + 0.3827646076679230 + <_> + + <_> + + + + <_>8 12 4 8 -1. + <_>10 12 2 4 2. + <_>8 16 2 4 2. + 0 + 2.7908938936889172e-003 + 0.5498697757720947 + 1 + <_> + + + + <_>2 17 16 2 -1. + <_>10 17 8 1 2. + <_>2 18 8 1 2. + 0 + -1.8228569533675909e-003 + 0.4382283091545105 + 0.5424032807350159 + <_> + + <_> + + + + <_>8 12 3 8 -1. + <_>9 12 1 8 3. + 0 + -7.2495508939027786e-003 + 0.2888121902942658 + 1 + <_> + + + + <_>3 10 1 3 -1. + <_>3 11 1 1 3. + 0 + -6.8744522286579013e-004 + 0.3472655117511749 + 0.5076370835304260 + <_> + + <_> + + + + <_>9 14 10 6 -1. + <_>14 14 5 3 2. + <_>9 17 5 3 2. + 0 + 2.5174440816044807e-003 + 0.4661205112934113 + 1 + <_> + + + + <_>14 13 3 6 -1. + <_>14 15 3 2 3. + 0 + -0.0101513797417283 + 0.3744775056838989 + 0.5294001102447510 + <_> + + <_> + + + + <_>1 19 18 1 -1. + <_>7 19 6 1 3. + 0 + -4.1399952024221420e-003 + 1 + 0.4660485088825226 + <_> + + + + <_>2 10 15 2 -1. + <_>7 10 5 2 3. + 0 + -4.7078551724553108e-003 + 0.4175061881542206 + 0.6916306018829346 + <_> + + <_> + + + + <_>4 17 16 3 -1. + <_>4 18 16 1 3. + 0 + 0.0419810414314270 + 1 + 0.2018215060234070 + <_> + + + + <_>8 6 4 9 -1. + <_>8 9 4 3 3. + 0 + -0.0142729999497533 + 0.7511197924613953 + 0.5032083988189697 + <_> + + <_> + + + + <_>9 16 2 4 -1. + <_>9 16 1 2 2. + <_>10 18 1 2 2. + 0 + 4.0869521908462048e-003 + 1 + 0.2504513859748840 + <_> + + + + <_>5 5 10 8 -1. + <_>5 9 10 4 2. + 0 + 1.7606799956411123e-003 + 0.3301401138305664 + 0.5218337178230286 + <_> + + <_> + + + + <_>13 1 4 2 -1. + <_>13 1 2 2 2. + 0 + 1.2550549581646919e-004 + 0.4614442884922028 + 1 + <_> + + + + <_>14 0 3 6 -1. + <_>14 2 3 2 3. + 0 + -2.9503209516406059e-003 + 0.4619950056076050 + 0.5247030258178711 + <_> + + <_> + + + + <_>6 7 2 2 -1. + <_>6 7 1 1 2. + <_>7 8 1 1 2. + 0 + -1.1312420247122645e-003 + 0.6314368247985840 + 1 + <_> + + + + <_>7 1 6 1 -1. + <_>9 1 2 1 3. + 0 + -1.6983180539682508e-003 + 0.3401306867599487 + 0.5055527091026306 + <_> + + <_> + + + + <_>9 11 3 3 -1. + <_>9 12 3 1 3. + 0 + -0.0114578204229474 + 1 + 0.4939996004104614 + <_> + + + + <_>12 9 3 3 -1. + <_>13 9 1 3 3. + 0 + -8.4962565451860428e-003 + 0.2965450882911682 + 0.5194367766380310 + <_> + + <_> + + + + <_>8 11 3 3 -1. + <_>8 12 3 1 3. + 0 + 0.0119190895929933 + 1 + 0.7886998057365418 + <_> + + + + <_>5 9 3 3 -1. + <_>6 9 1 3 3. + 0 + 6.4416420646011829e-003 + 0.5106986761093140 + 0.2967146039009094 + <_> + + <_> + + + + <_>10 11 1 3 -1. + <_>10 12 1 1 3. + 0 + -8.7857811013236642e-004 + 0.5714371204376221 + 1 + <_> + + + + <_>7 9 6 4 -1. + <_>10 9 3 2 2. + <_>7 11 3 2 2. + 0 + -2.0312711130827665e-003 + 0.4481200873851776 + 0.5384911894798279 + <_> + + <_> + + + + <_>4 7 2 2 -1. + <_>4 7 1 1 2. + <_>5 8 1 1 2. + 0 + -1.5262430533766747e-003 + 0.6193568706512451 + 1 + <_> + + + + <_>5 7 3 1 -1. + <_>6 7 1 1 3. + 0 + 4.2860880494117737e-003 + 0.4339885115623474 + 0.7697299122810364 + <_> + + <_> + + + + <_>18 3 2 3 -1. + <_>18 4 2 1 3. + 0 + 3.5010920837521553e-003 + 1 + 0.3171389102935791 + <_> + + + + <_>13 1 4 2 -1. + <_>13 1 2 2 2. + 0 + 0.0125876702368259 + 0.5246698856353760 + 0.4241208136081696 + <_> + + <_> + + + + <_>3 1 4 2 -1. + <_>5 1 2 2 2. + 0 + 2.6207490009255707e-004 + 0.4231899976730347 + 1 + <_> + + + + <_>3 0 5 2 -1. + <_>3 1 5 1 2. + 0 + 4.4701730075757951e-005 + 0.4174138903617859 + 0.5919603705406189 + <_> + + <_> + + + + <_>14 7 6 4 -1. + <_>17 7 3 2 2. + <_>14 9 3 2 2. + 0 + 7.8084698179736733e-004 + 0.4277389049530029 + 1 + <_> + + + + <_>4 8 16 2 -1. + <_>4 9 16 1 2. + 0 + 8.8851212058216333e-004 + 0.3720161020755768 + 0.5226818919181824 + <_> + + <_> + + + + <_>2 11 5 6 -1. + <_>2 13 5 2 3. + 0 + 2.3369069676846266e-003 + 0.5478066802024841 + 1 + <_> + + + + <_>5 16 2 4 -1. + <_>5 16 1 2 2. + <_>6 18 1 2 2. + 0 + 1.6688359901309013e-003 + 0.3628678917884827 + 0.6150004863739014 + <_> + + <_> + + + + <_>15 6 2 12 -1. + <_>16 6 1 6 2. + <_>15 12 1 6 2. + 0 + 3.0844469438306987e-004 + 0.4747075140476227 + 1 + <_> + + + + <_>13 3 6 16 -1. + <_>15 3 2 16 3. + 0 + 3.4617560449987650e-003 + 0.4580138027667999 + 0.5585681796073914 + <_> + + <_> + + + + <_>4 5 12 12 -1. + <_>4 5 6 6 2. + <_>10 11 6 6 2. + 0 + 0.0189613103866577 + 0.5298801064491272 + 1 + <_> + + + + <_>5 1 10 13 -1. + <_>10 1 5 13 2. + 0 + 0.1734731048345566 + 0.3698385059833527 + 0.8498619794845581 + <_> + + <_> + + + + <_>11 5 2 2 -1. + <_>12 5 1 1 2. + <_>11 6 1 1 2. + 0 + 2.0020549709443003e-004 + 1 + 0.5565661787986755 + <_> + + + + <_>13 5 1 3 -1. + <_>13 6 1 1 3. + 0 + 1.0967060225084424e-003 + 0.4795713126659393 + 0.6286259889602661 + <_> + + <_> + + + + <_>7 4 2 4 -1. + <_>7 4 1 2 2. + <_>8 6 1 2 2. + 0 + 1.5107099898159504e-004 + 0.4052405953407288 + 1 + <_> + + + + <_>7 5 6 4 -1. + <_>10 5 3 4 2. + 0 + -3.4463501069694757e-003 + 0.6173015236854553 + 0.4414263963699341 + <_> + + <_> + + + + <_>12 4 4 6 -1. + <_>14 4 2 3 2. + <_>12 7 2 3 2. + 0 + 8.5176620632410049e-003 + 1 + 0.3570570945739746 + <_> + + + + <_>12 11 7 6 -1. + <_>12 13 7 2 3. + 0 + -0.0358121097087860 + 0.3151328861713409 + 0.5252702832221985 + <_> + + <_> + + + + <_>5 6 6 6 -1. + <_>7 6 2 6 3. + 0 + -0.0211554002016783 + 0.6124721169471741 + 1 + <_> + + + + <_>9 8 2 2 -1. + <_>9 9 2 1 2. + 0 + 8.9890940580517054e-004 + 0.5169975757598877 + 0.3596271872520447 + <_> + + <_> + + + + <_>15 6 2 2 -1. + <_>16 6 1 1 2. + <_>15 7 1 1 2. + 0 + -1.5613760333508253e-003 + 1 + 0.4914987981319428 + <_> + + + + <_>14 7 4 4 -1. + <_>16 7 2 2 2. + <_>14 9 2 2 2. + 0 + 6.7120860330760479e-004 + 0.4546211063861847 + 0.5395811796188355 + <_> + + <_> + + + + <_>5 5 6 2 -1. + <_>7 5 2 2 3. + 0 + -0.0215970296412706 + 0.1903133988380432 + 1 + <_> + + + + <_>1 19 18 1 -1. + <_>7 19 6 1 3. + 0 + -0.0249472297728062 + 0.6974077224731445 + 0.4967716038227081 + <_> + + <_> + + + + <_>12 3 3 3 -1. + <_>12 4 3 1 3. + 0 + 1.8725979607552290e-003 + 0.4748947918415070 + 1 + <_> + + + + <_>16 0 2 3 -1. + <_>16 1 2 1 3. + 0 + 6.3912719488143921e-003 + 0.5180178284645081 + 0.2924321889877319 + <_> + + <_> + + + + <_>5 3 3 3 -1. + <_>5 4 3 1 3. + 0 + -9.1552399098873138e-003 + 0.7665870189666748 + 1 + <_> + + + + <_>2 0 2 3 -1. + <_>2 1 2 1 3. + 0 + 2.1715660113841295e-003 + 0.5215551257133484 + 0.3365719020366669 + <_> + + <_> + + + + <_>15 6 2 2 -1. + <_>16 6 1 1 2. + <_>15 7 1 1 2. + 0 + 1.2330369791015983e-003 + 1 + 0.6260957717895508 + <_> + + + + <_>10 13 1 6 -1. + <_>10 16 1 3 2. + 0 + -4.0785901364870369e-004 + 0.4533509910106659 + 0.5386489033699036 + <_> + + <_> + + + + <_>0 7 10 2 -1. + <_>0 7 5 1 2. + <_>5 8 5 1 2. + 0 + 4.6437609125860035e-004 + 0.4103496074676514 + 1 + <_> + + + + <_>3 10 6 2 -1. + <_>3 11 6 1 2. + 0 + -1.1600199650274590e-004 + 0.5830391049385071 + 0.4304105937480927 + <_> + + <_> + + + + <_>12 18 4 2 -1. + <_>12 19 4 1 2. + 0 + -0.0127187203615904 + 0.2132582962512970 + 1 + <_> + + + + <_>12 18 2 2 -1. + <_>13 18 1 1 2. + <_>12 19 1 1 2. + 0 + 8.9431880041956902e-005 + 0.4872891008853912 + 0.5458915233612061 + <_> + + <_> + + + + <_>6 19 2 1 -1. + <_>7 19 1 1 2. + 0 + -3.3913689549081028e-004 + 0.3974364995956421 + 1 + <_> + + + + <_>0 4 2 16 -1. + <_>0 4 1 8 2. + <_>1 12 1 8 2. + 0 + -0.0180263407528400 + 0.7568550705909729 + 0.5045611858367920 + <_> + + <_> + + + + <_>16 1 4 9 -1. + <_>16 4 4 3 3. + 0 + 6.9179181009531021e-003 + 1 + 0.3966299891471863 + <_> + + + + <_>10 2 1 2 -1. + <_>10 3 1 1 2. + 0 + -1.1839679791592062e-004 + 0.4198082983493805 + 0.5435804128646851 + <_> + + <_> + + + + <_>4 14 4 6 -1. + <_>4 14 2 3 2. + <_>6 17 2 3 2. + 0 + -3.9474181830883026e-003 + 0.6369457840919495 + 1 + <_> + + + + <_>4 15 1 4 -1. + <_>4 17 1 2 2. + 0 + 6.0050919273635373e-005 + 0.5269566774368286 + 0.3812243044376373 + <_> + + <_> + + + + <_>0 2 20 4 -1. + <_>10 2 10 2 2. + <_>0 4 10 2 2. + 0 + 9.1423643752932549e-003 + 1 + 0.4156762957572937 + <_> + + + + <_>14 5 2 8 -1. + <_>14 9 2 4 2. + 0 + 2.1305440168362111e-004 + 0.3523533046245575 + 0.5349454283714294 + <_> + + <_> + + + + <_>5 12 4 5 -1. + <_>7 12 2 5 2. + 0 + -2.0855850016232580e-004 + 1 + 0.4403322041034699 + <_> + + + + <_>0 13 9 6 -1. + <_>0 15 9 2 3. + 0 + 1.3130389852449298e-003 + 0.6058161258697510 + 0.4468218982219696 + <_> + + <_> + + + + <_>9 14 11 3 -1. + <_>9 15 11 1 3. + 0 + -2.9134768992662430e-003 + 1 + 0.4825705885887146 + <_> + + + + <_>7 14 7 3 -1. + <_>7 15 7 1 3. + 0 + 2.9645769391208887e-003 + 0.4835998117923737 + 0.6039277911186218 + <_> + + <_> + + + + <_>3 6 2 2 -1. + <_>3 6 1 1 2. + <_>4 7 1 1 2. + 0 + 1.7772549763321877e-003 + 1 + 0.6871827244758606 + <_> + + + + <_>6 7 2 7 -1. + <_>7 7 1 7 2. + 0 + -7.7136349864304066e-003 + 0.2842220962047577 + 0.5145428180694580 + <_> + + <_> + + + + <_>14 5 1 3 -1. + <_>14 6 1 1 3. + 0 + 5.1027478184551001e-004 + 1 + 0.6024426221847534 + <_> + + + + <_>13 4 4 3 -1. + <_>13 5 4 1 3. + 0 + 1.7460630042478442e-003 + 0.4756610095500946 + 0.5721154212951660 + <_> + + <_> + + + + <_>2 7 4 4 -1. + <_>2 7 2 2 2. + <_>4 9 2 2 2. + 0 + 3.8068278809078038e-004 + 1 + 0.4931069016456604 + <_> + + + + <_>2 9 13 6 -1. + <_>2 12 13 3 2. + 0 + 2.8228890150785446e-003 + 0.3311698138713837 + 0.6227598190307617 + <_> + + <_> + + + + <_>10 1 3 4 -1. + <_>11 1 1 4 3. + 0 + -5.3000478073954582e-003 + 1 + 0.5232092738151550 + <_> + + + + <_>9 8 5 2 -1. + <_>9 9 5 1 2. + 0 + 4.4951299059903249e-005 + 0.3995231986045837 + 0.5314797759056091 + <_> + + <_> + + + + <_>0 14 11 3 -1. + <_>0 15 11 1 3. + 0 + 3.2752458937466145e-003 + 0.4481619894504547 + 1 + <_> + + + + <_>8 11 2 8 -1. + <_>8 15 2 4 2. + 0 + -2.8162579983472824e-003 + 0.3907971978187561 + 0.6671640872955322 + <_> + + <_> + + + + <_>5 11 10 6 -1. + <_>5 14 10 3 2. + 0 + 1.4112279750406742e-003 + 0.5357010960578919 + 1 + <_> + + + + <_>5 13 15 5 -1. + <_>10 13 5 5 3. + 0 + 8.3062034100294113e-003 + 0.4770965874195099 + 0.5570099949836731 + <_> + + <_> + + + + <_>8 10 1 10 -1. + <_>8 15 1 5 2. + 0 + 2.2164839319884777e-003 + 0.4947124123573303 + 1 + <_> + + + + <_>4 14 6 2 -1. + <_>6 14 2 2 3. + 0 + -4.9868631176650524e-003 + 0.5241307020187378 + 0.2512654960155487 + <_> + + <_> + + + + <_>7 14 7 3 -1. + <_>7 15 7 1 3. + 0 + -3.6664260551333427e-003 + 1 + 0.4619553983211517 + <_> + + + + <_>7 16 9 3 -1. + <_>7 17 9 1 3. + 0 + -0.0105812298133969 + 0.6301718950271606 + 0.4973031878471375 + <_> + + <_> + + + + <_>8 7 3 3 -1. + <_>8 8 3 1 3. + 0 + 7.3366491124033928e-003 + 1 + 0.2870970070362091 + <_> + + + + <_>3 5 1 6 -1. + <_>3 8 1 3 2. + 0 + -3.9318940252996981e-004 + 0.4252805113792419 + 0.5579246878623962 + <_> + + <_> + + + + <_>6 5 11 2 -1. + <_>6 6 11 1 2. + 0 + -8.1375334411859512e-003 + 0.5747315883636475 + 1 + <_> + + + + <_>9 0 3 2 -1. + <_>10 0 1 2 3. + 0 + 2.4809150490909815e-003 + 0.5203374028205872 + 0.3903566896915436 + <_> + + <_> + + + + <_>5 5 1 3 -1. + <_>5 6 1 1 3. + 0 + 8.8749779388308525e-004 + 1 + 0.5534321069717407 + <_> + + + + <_>8 7 3 2 -1. + <_>9 7 1 2 3. + 0 + -4.2194919660687447e-004 + 0.5338044166564941 + 0.3925840854644775 + <_> + + <_> + + + + <_>5 2 10 6 -1. + <_>10 2 5 3 2. + <_>5 5 5 3 2. + 0 + -7.9790111631155014e-003 + 0.4144316017627716 + 1 + <_> + + + + <_>8 4 6 4 -1. + <_>8 4 3 4 2. + 0 + 1.1439629597589374e-003 + 0.4701372981071472 + 0.5281736254692078 + <_> + + <_> + + + + <_>8 16 3 4 -1. + <_>9 16 1 4 3. + 0 + 7.5542130507528782e-003 + 1 + 0.2527256011962891 + <_> + + + + <_>9 13 2 6 -1. + <_>9 13 1 3 2. + <_>10 16 1 3 2. + 0 + 1.0288399644196033e-003 + 0.5605146288871765 + 0.4297856092453003 + <_> + + <_> + + + + <_>9 8 3 1 -1. + <_>10 8 1 1 3. + 0 + -1.7234670231118798e-003 + 1 + 0.4839682877063751 + <_> + + + + <_>2 5 18 15 -1. + <_>2 10 18 5 3. + 0 + 0.5758669972419739 + 0.5110502839088440 + 0.0804893299937248 + 44.2512817382812500 + 17 + -1 + <_> + + + <_> + + <_> + + + + <_>1 3 6 2 -1. + <_>4 3 3 2 2. + 0 + 6.6640521399676800e-003 + 0.3828920125961304 + 1 + <_> + + + + <_>7 6 6 2 -1. + <_>9 6 2 2 3. + 0 + 8.9905522763729095e-003 + 0.4858429133892059 + 0.7354959249496460 + <_> + + <_> + + + + <_>8 17 4 3 -1. + <_>8 18 4 1 3. + 0 + 5.7154200039803982e-003 + 1 + 0.6723223924636841 + <_> + + + + <_>10 13 2 3 -1. + <_>10 14 2 1 3. + 0 + 1.1257929727435112e-003 + 0.4429577887058258 + 0.6070777773857117 + <_> + + <_> + + + + <_>0 10 20 4 -1. + <_>0 12 20 2 2. + 0 + -9.1789010912179947e-004 + 1 + 0.3076345026493073 + <_> + + + + <_>5 7 6 4 -1. + <_>5 7 3 2 2. + <_>8 9 3 2 2. + 0 + -1.0492859873920679e-003 + 0.5593643784523010 + 0.3651022911071777 + <_> + + <_> + + + + <_>11 12 1 2 -1. + <_>11 13 1 1 2. + 0 + 3.5453929740469903e-005 + 0.4277968108654022 + 1 + <_> + + + + <_>10 10 2 3 -1. + <_>10 11 2 1 3. + 0 + 2.9015709878876805e-004 + 0.4583545029163361 + 0.5284683108329773 + <_> + + <_> + + + + <_>9 5 2 2 -1. + <_>9 6 2 1 2. + 0 + 1.6071660502348095e-004 + 1 + 0.3798192143440247 + <_> + + + + <_>4 4 1 10 -1. + <_>4 9 1 5 2. + 0 + -5.2961107576265931e-004 + 0.3850437104701996 + 0.5939688086509705 + <_> + + <_> + + + + <_>11 18 4 2 -1. + <_>11 18 2 2 2. + 0 + 2.6682569296099246e-004 + 0.4123024940490723 + 1 + <_> + + + + <_>12 18 3 2 -1. + <_>12 19 3 1 2. + 0 + -1.3492540165316314e-004 + 0.5760599970817566 + 0.4237645864486694 + <_> + + <_> + + + + <_>0 6 16 6 -1. + <_>0 6 8 3 2. + <_>8 9 8 3 2. + 0 + -0.0108416797593236 + 0.3929921090602875 + 1 + <_> + + + + <_>7 6 4 12 -1. + <_>7 12 4 6 2. + 0 + 0.0120778298005462 + 0.5761923193931580 + 0.2780444920063019 + <_> + + <_> + + + + <_>11 18 4 2 -1. + <_>11 18 2 2 2. + 0 + 2.2128869313746691e-003 + 0.4794507026672363 + 1 + <_> + + + + <_>12 18 3 2 -1. + <_>12 19 3 1 2. + 0 + -0.0152661902830005 + 0.0740558803081512 + 0.5153577923774719 + <_> + + <_> + + + + <_>8 12 1 2 -1. + <_>8 13 1 1 2. + 0 + 6.7929533543065190e-005 + 1 + 0.5858737826347351 + <_> + + + + <_>8 13 1 3 -1. + <_>8 14 1 1 3. + 0 + 1.7633590323384851e-004 + 0.3567610979080200 + 0.5598962903022766 + <_> + + <_> + + + + <_>11 18 4 2 -1. + <_>11 18 2 2 2. + 0 + 8.1311381654813886e-004 + 1 + 0.5346850752830505 + <_> + + + + <_>14 12 4 6 -1. + <_>14 12 2 6 2. + 0 + 3.2630451023578644e-003 + 0.4782536923885346 + 0.5456753969192505 + <_> + + <_> + + + + <_>6 0 3 4 -1. + <_>7 0 1 4 3. + 0 + -3.9503918960690498e-003 + 0.2831811904907227 + 1 + <_> + + + + <_>4 0 2 8 -1. + <_>4 0 1 4 2. + <_>5 4 1 4 2. + 0 + -3.9864578866399825e-004 + 0.5485215783119202 + 0.4159697890281677 + <_> + + <_> + + + + <_>11 17 9 3 -1. + <_>14 17 3 3 3. + 0 + -0.0114325201138854 + 0.5639101266860962 + 1 + <_> + + + + <_>16 2 4 5 -1. + <_>16 2 2 5 2. + 0 + 5.3339172154664993e-003 + 0.4596984088420868 + 0.5931242704391480 + <_> + + <_> + + + + <_>0 2 5 9 -1. + <_>0 5 5 3 3. + 0 + 8.3193257451057434e-003 + 1 + 0.3230620026588440 + <_> + + + + <_>7 2 3 2 -1. + <_>8 2 1 2 3. + 0 + -4.2479918920435011e-004 + 0.3795293867588043 + 0.5408611297607422 + <_> + + <_> + + + + <_>11 17 9 3 -1. + <_>14 17 3 3 3. + 0 + -0.1118943020701408 + 0.1132297962903976 + 1 + <_> + + + + <_>16 2 4 5 -1. + <_>16 2 2 5 2. + 0 + -7.5553781352937222e-003 + 0.6339370012283325 + 0.4838770925998688 + <_> + + <_> + + + + <_>0 17 9 3 -1. + <_>3 17 3 3 3. + 0 + -7.0337029173970222e-003 + 0.5665255188941956 + 1 + <_> + + + + <_>0 2 4 5 -1. + <_>2 2 2 5 2. + 0 + -0.0148336803540587 + 0.6751418113708496 + 0.4140945076942444 + <_> + + <_> + + + + <_>5 11 10 9 -1. + <_>5 14 10 3 3. + 0 + 8.7506724521517754e-003 + 1 + 0.3561258912086487 + <_> + + + + <_>9 6 3 3 -1. + <_>9 7 3 1 3. + 0 + 1.6645010327920318e-003 + 0.5347279906272888 + 0.3649779856204987 + <_> + + <_> + + + + <_>3 17 5 3 -1. + <_>3 18 5 1 3. + 0 + 9.4900820404291153e-003 + 1 + 0.2754656076431274 + <_> + + + + <_>7 5 4 7 -1. + <_>9 5 2 7 2. + 0 + 1.1133110383525491e-003 + 0.4225992858409882 + 0.5629178881645203 + <_> + + <_> + + + + <_>9 8 2 5 -1. + <_>9 8 1 5 2. + 0 + 9.4940755516290665e-003 + 0.4906036853790283 + 1 + <_> + + + + <_>2 2 18 2 -1. + <_>2 3 18 1 2. + 0 + -1.5396620146930218e-003 + 0.4007051885128021 + 0.5380709171295166 + <_> + + <_> + + + + <_>2 8 15 6 -1. + <_>7 8 5 6 3. + 0 + 0.1343495994806290 + 1 + 0.2214671969413757 + <_> + + + + <_>9 8 2 5 -1. + <_>10 8 1 5 2. + 0 + -9.4940755516290665e-003 + 0.7353156208992004 + 0.5005033016204834 + <_> + + <_> + + + + <_>12 10 4 6 -1. + <_>12 12 4 2 3. + 0 + 0.0200117900967598 + 1 + 0.3327906131744385 + <_> + + + + <_>14 3 6 2 -1. + <_>14 4 6 1 2. + 0 + -1.8875009845942259e-003 + 0.3915289044380188 + 0.5401849746704102 + <_> + + <_> + + + + <_>5 5 2 3 -1. + <_>5 6 2 1 3. + 0 + 7.1842782199382782e-003 + 1 + 0.7176604866981506 + <_> + + + + <_>4 6 3 3 -1. + <_>4 7 3 1 3. + 0 + 1.6976969782263041e-003 + 0.4526978135108948 + 0.6076912879943848 + <_> + + <_> + + + + <_>14 12 3 3 -1. + <_>14 13 3 1 3. + 0 + 4.9219978973269463e-003 + 1 + 0.2569833993911743 + <_> + + + + <_>6 12 11 3 -1. + <_>6 13 11 1 3. + 0 + 0.0118031995370984 + 0.4999637901782990 + 0.5958228111267090 + <_> + + <_> + + + + <_>1 2 3 6 -1. + <_>1 4 3 2 3. + 0 + -9.7703449428081512e-003 + 0.3459093868732452 + 1 + <_> + + + + <_>1 0 4 7 -1. + <_>3 0 2 7 2. + 0 + 2.1174899302423000e-003 + 0.4515126943588257 + 0.5829715728759766 + <_> + + <_> + + + + <_>9 8 3 4 -1. + <_>10 8 1 4 3. + 0 + 9.4801411032676697e-003 + 0.4807392060756683 + 1 + <_> + + + + <_>10 9 2 2 -1. + <_>10 10 2 1 2. + 0 + -2.6078789960592985e-003 + 0.3462216854095459 + 0.5201594829559326 + <_> + + <_> + + + + <_>8 8 3 4 -1. + <_>9 8 1 4 3. + 0 + -5.7252747938036919e-003 + 0.6599853038787842 + 1 + <_> + + + + <_>4 4 10 10 -1. + <_>4 9 10 5 2. + 0 + -8.2325618714094162e-003 + 0.2821828126907349 + 0.5125284790992737 + <_> + + <_> + + + + <_>9 10 3 2 -1. + <_>10 10 1 2 3. + 0 + 8.9571950957179070e-004 + 0.4883818924427033 + 1 + <_> + + + + <_>9 10 3 2 -1. + <_>9 11 3 1 2. + 0 + -1.5021569561213255e-004 + 0.4829918146133423 + 0.5428717136383057 + <_> + + <_> + + + + <_>8 10 3 2 -1. + <_>9 10 1 2 3. + 0 + 4.8489659093320370e-004 + 0.4434598982334137 + 1 + <_> + + + + <_>2 4 14 12 -1. + <_>2 4 7 6 2. + <_>9 10 7 6 2. + 0 + -0.0961926504969597 + 0.2256636023521423 + 0.5956227779388428 + <_> + + <_> + + + + <_>10 12 1 6 -1. + <_>10 15 1 3 2. + 0 + -1.1053519556298852e-003 + 0.4527224004268646 + 1 + <_> + + + + <_>7 3 8 16 -1. + <_>11 3 4 8 2. + <_>7 11 4 8 2. + 0 + -0.1021504029631615 + 0.2844349145889282 + 0.5186452865600586 + <_> + + <_> + + + + <_>5 6 8 10 -1. + <_>5 6 4 5 2. + <_>9 11 4 5 2. + 0 + 3.0147889629006386e-003 + 1 + 0.3808999061584473 + <_> + + + + <_>6 2 8 8 -1. + <_>6 2 4 4 2. + <_>10 6 4 4 2. + 0 + 7.6131648384034634e-003 + 0.5718699097633362 + 0.4262563884258270 + <_> + + <_> + + + + <_>10 5 4 2 -1. + <_>12 5 2 1 2. + <_>10 6 2 1 2. + 0 + 1.5197630273178220e-003 + 1 + 0.5942718982696533 + <_> + + + + <_>12 4 3 3 -1. + <_>12 5 3 1 3. + 0 + -0.0141972796991467 + 0.7731103897094727 + 0.4997653961181641 + <_> + + <_> + + + + <_>4 19 12 1 -1. + <_>8 19 4 1 3. + 0 + -0.0138188796117902 + 0.6681138277053833 + 1 + <_> + + + + <_>8 2 3 1 -1. + <_>9 2 1 1 3. + 0 + -5.0701329018920660e-004 + 0.3305608034133911 + 0.4749974906444550 + <_> + + <_> + + + + <_>13 17 4 3 -1. + <_>13 18 4 1 3. + 0 + -9.3537531793117523e-003 + 0.2860932946205139 + 1 + <_> + + + + <_>7 14 6 3 -1. + <_>7 15 6 1 3. + 0 + -9.4771059229969978e-003 + 0.6188883185386658 + 0.4842100143432617 + <_> + + <_> + + + + <_>9 14 2 3 -1. + <_>9 15 2 1 3. + 0 + 1.6923650400713086e-003 + 1 + 0.6070249080657959 + <_> + + + + <_>7 15 6 3 -1. + <_>7 16 6 1 3. + 0 + 5.8652542065829039e-004 + 0.3782689869403839 + 0.5368196964263916 + <_> + + <_> + + + + <_>10 18 3 2 -1. + <_>11 18 1 2 3. + 0 + -2.5826620403677225e-003 + 0.3690209984779358 + 1 + <_> + + + + <_>14 12 2 3 -1. + <_>14 13 2 1 3. + 0 + -2.7307639829814434e-003 + 0.3857114911079407 + 0.5318108797073364 + <_> + + <_> + + + + <_>4 10 4 6 -1. + <_>4 12 4 2 3. + 0 + 0.0218715704977512 + 1 + 0.2327008992433548 + <_> + + + + <_>4 13 3 2 -1. + <_>4 14 3 1 2. + 0 + -1.5010299648565706e-005 + 0.5560722947120667 + 0.4301410019397736 + <_> + + <_> + + + + <_>9 16 2 3 -1. + <_>9 17 2 1 3. + 0 + 5.3583700209856033e-003 + 1 + 0.6767637729644775 + <_> + + + + <_>10 18 3 2 -1. + <_>11 18 1 2 3. + 0 + 5.0057549960911274e-003 + 0.5194904208183289 + 0.3612853884696960 + <_> + + <_> + + + + <_>7 18 3 2 -1. + <_>8 18 1 2 3. + 0 + -1.9030070398002863e-003 + 0.3237845003604889 + 1 + <_> + + + + <_>1 10 4 2 -1. + <_>1 11 4 1 2. + 0 + -7.8506693243980408e-003 + 0.1194851994514465 + 0.4991723895072937 + <_> + + <_> + + + + <_>12 4 6 3 -1. + <_>12 5 6 1 3. + 0 + -2.7093670796602964e-003 + 1 + 0.4854960143566132 + <_> + + + + <_>14 4 1 3 -1. + <_>14 5 1 1 3. + 0 + 1.4138079714030027e-003 + 0.4872322976589203 + 0.5903577804565430 + <_> + + <_> + + + + <_>2 4 6 3 -1. + <_>2 5 6 1 3. + 0 + 9.0300198644399643e-003 + 1 + 0.6547315716743469 + <_> + + + + <_>5 4 1 3 -1. + <_>5 5 1 1 3. + 0 + -9.7925681620836258e-004 + 0.5849273204803467 + 0.4554230868816376 + <_> + + <_> + + + + <_>14 12 3 3 -1. + <_>14 13 3 1 3. + 0 + 1.3984439428895712e-003 + 1 + 0.4064626097679138 + <_> + + + + <_>15 12 2 3 -1. + <_>15 13 2 1 3. + 0 + 8.3372107474133372e-004 + 0.5399543046951294 + 0.4152809977531433 + <_> + + <_> + + + + <_>3 16 4 3 -1. + <_>3 17 4 1 3. + 0 + 0.0105510596185923 + 1 + 0.1796680986881256 + <_> + + + + <_>8 0 4 2 -1. + <_>8 1 4 1 2. + 0 + 8.8344102550763637e-005 + 0.4251863062381744 + 0.5413522720336914 + <_> + + <_> + + + + <_>0 0 20 1 -1. + <_>0 0 10 1 2. + 0 + -0.0410223081707954 + 1 + 0.5228124856948853 + <_> + + + + <_>9 7 3 4 -1. + <_>10 7 1 4 3. + 0 + 7.5065628625452518e-003 + 0.4853743016719818 + 0.6093444228172302 + <_> + + <_> + + + + <_>0 0 20 1 -1. + <_>10 0 10 1 2. + 0 + 0.0410223081707954 + 1 + 0.2205024063587189 + <_> + + + + <_>8 7 3 4 -1. + <_>9 7 1 4 3. + 0 + -5.3961377125233412e-004 + 0.5692731738090515 + 0.4468756914138794 + <_> + + <_> + + + + <_>1 6 19 3 -1. + <_>1 7 19 1 3. + 0 + -0.0686960369348526 + 0.1483314037322998 + 1 + <_> + + + + <_>12 7 4 2 -1. + <_>12 8 4 1 2. + 0 + -1.8447940237820148e-003 + 0.6211283802986145 + 0.4966601133346558 + <_> + + <_> + + + + <_>7 8 3 3 -1. + <_>7 9 3 1 3. + 0 + -6.0959919355809689e-003 + 0.2294671982526779 + 1 + <_> + + + + <_>7 7 3 3 -1. + <_>8 7 1 3 3. + 0 + -4.2068301700055599e-003 + 0.6407091021537781 + 0.4748562872409821 + <_> + + <_> + + + + <_>2 9 16 3 -1. + <_>2 10 16 1 3. + 0 + -7.1332789957523346e-004 + 1 + 0.5354936122894287 + <_> + + + + <_>9 4 2 12 -1. + <_>9 8 2 4 3. + 0 + 0.1175677999854088 + 0.5136978030204773 + 0.0105957398191094 + <_> + + <_> + + + + <_>7 3 2 5 -1. + <_>8 3 1 5 2. + 0 + 5.9354289987822995e-005 + 0.3711803853511810 + 1 + <_> + + + + <_>9 7 2 3 -1. + <_>9 8 2 1 3. + 0 + -6.3173691742122173e-003 + 0.1712073981761932 + 0.5061758160591126 + <_> + + <_> + + + + <_>9 14 4 3 -1. + <_>9 15 4 1 3. + 0 + 0.0149414995685220 + 1 + 0.6729118824005127 + <_> + + + + <_>7 8 6 4 -1. + <_>10 8 3 2 2. + <_>7 10 3 2 2. + 0 + -2.0789399277418852e-003 + 0.4410645961761475 + 0.5444027781486511 + <_> + + <_> + + + + <_>9 7 2 2 -1. + <_>10 7 1 2 2. + 0 + -7.0736219640821218e-004 + 0.5568910837173462 + 1 + <_> + + + + <_>5 5 6 6 -1. + <_>7 5 2 6 3. + 0 + -3.1247111037373543e-003 + 0.5023869276046753 + 0.3562405109405518 + <_> + + <_> + + + + <_>9 1 3 6 -1. + <_>10 1 1 6 3. + 0 + -7.8919378574937582e-004 + 1 + 0.5456786155700684 + <_> + + + + <_>4 5 12 2 -1. + <_>8 5 4 2 3. + 0 + 0.0101795801892877 + 0.5545138716697693 + 0.4622310996055603 + <_> + + <_> + + + + <_>4 2 6 4 -1. + <_>6 2 2 4 3. + 0 + -2.7506109327077866e-003 + 1 + 0.4942536056041718 + <_> + + + + <_>4 7 8 2 -1. + <_>4 8 8 1 2. + 0 + 0.0106013296172023 + 0.2961233854293823 + 0.5964338779449463 + <_> + + <_> + + + + <_>3 6 14 6 -1. + <_>10 6 7 3 2. + <_>3 9 7 3 2. + 0 + 5.1466780714690685e-003 + 0.5495228767395020 + 1 + <_> + + + + <_>3 6 14 3 -1. + <_>3 6 7 3 2. + 0 + 0.0763211473822594 + 0.5173959136009216 + 0.2940216958522797 + <_> + + <_> + + + + <_>0 5 2 2 -1. + <_>0 6 2 1 2. + 0 + -1.5027689514681697e-003 + 0.3106299936771393 + 1 + <_> + + + + <_>8 13 4 3 -1. + <_>8 14 4 1 3. + 0 + 0.0122666703537107 + 0.4651150107383728 + 0.6846613883972168 + <_> + + <_> + + + + <_>13 0 3 20 -1. + <_>14 0 1 20 3. + 0 + -0.0311185792088509 + 1 + 0.5226057171821594 + <_> + + + + <_>10 8 10 3 -1. + <_>10 9 10 1 3. + 0 + 0.0289055891335011 + 0.5182244181632996 + 0.2705428004264832 + <_> + + <_> + + + + <_>4 0 3 20 -1. + <_>5 0 1 20 3. + 0 + 0.0475983805954456 + 1 + 0.1109512001276016 + <_> + + + + <_>0 8 10 3 -1. + <_>0 9 10 1 3. + 0 + 0.0308085493743420 + 0.4938625097274780 + 0.1404110938310623 + <_> + + <_> + + + + <_>12 5 3 4 -1. + <_>13 5 1 4 3. + 0 + -2.1277810446918011e-004 + 1 + 0.4392356872558594 + <_> + + + + <_>6 7 12 4 -1. + <_>10 7 4 4 3. + 0 + 0.0789699628949165 + 0.5216552019119263 + 0.2294113934040070 + <_> + + <_> + + + + <_>1 14 6 6 -1. + <_>1 14 3 3 2. + <_>4 17 3 3 2. + 0 + -0.0102579500526190 + 0.6176652908325195 + 1 + <_> + + + + <_>1 17 6 2 -1. + <_>1 18 6 1 2. + 0 + 1.2604889925569296e-003 + 0.5236222743988037 + 0.3328965902328491 + <_> + + <_> + + + + <_>14 8 6 12 -1. + <_>17 8 3 6 2. + <_>14 14 3 6 2. + 0 + -0.0334904603660107 + 1 + 0.4866186976432800 + <_> + + + + <_>18 5 2 2 -1. + <_>18 6 2 1 2. + 0 + -5.9202767442911863e-004 + 0.4116407036781311 + 0.5395640134811401 + <_> + + <_> + + + + <_>3 16 4 2 -1. + <_>3 16 2 1 2. + <_>5 17 2 1 2. + 0 + 3.0320750738610514e-005 + 1 + 0.5610736012458801 + <_> + + + + <_>2 16 6 2 -1. + <_>4 16 2 2 3. + 0 + -5.4369680583477020e-004 + 0.5621389150619507 + 0.3461203873157501 + <_> + + <_> + + + + <_>14 8 6 12 -1. + <_>17 8 3 6 2. + <_>14 14 3 6 2. + 0 + -0.0334904603660107 + 1 + 0.4896762073040009 + <_> + + + + <_>18 5 2 2 -1. + <_>18 6 2 1 2. + 0 + -5.9202767442911863e-004 + 0.4305404126644135 + 0.5340713858604431 + <_> + + <_> + + + + <_>5 16 9 2 -1. + <_>8 16 3 2 3. + 0 + 2.0550889894366264e-003 + 0.5544999837875366 + 1 + <_> + + + + <_>3 14 6 6 -1. + <_>3 14 3 3 2. + <_>6 17 3 3 2. + 0 + -4.4353571720421314e-003 + 0.6038540005683899 + 0.3746592998504639 + <_> + + <_> + + + + <_>14 8 6 12 -1. + <_>17 8 3 6 2. + <_>14 14 3 6 2. + 0 + -0.0841704234480858 + 1 + 0.5007348060607910 + <_> + + + + <_>11 7 2 12 -1. + <_>11 11 2 4 3. + 0 + 6.7419027909636497e-003 + 0.5298097133636475 + 0.4716145098209381 + <_> + + <_> + + + + <_>0 8 6 12 -1. + <_>0 8 3 6 2. + <_>3 14 3 6 2. + 0 + 0.0102781504392624 + 1 + 0.6269375085830689 + <_> + + + + <_>7 7 2 12 -1. + <_>7 11 2 4 3. + 0 + 5.8800862170755863e-003 + 0.5154827833175659 + 0.3813040852546692 + <_> + + <_> + + + + <_>14 12 1 2 -1. + <_>14 13 1 1 2. + 0 + -6.9679190346505493e-006 + 1 + 0.4440239965915680 + <_> + + + + <_>12 13 8 1 -1. + <_>12 13 4 1 2. + 0 + 8.2419527461752295e-004 + 0.4697534143924713 + 0.5485504269599915 + <_> + + <_> + + + + <_>0 3 16 6 -1. + <_>0 6 16 3 2. + 0 + -5.5268318392336369e-003 + 0.5513604879379273 + 1 + <_> + + + + <_>1 4 8 2 -1. + <_>1 4 4 1 2. + <_>5 5 4 1 2. + 0 + 9.6128671430051327e-004 + 0.3618639111518860 + 0.5838456749916077 + <_> + + <_> + + + + <_>14 12 1 2 -1. + <_>14 13 1 1 2. + 0 + 2.4810510221868753e-003 + 1 + 0.2523222863674164 + <_> + + + + <_>15 12 2 3 -1. + <_>15 13 2 1 3. + 0 + -1.0480589699000120e-003 + 0.4117257893085480 + 0.5392996072769165 + <_> + + <_> + + + + <_>8 16 3 3 -1. + <_>8 17 3 1 3. + 0 + -6.1287907883524895e-003 + 0.6726329922676086 + 1 + <_> + + + + <_>5 12 1 2 -1. + <_>5 13 1 1 2. + 0 + 1.1682329932227731e-004 + 0.5041192770004273 + 0.3607729077339172 + <_> + + <_> + + + + <_>13 4 3 15 -1. + <_>14 4 1 15 3. + 0 + -0.0399094782769680 + 0.1563739031553268 + 1 + <_> + + + + <_>17 3 2 6 -1. + <_>18 3 1 3 2. + <_>17 6 1 3 2. + 0 + 1.5859459526836872e-003 + 0.4891980886459351 + 0.5779845118522644 + <_> + + <_> + + + + <_>4 4 3 15 -1. + <_>5 4 1 15 3. + 0 + -0.0226902291178703 + 0.2186879068613052 + 1 + <_> + + + + <_>1 3 2 6 -1. + <_>1 3 1 3 2. + <_>2 6 1 3 2. + 0 + 2.0916070789098740e-003 + 0.4771577119827271 + 0.6099231243133545 + <_> + + <_> + + + + <_>7 15 12 4 -1. + <_>7 17 12 2 2. + 0 + -0.0247154198586941 + 0.3463996946811676 + 1 + <_> + + + + <_>1 0 19 3 -1. + <_>1 1 19 1 3. + 0 + -0.0134194502606988 + 0.3630692958831787 + 0.5252196192741394 + <_> + + <_> + + + + <_>3 17 10 2 -1. + <_>3 17 5 1 2. + <_>8 18 5 1 2. + 0 + -6.0629472136497498e-003 + 0.6666321754455566 + 1 + <_> + + + + <_>2 5 10 15 -1. + <_>2 10 10 5 3. + 0 + -2.0921030081808567e-003 + 0.3399547040462494 + 0.5035697817802429 + <_> + + <_> + + + + <_>13 8 3 4 -1. + <_>13 10 3 2 2. + 0 + 0.0259618591517210 + 0.5036802887916565 + 1 + <_> + + + + <_>19 13 1 2 -1. + <_>19 14 1 1 2. + 0 + 1.7908669542521238e-004 + 0.5418530702590942 + 0.4318976998329163 + <_> + + <_> + + + + <_>4 8 3 4 -1. + <_>4 10 3 2 2. + 0 + -3.1546850223094225e-003 + 0.7221025228500366 + 1 + <_> + + + + <_>0 13 1 2 -1. + <_>0 14 1 1 2. + 0 + -1.1397759662941098e-003 + 0.3320972919464111 + 0.5024433732032776 + <_> + + <_> + + + + <_>12 7 2 12 -1. + <_>12 13 2 6 2. + 0 + -0.0478402115404606 + 0.1938765048980713 + 1 + <_> + + + + <_>14 7 2 2 -1. + <_>15 7 1 1 2. + <_>14 8 1 1 2. + 0 + 4.1577088995836675e-004 + 0.4802188873291016 + 0.5730714797973633 + <_> + + <_> + + + + <_>5 3 8 2 -1. + <_>5 4 8 1 2. + 0 + -4.4247039477340877e-004 + 0.4262515008449554 + 1 + <_> + + + + <_>0 2 2 6 -1. + <_>0 4 2 2 3. + 0 + 1.4479350065812469e-003 + 0.5719171166419983 + 0.4064153134822846 + <_> + + <_> + + + + <_>18 2 2 12 -1. + <_>19 2 1 6 2. + <_>18 8 1 6 2. + 0 + 0.0157015100121498 + 0.4995726048946381 + 1 + <_> + + + + <_>18 1 1 2 -1. + <_>18 2 1 1 2. + 0 + 2.7805729769170284e-004 + 0.5289286971092224 + 0.4581728875637054 + <_> + + <_> + + + + <_>0 2 2 12 -1. + <_>0 2 1 6 2. + <_>1 8 1 6 2. + 0 + -2.9010509606450796e-003 + 0.6012148261070252 + 1 + <_> + + + + <_>1 1 1 2 -1. + <_>1 2 1 1 2. + 0 + 2.0830519497394562e-004 + 0.5057976841926575 + 0.3599432110786438 + <_> + + <_> + + + + <_>16 4 4 14 -1. + <_>18 4 2 7 2. + <_>16 11 2 7 2. + 0 + -0.0515300296247005 + 1 + 0.4991796910762787 + <_> + + + + <_>10 14 1 6 -1. + <_>10 17 1 3 2. + 0 + 1.7163449956569821e-004 + 0.4675469994544983 + 0.5374773144721985 + <_> + + <_> + + + + <_>0 4 4 14 -1. + <_>0 4 2 7 2. + <_>2 11 2 7 2. + 0 + 0.0236142799258232 + 1 + 0.6586478948593140 + <_> + + + + <_>9 14 1 6 -1. + <_>9 17 1 3 2. + 0 + -5.6427798699587584e-004 + 0.3853296041488648 + 0.5196040272712708 + <_> + + <_> + + + + <_>9 14 4 3 -1. + <_>9 15 4 1 3. + 0 + 6.6903959959745407e-003 + 1 + 0.6004235744476318 + <_> + + + + <_>4 7 12 2 -1. + <_>8 7 4 2 3. + 0 + -4.8789530992507935e-003 + 0.3293227851390839 + 0.5245236754417419 + <_> + + <_> + + + + <_>0 8 4 3 -1. + <_>0 9 4 1 3. + 0 + -6.8537332117557526e-003 + 0.2565914094448090 + 1 + <_> + + + + <_>4 7 2 2 -1. + <_>4 7 1 1 2. + <_>5 8 1 1 2. + 0 + 9.9893810693174601e-004 + 0.4615494012832642 + 0.5942432284355164 + <_> + + <_> + + + + <_>13 7 2 1 -1. + <_>13 7 1 1 2. + 0 + -1.3354700058698654e-004 + 0.5487375855445862 + 1 + <_> + + + + <_>11 4 4 5 -1. + <_>11 4 2 5 2. + 0 + 1.0165109997615218e-003 + 0.4578359127044678 + 0.5426927804946899 + <_> + + <_> + + + + <_>4 8 3 3 -1. + <_>5 8 1 3 3. + 0 + 9.1216771397739649e-004 + 1 + 0.3939461112022400 + <_> + + + + <_>0 3 8 1 -1. + <_>4 3 4 1 2. + 0 + 1.0080259526148438e-003 + 0.4049789905548096 + 0.5520703792572022 + <_> + + <_> + + + + <_>13 7 2 1 -1. + <_>13 7 1 1 2. + 0 + -1.3102490629535168e-004 + 1 + 0.4879088997840881 + <_> + + + + <_>14 7 3 2 -1. + <_>15 7 1 2 3. + 0 + 5.5228749988600612e-004 + 0.4844943881034851 + 0.5512825846672058 + <_> + + <_> + + + + <_>5 7 2 1 -1. + <_>6 7 1 1 2. + 0 + -1.2130969844292849e-004 + 1 + 0.4367971122264862 + <_> + + + + <_>3 7 3 2 -1. + <_>4 7 1 2 3. + 0 + -1.5112989785848185e-005 + 0.6425955295562744 + 0.4881826937198639 + <_> + + <_> + + + + <_>18 5 2 2 -1. + <_>18 6 2 1 2. + 0 + -4.0125829400494695e-004 + 1 + 0.5372099280357361 + <_> + + + + <_>12 14 2 2 -1. + <_>13 14 1 1 2. + <_>12 15 1 1 2. + 0 + -6.5766851184889674e-004 + 0.5834553241729736 + 0.4869078099727631 + <_> + + <_> + + + + <_>0 5 2 2 -1. + <_>0 6 2 1 2. + 0 + 6.2220421386882663e-004 + 1 + 0.3824636936187744 + <_> + + + + <_>6 14 2 2 -1. + <_>6 14 1 1 2. + <_>7 15 1 1 2. + 0 + 1.4663359615951777e-003 + 0.4813488125801086 + 0.6966739296913147 + <_> + + <_> + + + + <_>7 12 6 5 -1. + <_>9 12 2 5 3. + 0 + -0.0495477095246315 + 0.0539276599884033 + 1 + <_> + + + + <_>12 17 5 2 -1. + <_>12 18 5 1 2. + 0 + 1.3017569435760379e-003 + 0.5337455868721008 + 0.4160748124122620 + <_> + + <_> + + + + <_>1 11 6 3 -1. + <_>4 11 3 3 2. + 0 + -4.4914530590176582e-003 + 0.5997437238693237 + 1 + <_> + + + + <_>1 9 6 3 -1. + <_>4 9 3 3 2. + 0 + 1.6592369647696614e-003 + 0.3727185130119324 + 0.5115634202957153 + <_> + + <_> + + + + <_>12 7 2 12 -1. + <_>12 13 2 6 2. + 0 + 6.4695458859205246e-003 + 0.5252035260200501 + 1 + <_> + + + + <_>8 7 5 3 -1. + <_>8 8 5 1 3. + 0 + 4.9810269847512245e-003 + 0.5256717801094055 + 0.3934406042098999 + <_> + + <_> + + + + <_>6 7 2 12 -1. + <_>6 13 2 6 2. + 0 + -0.0385369807481766 + 0.2061924934387207 + 1 + <_> + + + + <_>1 2 9 18 -1. + <_>4 2 3 18 3. + 0 + -0.2827565073966980 + 0.0618832111358643 + 0.4925057888031006 + <_> + + <_> + + + + <_>12 17 5 2 -1. + <_>12 18 5 1 2. + 0 + -9.0301828458905220e-003 + 0.3157590031623840 + 1 + <_> + + + + <_>4 7 12 2 -1. + <_>4 7 6 2 2. + 0 + -0.0438662692904472 + 0.2033682018518448 + 0.5164769887924194 + <_> + + <_> + + + + <_>6 7 6 1 -1. + <_>8 7 2 1 3. + 0 + -4.5701069757342339e-003 + 0.6611183285713196 + 1 + <_> + + + + <_>7 3 3 2 -1. + <_>8 3 1 2 3. + 0 + -2.3362410720437765e-003 + 0.2807789146900177 + 0.4962876141071320 + <_> + + <_> + + + + <_>9 4 3 1 -1. + <_>10 4 1 1 3. + 0 + 5.3960331715643406e-003 + 0.5146387815475464 + 1 + <_> + + + + <_>11 11 3 1 -1. + <_>12 11 1 1 3. + 0 + -2.6297608856111765e-003 + 0.6284487843513489 + 0.4955588877201080 + <_> + + <_> + + + + <_>8 4 3 1 -1. + <_>9 4 1 1 3. + 0 + -3.8577478844672441e-003 + 0.1486748009920120 + 1 + <_> + + + + <_>6 11 3 1 -1. + <_>7 11 1 1 3. + 0 + 1.3963800156489015e-003 + 0.4701338112354279 + 0.6320971846580505 + <_> + + <_> + + + + <_>12 13 6 6 -1. + <_>12 15 6 2 3. + 0 + -8.8699469342827797e-003 + 1 + 0.5286818146705627 + <_> + + + + <_>14 13 1 6 -1. + <_>14 15 1 2 3. + 0 + -7.0626288652420044e-004 + 0.4648370146751404 + 0.5333210229873657 + <_> + + <_> + + + + <_>2 13 6 6 -1. + <_>2 15 6 2 3. + 0 + 4.2645810171961784e-003 + 0.5084878206253052 + 1 + <_> + + + + <_>1 5 18 1 -1. + <_>7 5 6 1 3. + 0 + 0.0615721009671688 + 0.3629625141620636 + 0.8757156729698181 + <_> + + <_> + + + + <_>4 7 12 2 -1. + <_>10 7 6 1 2. + <_>4 8 6 1 2. + 0 + -4.5381980016827583e-003 + 1 + 0.4856696128845215 + <_> + + + + <_>6 1 8 10 -1. + <_>10 1 4 5 2. + <_>6 6 4 5 2. + 0 + -4.0877899155020714e-003 + 0.4584116041660309 + 0.5420240759849548 + <_> + + <_> + + + + <_>3 13 4 3 -1. + <_>3 14 4 1 3. + 0 + 6.4308601431548595e-003 + 1 + 0.2707302868366242 + <_> + + + + <_>6 13 4 3 -1. + <_>6 14 4 1 3. + 0 + 7.0455260574817657e-003 + 0.5057486891746521 + 0.7026523947715759 + <_> + + <_> + + + + <_>9 14 4 3 -1. + <_>9 15 4 1 3. + 0 + -2.3246440105140209e-003 + 1 + 0.4827278852462769 + <_> + + + + <_>12 9 2 3 -1. + <_>12 10 2 1 3. + 0 + 6.0276601288933307e-005 + 0.4247249066829681 + 0.5508763194084168 + <_> + + <_> + + + + <_>7 14 4 3 -1. + <_>7 15 4 1 3. + 0 + 0.0180845595896244 + 1 + 0.8104801177978516 + <_> + + + + <_>9 0 2 1 -1. + <_>10 0 1 1 2. + 0 + 8.4693520329892635e-004 + 0.5154619216918945 + 0.3514379858970642 + <_> + + <_> + + + + <_>5 0 10 5 -1. + <_>5 0 5 5 2. + 0 + -0.0269310399889946 + 1 + 0.4886888861656189 + <_> + + + + <_>6 6 8 7 -1. + <_>6 6 4 7 2. + 0 + -4.2346641421318054e-003 + 0.4622378051280975 + 0.5382478237152100 + <_> + + <_> + + + + <_>5 0 10 5 -1. + <_>10 0 5 5 2. + 0 + 0.0269471108913422 + 1 + 0.6366596221923828 + <_> + + + + <_>6 6 8 7 -1. + <_>10 6 4 7 2. + 0 + 4.6446882188320160e-003 + 0.5368506908416748 + 0.3765429854393005 + <_> + + <_> + + + + <_>5 9 10 8 -1. + <_>10 9 5 4 2. + <_>5 13 5 4 2. + 0 + -6.9577661342918873e-003 + 0.4234687089920044 + 1 + <_> + + + + <_>10 0 4 10 -1. + <_>12 0 2 5 2. + <_>10 5 2 5 2. + 0 + 8.7609712500125170e-004 + 0.4672406017780304 + 0.5350683927536011 + <_> + + <_> + + + + <_>1 4 8 3 -1. + <_>1 5 8 1 3. + 0 + 1.6103329835459590e-003 + 1 + 0.5732762813568115 + <_> + + + + <_>4 4 8 3 -1. + <_>4 5 8 1 3. + 0 + -1.2848590267822146e-003 + 0.5481799244880676 + 0.3784593045711517 + <_> + + <_> + + + + <_>9 7 4 3 -1. + <_>9 8 4 1 3. + 0 + 0.0102435396984220 + 0.5155907273292542 + 1 + <_> + + + + <_>12 8 3 12 -1. + <_>12 14 3 6 2. + 0 + 2.6889349101111293e-004 + 0.5353189706802368 + 0.4387153983116150 + <_> + + <_> + + + + <_>7 7 4 3 -1. + <_>7 8 4 1 3. + 0 + 3.7903659977018833e-003 + 0.5032002925872803 + 1 + <_> + + + + <_>5 8 3 12 -1. + <_>5 14 3 6 2. + 0 + -0.0293696802109480 + 0.5873538851737976 + 0.2215445041656494 + <_> + + <_> + + + + <_>10 0 7 6 -1. + <_>10 2 7 2 3. + 0 + 6.0743088833987713e-003 + 1 + 0.5417029857635498 + <_> + + + + <_>2 1 18 1 -1. + <_>8 1 6 1 3. + 0 + -0.0127107203006744 + 0.6056511998176575 + 0.4985181987285614 + <_> + + <_> + + + + <_>5 0 3 8 -1. + <_>6 0 1 8 3. + 0 + -5.9445449151098728e-003 + 0.3352069854736328 + 1 + <_> + + + + <_>4 7 4 2 -1. + <_>4 8 4 1 2. + 0 + -2.8927479870617390e-003 + 0.6929240822792053 + 0.4778220057487488 + 53.7555694580078130 + 18 + -1 + diff --git a/plugins/libzm_plugin_face_haar/data/plugins.conf b/plugins/libzm_plugin_face_haar/data/plugins.conf new file mode 100644 index 000000000..4e34f1d92 --- /dev/null +++ b/plugins/libzm_plugin_face_haar/data/plugins.conf @@ -0,0 +1,14 @@ +[libzm_plugin_face_haar] + +cascade = /usr/share/zm/haarcascades/haarcascade_frontalface_alt2.xml +scale = 1.15 +flag = 1 +min-nbrs = 5 +min-obj-width = 4.5 +min-obj-height = 5.5 +min-alarm-score = 0.4 +max-alarm-score = 99 +image-scale-factor = 0.5 +det-cause = Face Detected +log-prefix = FACEDET PLUGIN + diff --git a/plugins/libzm_plugin_face_haar/debug/face_detector_plugin.os b/plugins/libzm_plugin_face_haar/debug/face_detector_plugin.os new file mode 100644 index 000000000..7eba72d03 Binary files /dev/null and b/plugins/libzm_plugin_face_haar/debug/face_detector_plugin.os differ diff --git a/plugins/libzm_plugin_face_haar/libzm_plugin_face_haar.so b/plugins/libzm_plugin_face_haar/libzm_plugin_face_haar.so new file mode 100755 index 000000000..66586e084 Binary files /dev/null and b/plugins/libzm_plugin_face_haar/libzm_plugin_face_haar.so differ diff --git a/plugins/libzm_plugin_face_haar/release/face_detector_plugin.os b/plugins/libzm_plugin_face_haar/release/face_detector_plugin.os new file mode 100644 index 000000000..1e0473cd0 Binary files /dev/null and b/plugins/libzm_plugin_face_haar/release/face_detector_plugin.os differ diff --git a/plugins/libzm_plugin_face_haar/src/face_detector_plugin.cpp b/plugins/libzm_plugin_face_haar/src/face_detector_plugin.cpp new file mode 100644 index 000000000..48d94bf22 --- /dev/null +++ b/plugins/libzm_plugin_face_haar/src/face_detector_plugin.cpp @@ -0,0 +1,400 @@ +#include "face_detector_plugin.h" + + + +//! Retrieve the engine version we're going to expect +extern "C" int getEngineVersion() +{ + return ZM_ENGINE_VERSION; +} + +//! Tells us to register our functionality to an engine kernel +extern "C" void registerPlugin(PluginManager &PlM, string sPluginName) +{ + PlM.getImageAnalyser().addDetector( + auto_ptr(new FaceDetectorPlugin(sPluginName)) + ); +} + + + + +FaceDetectorPlugin::FaceDetectorPlugin() + : Detector(), + m_fScaleFactor(DEFAULT_HAAR_SCALE_FACTOR), + m_nMinNeighbors(DEFAULT_HAAR_MIN_NEIGHBORS), + m_nFlag(DEFAULT_HAAR_FLAG), + m_fMinObjWidth(DEFAULT_DETECTOR_MIN_OBJECT_SIZE_WIDTH), + m_fMinObjHeight(DEFAULT_DETECTOR_MIN_OBJECT_SIZE_HEIGHT), + m_cascade(NULL), + m_sHaarCascadePath(DEFAULT_HAAR_FACE_CASCADE_PATH) +{ + m_sDetectionCause = DETECTED_CAUSE; + m_sLogPrefix = LOG_PREFIX; + + //openlog(m_sLogPrefix.c_str(), LOG_PID|LOG_CONS, LOG_USER); + m_pStorage = cvCreateMemStorage(0); + //_loadHaarCascade(m_sHaarCascadePath); + log(LOG_NOTICE, "Face Detector Plugin\'s Object has been created."); +} + + + + +FaceDetectorPlugin::FaceDetectorPlugin(string sPluginName) + : Detector(sPluginName), + m_fScaleFactor(DEFAULT_HAAR_SCALE_FACTOR), + m_nMinNeighbors(DEFAULT_HAAR_MIN_NEIGHBORS), + m_nFlag(DEFAULT_HAAR_FLAG), + m_fMinObjWidth(DEFAULT_DETECTOR_MIN_OBJECT_SIZE_WIDTH), + m_fMinObjHeight(DEFAULT_DETECTOR_MIN_OBJECT_SIZE_HEIGHT), + m_cascade(NULL), + m_sHaarCascadePath(DEFAULT_HAAR_FACE_CASCADE_PATH) +{ + m_sDetectionCause = DETECTED_CAUSE; + m_sLogPrefix = LOG_PREFIX; + + //openlog(m_sLogPrefix.c_str(), LOG_PID|LOG_CONS, LOG_USER); + m_pStorage = cvCreateMemStorage(0); + //_loadHaarCascade(m_sHaarCascadePath); + log(LOG_NOTICE, "Face Detector Plugin\'s Object has been created."); +} + + + +/*! \fn FaceDetectorPlugin::loadConfig(string sConfigFileName) + * \param sConfigFileName is path to configuration to load parameters from + */ +void FaceDetectorPlugin::loadConfig(string sConfigFileName) +{ + options_description config_file("Configuration file options."); + variables_map vm; + config_file.add_options() + // Haar face detector options + ((m_sConfigSectionName + string(".cascade")).c_str(), + value()->default_value(DEFAULT_HAAR_FACE_CASCADE_PATH)) + ((m_sConfigSectionName + string(".scale")).c_str(), + value()->default_value(DEFAULT_HAAR_SCALE_FACTOR)) + ((m_sConfigSectionName + string(".flag")).c_str(), + value()->default_value(DEFAULT_HAAR_FLAG)) + ((m_sConfigSectionName + string(".min-nbrs")).c_str(), + value()->default_value(DEFAULT_HAAR_MIN_NEIGHBORS)) + ((m_sConfigSectionName + string(".min-obj-width")).c_str(), + value()->default_value(DEFAULT_DETECTOR_MIN_OBJECT_SIZE_WIDTH)) + ((m_sConfigSectionName + string(".min-obj-height")).c_str(), + value()->default_value(DEFAULT_DETECTOR_MIN_OBJECT_SIZE_HEIGHT)) + ((m_sConfigSectionName + string(".min-alarm-score")).c_str(), + value()->default_value(DEFAULT_MIN_ALARM_SCORE)) + ((m_sConfigSectionName + string(".max-alarm-score")).c_str(), + value()->default_value(DEFAULT_MAX_ALARM_SCORE)) + ((m_sConfigSectionName + string(".image-scale-factor")).c_str(), + value()->default_value(DEFAULT_IMAGE_SCALE_FACTOR)) + ((m_sConfigSectionName + string(".det-cause")).c_str(), + value()->default_value(DETECTED_CAUSE)) + ((m_sConfigSectionName + string(".log-prefix")).c_str(), + value()->default_value(LOG_PREFIX)) + ; + ifstream ifs(sConfigFileName.c_str()); + store(parse_config_file(ifs, config_file, true), vm); + notify(vm); + + m_fScaleFactor = vm[(m_sConfigSectionName + string(".scale")).c_str()].as(); + m_nMinNeighbors = vm[(m_sConfigSectionName + string(".min-nbrs")).c_str()].as(); + m_nFlag = vm[(m_sConfigSectionName + string(".flag")).c_str()].as(); + m_fMinObjWidth = vm[(m_sConfigSectionName + string(".min-obj-width")).c_str()].as(); + m_fMinObjHeight = vm[(m_sConfigSectionName + string(".min-obj-height")).c_str()].as(); + m_fMinAlarmScore = vm[(m_sConfigSectionName + string(".min-alarm-score")).c_str()].as(); + m_fMaxAlarmScore = vm[(m_sConfigSectionName + string(".max-alarm-score")).c_str()].as(); + m_fImageScaleFactor = vm[(m_sConfigSectionName + string(".image-scale-factor")).c_str()].as(); + + m_sDetectionCause = vm[(m_sConfigSectionName + string(".det-cause")).c_str()].as(); + m_sLogPrefix = vm[(m_sConfigSectionName + string(".log-prefix")).c_str()].as(); + +// if (m_sHaarCascadePath != vm[(m_sConfigSectionName + string(".cascade")).c_str()].as()) +// { + m_sHaarCascadePath = vm[(m_sConfigSectionName + string(".cascade")).c_str()].as(); + _loadHaarCascade(m_sHaarCascadePath); +// } + zmLoadConfig(); + log(LOG_NOTICE, "Face Detector Plugin\'s Object is configured."); +} + + + +FaceDetectorPlugin::~FaceDetectorPlugin() +{ + cvReleaseMemStorage(&m_pStorage); + cvReleaseHaarClassifierCascade(&m_cascade); +} + + +/*! \fn FaceDetectorPlugin::FaceDetectorPlugin(const FaceDetectorPlugin& source) + * \param source is the object for copying + */ +FaceDetectorPlugin::FaceDetectorPlugin(const FaceDetectorPlugin& source) + : Detector(source), + m_fScaleFactor(source.m_fScaleFactor), + m_nMinNeighbors(source.m_nMinNeighbors), + m_nFlag(source.m_nFlag), + m_fMinObjWidth(source.m_fMinObjWidth), + m_fMinObjHeight(source.m_fMinObjHeight), + m_cascade(NULL), + m_sHaarCascadePath(source.m_sHaarCascadePath) +{ + m_pStorage = cvCreateMemStorage(0); + if (m_sHaarCascadePath != string()) + _loadHaarCascade(m_sHaarCascadePath); +} + + + +/*! \fn FaceDetectorPlugin:: operator=(const FaceDetectorPlugin& source) + * \param source is the object for copying + */ +FaceDetectorPlugin & FaceDetectorPlugin:: operator=(const FaceDetectorPlugin& source) +{ + Detector::operator=(source); + m_fScaleFactor = source.m_fScaleFactor; + m_nMinNeighbors = source.m_nMinNeighbors; + m_nFlag = source.m_nFlag; + m_fMinObjWidth = source.m_fMinObjWidth; + m_fMinObjHeight = source.m_fMinObjHeight; + m_cascade = NULL; + m_sHaarCascadePath = source.m_sHaarCascadePath; + + m_pStorage = cvCreateMemStorage(0); + + if (m_sHaarCascadePath != string()) + _loadHaarCascade(m_sHaarCascadePath); + + return *this; +} + + + +/*! \fn FaceDetectorPlugin::_loadHaarCascade(string sConfigPath) + * \param sConfigPath is path to xml Haar classifier cascade. + */ +void FaceDetectorPlugin::_loadHaarCascade(string sConfigPath) +{ + m_sHaarCascadePath = sConfigPath; + if (m_cascade != NULL) + cvReleaseHaarClassifierCascade(&m_cascade); + + m_cascade = (CvHaarClassifierCascade*)cvLoad(sConfigPath.c_str()); + if (m_cascade == NULL) + throw invalid_argument((string("Couldn't load xml data: ") + sConfigPath + ".").c_str()); +} + + + + +/*! \fn FaceDetectorPlugin::_opencvHaarDetect(const CvMat* pMatImage) + * \param pMatImage is an image to perform face detection (in the form of OpenCv' CvMat) + */ +vector FaceDetectorPlugin::_opencvHaarDetect(const CvMat* pMatImage) +{ + CvSize minObjSize = cvSize((int) pMatImage->width * m_fMinObjWidth / 100.0, (int) pMatImage->height * m_fMinObjHeight / 100.0); + //char szMessage[50]; + //sprintf(szMessage, "IMAGE SIZE IS %d x %d \nMIN OBJ SIZE IS %d x %d", pMatImage->width, pMatImage->height, minObjSize.width, minObjSize.height); + //log(LOG_WARNING, szMessage); + + CvSeq* haarObjects = cvHaarDetectObjects(pMatImage, + m_cascade, + m_pStorage, + m_fScaleFactor, + m_nMinNeighbors, + m_nFlag, + minObjSize); + vector objects; + for (int i = 0; i < haarObjects->total; i++) + { + CvRect* pHaarRect = (CvRect*)cvGetSeqElem(haarObjects, i); + objects.push_back(*pHaarRect); + } + return objects; +} + + +/*! \fn FaceDetectorPlugin::checkZone(Zone *zone, const Image *zmImage) + * \param zone is a zone where faces will be detected + * \param zmImage is an image to perform face detection (in the form of ZM' Image) + * \return true if there were objects detected in given image and + * false otherwise + */ +bool FaceDetectorPlugin::checkZone(Zone *zone, const Image *zmImage) +{ + //log(LOG_DEBUG, "Entering checkZone."); + double score; + Polygon zone_polygon = Polygon(zone->GetPolygon()); // Polygon of interest of the processed zone. + //char szMessage[50]; + //sprintf(szMessage, "Polygon of the zone has %d vertices.", zone_polygon.getNumCoords()); + //log(LOG_WARNING, szMessage); + + //zone->ResetStats(); + + /* + log(LOG_WARNING, "precheck"); + if ( !zone->CheckOverloadCount() ) + { + log(LOG_WARNING, "CheckOverloadCount() return false, we'll return false."); + return(false); + } + */ + //zmLoadConfig(); + // An image for highlighting detected objects. + Image *pMaskImage = new Image(zmImage->Width(), zmImage->Height(), ZM_COLOUR_GRAY8, ZM_SUBPIX_ORDER_NONE ); + pMaskImage->Fill(BLACK); + + //log(LOG_WARNING, "FILLBLACK."); + // An temporary image in the form of ZM for making from it CvMat. + // If don't use temp image, after rgb->bgr it will change. + Image *tempZmImage = new Image(*zmImage); + CvMat* cvInputImage = NULL; + CvMat* pScaledImage = NULL; + + bool bDoResizing = (m_fImageScaleFactor != 1.0); // resize image or not + + if (tempZmImage->Colours() == ZM_COLOUR_GRAY8) + { + // if image is not colored, create an one-channel CvMat. + cvInputImage = cvCreateMat(tempZmImage->Height(), tempZmImage->Width(), CV_8UC1); + unsigned char *buffer = (unsigned char*)tempZmImage->Buffer(); + cvSetData(cvInputImage, buffer, tempZmImage->Width()); + } + // NEXTIME XXX TODO: manage also 32 bit images! + else + { + // otherwise create a three-channel CvMat and then convert colors from RGB to BGR. + cvInputImage = cvCreateMat(tempZmImage->Height(), tempZmImage->Width(), CV_8UC3); + unsigned char *buffer = (unsigned char*)tempZmImage->Buffer(); + cvSetData(cvInputImage, buffer, tempZmImage->Width() * 3); + cvCvtColor(cvInputImage, cvInputImage, CV_RGB2BGR); + } + + if (bDoResizing) + { + int nNewWidth = int (m_fImageScaleFactor * zmImage->Width()); + int nNewHeight = int (m_fImageScaleFactor * tempZmImage->Height()); + int nImageElemType = cvGetElemType(cvInputImage); + pScaledImage = cvCreateMat(nNewHeight, nNewWidth, nImageElemType); + cvResize(cvInputImage, pScaledImage, CV_INTER_LINEAR); + } + + + //Process image + + vector foundObjects; + if (bDoResizing) + foundObjects = _opencvHaarDetect(pScaledImage); + else + foundObjects = _opencvHaarDetect(cvInputImage); + + if (foundObjects.size() > 0) + log(LOG_INFO, "OBJECTS WERE DETECTED"); + + score = 0; + for (vector::iterator it = foundObjects.begin(); it < foundObjects.end(); it++) + { + // Process found objects. + + // Scale object's coordinates back if image has been scaled. + int x1 = int(it->x/m_fImageScaleFactor), x2 = int((it->x + it->width)/m_fImageScaleFactor), y1 = int(it->y/m_fImageScaleFactor), y2 = int((it->y + it->height)/m_fImageScaleFactor); + + // Check if object's rectangle is inside zone's polygon of interest. + Coord rectVertCoords[4] = {Coord(x1, y1), Coord(x1, y2), Coord(x2, y1), Coord(x2, y2)}; + int nNumVertInside = 0; + for (int i = 0; i < 4; i++) + { + nNumVertInside += zone_polygon.isInside(rectVertCoords[i]); + } + if (nNumVertInside < 3) + // if at least three rectangle coordinates are inside polygon, consider rectangle as belonging to the zone + // otherwise process next object + continue; + + // Fill a box with object in the mask + Box *faceBox = new Box(x1, y1, x2, y2); + pMaskImage->Fill(WHITE, faceBox); + // Calculate score as portion of object area in the image + score += (100.0*(it->width)*(it->height)/m_fImageScaleFactor/m_fImageScaleFactor)/zone_polygon.Area(); + delete faceBox; + } + + + if (score == 0) + { + //log(LOG_DEBUG, "No objects found. Exit."); + delete pMaskImage; + delete tempZmImage; + + if (cvInputImage) + cvReleaseMat(&cvInputImage); + if (pScaledImage) + cvReleaseMat(&pScaledImage); + + return( false ); + } + + + + if ( m_fMinAlarmScore && ( score < m_fMinAlarmScore) ) + { + delete pMaskImage; + delete tempZmImage; + + if (cvInputImage) + cvReleaseMat(&cvInputImage); + if (pScaledImage) + cvReleaseMat(&pScaledImage); + + return( false ); + } + if ( m_fMaxAlarmScore && (score > m_fMaxAlarmScore) ) + { + zone->SetOverloadCount(zone->GetOverloadFrames()); + delete pMaskImage; + delete tempZmImage; + + if (cvInputImage) + cvReleaseMat(&cvInputImage); + if (pScaledImage) + cvReleaseMat(&pScaledImage); + + return( false ); + } + + + zone->SetScore(max(1, (int)score)); + + //Get mask by highlighting contours of objects and overlaying them with previous contours. + Rgb alarm_colour = RGB_GREEN; + Image *hlZmImage = pMaskImage->HighlightEdges(alarm_colour, ZM_COLOUR_RGB24, + ZM_SUBPIX_ORDER_RGB, &zone_polygon.Extent()); + + if (zone->Alarmed()) + { + // if there were previous detection and they have already set up alarm image + // then overlay it with current mask + Image* pPrevZoneMask = new Image(*(zone->AlarmImage())); + pPrevZoneMask->Overlay(*hlZmImage); + zone->SetAlarmImage(pPrevZoneMask); + delete pPrevZoneMask; + } + else + zone->SetAlarmImage(hlZmImage); + + delete pMaskImage; + delete hlZmImage; + delete tempZmImage; + + if (cvInputImage) + cvReleaseMat(&cvInputImage); + if (pScaledImage) + cvReleaseMat(&pScaledImage); + + //log(LOG_DEBUG, "Leaving checkZone."); + return true; +} + + diff --git a/plugins/libzm_plugin_face_haar/src/face_detector_plugin.h b/plugins/libzm_plugin_face_haar/src/face_detector_plugin.h new file mode 100644 index 000000000..ccb9b9f04 --- /dev/null +++ b/plugins/libzm_plugin_face_haar/src/face_detector_plugin.h @@ -0,0 +1,102 @@ +#ifndef HAAR_DETECTOR_PLUGIN_H +#define HAAR_DETECTOR_PLUGIN_H + + +#include +#include +#include +#include + + +#include +#include +#include +#include + +#include "zm_plugin_manager.h" +#include "zm_detector.h" +#include "zm_rgb.h" + + + +#define DETECTED_CAUSE "Face Detected" +#define LOG_PREFIX "ZM FACEDET PLUGIN" + + +#define DEFAULT_HAAR_SCALE_FACTOR 1.1 +#define DEFAULT_HAAR_MIN_NEIGHBORS 3 +#define DEFAULT_HAAR_FLAG CV_HAAR_DO_CANNY_PRUNING +#define DEFAULT_DETECTOR_MIN_OBJECT_SIZE_WIDTH 5.0 +#define DEFAULT_DETECTOR_MIN_OBJECT_SIZE_HEIGHT 6.0 +#define DEFAULT_HAAR_FACE_CASCADE_PATH "/usr/local/share/opencv/haarcascades/haarcascade_frontalface_alt2.xml" + + + + +using namespace std; +using namespace boost::program_options; + + +//! Face detector plugin class. +/*! The class derived from Detector. + * This class provides face detection based on OpenCV's implementation of Haar cascade classifier detector. + */ +class FaceDetectorPlugin : public Detector { + public: + + //! Default Constructor. + FaceDetectorPlugin(); + + //! Constructor. + FaceDetectorPlugin(string sConfigSectionName); + + //! Destructor. + virtual ~FaceDetectorPlugin(); + + //! Copy constructor. + FaceDetectorPlugin(const FaceDetectorPlugin& source); + + //! Overloaded operator=. + FaceDetectorPlugin& operator=(const FaceDetectorPlugin& source); + + void loadConfig(string sConfigFileName); + +protected: + + bool checkZone(Zone *zone, const Image *zmImage); + + //! Path to the xml file with cascade. + string m_sHaarCascadePath; + + //! Cascade of classifiers. + CvHaarClassifierCascade* m_cascade; + + //! Scale factor. + double m_fScaleFactor; + + //! Minimum number (minus 1) of neighbors rectangles that makes up an object. + size_t m_nMinNeighbors; + + //! Mode of operation. + int m_nFlag; + + //! Minimal object's sizes. + double m_fMinObjWidth; + double m_fMinObjHeight; + + //! Pointer to storage for calculations. + CvMemStorage* m_pStorage; + +private: + + //! Load xml Haar cascade file. + void _loadHaarCascade(string sConfigPath); + + //! Detect faces on OpenCV' CvMat image. + vector _opencvHaarDetect(const CvMat* pMatImage); +}; + + + +#endif //HAAR_DETECTOR_PLUGIN_H + diff --git a/scripts/ZoneMinder/MYMETA.yml b/scripts/ZoneMinder/MYMETA.yml new file mode 100644 index 000000000..8d77ebdf2 --- /dev/null +++ b/scripts/ZoneMinder/MYMETA.yml @@ -0,0 +1,22 @@ +--- +abstract: 'Container module for common ZoneMinder modules' +author: + - 'Philip Coombes ' +build_requires: + ExtUtils::MakeMaker: 0 +configure_requires: + ExtUtils::MakeMaker: 0 +distribution_type: module +dynamic_config: 0 +generated_by: 'ExtUtils::MakeMaker version 6.57_05' +license: unknown +meta-spec: + url: http://module-build.sourceforge.net/META-spec-v1.4.html + version: 1.4 +name: ZoneMinder +no_index: + directory: + - t + - inc +requires: {} +version: 1.25.0 diff --git a/scripts/ZoneMinder/Makefile.old b/scripts/ZoneMinder/Makefile.old new file mode 100644 index 000000000..63b65fd11 --- /dev/null +++ b/scripts/ZoneMinder/Makefile.old @@ -0,0 +1,965 @@ +# This Makefile is for the ZoneMinder extension to perl. +# +# It was generated automatically by MakeMaker version +# 6.57_05 (Revision: 65705) from the contents of +# Makefile.PL. Don't edit this file, edit Makefile.PL instead. +# +# ANY CHANGES MADE HERE WILL BE LOST! +# +# MakeMaker ARGV: () +# + +# MakeMaker Parameters: + +# ABSTRACT_FROM => q[lib/ZoneMinder.pm] +# AUTHOR => [q[Philip Coombes ]] +# BUILD_REQUIRES => { } +# NAME => q[ZoneMinder] +# PM => { lib/ZoneMinder/Trigger/Connection.pm=>q[$(INST_LIBDIR)/ZoneMinder/Trigger/Connection.pm], lib/ZoneMinder/Control/Ncs370.pm=>q[$(INST_LIBDIR)/ZoneMinder/Control/Ncs370.pm], lib/ZoneMinder/Trigger/Channel/Serial.pm=>q[$(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Serial.pm], lib/ZoneMinder/Memory/Shared.pm=>q[$(INST_LIBDIR)/ZoneMinder/Memory/Shared.pm], lib/ZoneMinder.pm=>q[$(INST_LIBDIR)/ZoneMinder.pm], lib/ZoneMinder/Config.pm=>q[$(INST_LIBDIR)/ZoneMinder/Config.pm], lib/ZoneMinder/Control/mjpgStreamer.pm=>q[$(INST_LIBDIR)/ZoneMinder/Control/mjpgStreamer.pm], lib/ZoneMinder/Trigger/Channel/Unix.pm=>q[$(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Unix.pm], lib/ZoneMinder/Control/PanasonicIP.pm=>q[$(INST_LIBDIR)/ZoneMinder/Control/PanasonicIP.pm], lib/ZoneMinder/Base.pm=>q[$(INST_LIBDIR)/ZoneMinder/Base.pm], lib/ZoneMinder/Control/AxisV2.pm=>q[$(INST_LIBDIR)/ZoneMinder/Control/AxisV2.pm], lib/ZoneMinder/Memory/Mapped.pm=>q[$(INST_LIBDIR)/ZoneMinder/Memory/Mapped.pm], lib/ZoneMinder/Trigger/Channel.pm=>q[$(INST_LIBDIR)/ZoneMinder/Trigger/Channel.pm], lib/ZoneMinder/Memory.pm=>q[$(INST_LIBDIR)/ZoneMinder/Memory.pm], lib/ZoneMinder/Trigger/Channel/File.pm=>q[$(INST_LIBDIR)/ZoneMinder/Trigger/Channel/File.pm], lib/ZoneMinder/Database.pm=>q[$(INST_LIBDIR)/ZoneMinder/Database.pm], lib/ZoneMinder/ConfigData.pm=>q[$(INST_LIBDIR)/ZoneMinder/ConfigData.pm], lib/ZoneMinder/Control/PelcoD.pm=>q[$(INST_LIBDIR)/ZoneMinder/Control/PelcoD.pm], lib/ZoneMinder/Control/Visca.pm=>q[$(INST_LIBDIR)/ZoneMinder/Control/Visca.pm], lib/ZoneMinder/Trigger/Channel/Inet.pm=>q[$(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Inet.pm], lib/ZoneMinder/Logger.pm=>q[$(INST_LIBDIR)/ZoneMinder/Logger.pm], lib/ZoneMinder/Trigger/Connection/Example.pm=>q[$(INST_LIBDIR)/ZoneMinder/Trigger/Connection/Example.pm], lib/ZoneMinder/Trigger/Channel/Spawning.pm=>q[$(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Spawning.pm], lib/ZoneMinder/Control.pm=>q[$(INST_LIBDIR)/ZoneMinder/Control.pm], lib/ZoneMinder/General.pm=>q[$(INST_LIBDIR)/ZoneMinder/General.pm], lib/ZoneMinder/Trigger/Channel/Handle.pm=>q[$(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Handle.pm], lib/ZoneMinder/ConfigAdmin.pm=>q[$(INST_LIBDIR)/ZoneMinder/ConfigAdmin.pm] } +# PREREQ_PM => { } +# VERSION_FROM => q[lib/ZoneMinder/Base.pm] + +# --- MakeMaker post_initialize section: + + +# --- MakeMaker const_config section: + +# These definitions are from config.sh (via /usr/lib/perl/5.14/Config.pm). +# They may have been overridden via Makefile.PL or on the command line. +AR = ar +CC = cc +CCCDLFLAGS = -fPIC +CCDLFLAGS = -Wl,-E +DLEXT = so +DLSRC = dl_dlopen.xs +EXE_EXT = +FULL_AR = /usr/bin/ar +LD = cc +LDDLFLAGS = -shared -L/usr/local/lib -fstack-protector +LDFLAGS = -fstack-protector -L/usr/local/lib +LIBC = +LIB_EXT = .a +OBJ_EXT = .o +OSNAME = linux +OSVERS = 2.6.32-5-amd64 +RANLIB = : +SITELIBEXP = /usr/local/share/perl/5.14.2 +SITEARCHEXP = /usr/local/lib/perl/5.14.2 +SO = so +VENDORARCHEXP = /usr/lib/perl5 +VENDORLIBEXP = /usr/share/perl5 + + +# --- MakeMaker constants section: +AR_STATIC_ARGS = cr +DIRFILESEP = / +DFSEP = $(DIRFILESEP) +NAME = ZoneMinder +NAME_SYM = ZoneMinder +VERSION = 1.25.0 +VERSION_MACRO = VERSION +VERSION_SYM = 1_25_0 +DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\" +XS_VERSION = 1.25.0 +XS_VERSION_MACRO = XS_VERSION +XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\" +INST_ARCHLIB = blib/arch +INST_SCRIPT = blib/script +INST_BIN = blib/bin +INST_LIB = blib/lib +INST_MAN1DIR = blib/man1 +INST_MAN3DIR = blib/man3 +MAN1EXT = 1p +MAN3EXT = 3pm +INSTALLDIRS = site +DESTDIR = +PREFIX = /usr +PERLPREFIX = $(PREFIX) +SITEPREFIX = $(PREFIX)/local +VENDORPREFIX = $(PREFIX) +INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.14 +DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB) +INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.14.2 +DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB) +INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5 +DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB) +INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.14 +DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB) +INSTALLSITEARCH = $(SITEPREFIX)/lib/perl/5.14.2 +DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH) +INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5 +DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH) +INSTALLBIN = $(PERLPREFIX)/bin +DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN) +INSTALLSITEBIN = $(SITEPREFIX)/bin +DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN) +INSTALLVENDORBIN = $(VENDORPREFIX)/bin +DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN) +INSTALLSCRIPT = $(PERLPREFIX)/bin +DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT) +INSTALLSITESCRIPT = $(SITEPREFIX)/bin +DESTINSTALLSITESCRIPT = $(DESTDIR)$(INSTALLSITESCRIPT) +INSTALLVENDORSCRIPT = $(VENDORPREFIX)/bin +DESTINSTALLVENDORSCRIPT = $(DESTDIR)$(INSTALLVENDORSCRIPT) +INSTALLMAN1DIR = $(PERLPREFIX)/share/man/man1 +DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR) +INSTALLSITEMAN1DIR = $(SITEPREFIX)/man/man1 +DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR) +INSTALLVENDORMAN1DIR = $(VENDORPREFIX)/share/man/man1 +DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR) +INSTALLMAN3DIR = $(PERLPREFIX)/share/man/man3 +DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR) +INSTALLSITEMAN3DIR = $(SITEPREFIX)/man/man3 +DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR) +INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3 +DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR) +PERL_LIB = /usr/share/perl/5.14 +PERL_ARCHLIB = /usr/lib/perl/5.14 +LIBPERL_A = libperl.a +FIRST_MAKEFILE = Makefile +MAKEFILE_OLD = Makefile.old +MAKE_APERL_FILE = Makefile.aperl +PERLMAINCC = $(CC) +PERL_INC = /usr/lib/perl/5.14/CORE +PERL = /usr/bin/perl +FULLPERL = /usr/bin/perl +ABSPERL = $(PERL) +PERLRUN = $(PERL) +FULLPERLRUN = $(FULLPERL) +ABSPERLRUN = $(ABSPERL) +PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" +FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" +ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" +PERL_CORE = 0 +PERM_DIR = 755 +PERM_RW = 644 +PERM_RWX = 755 + +MAKEMAKER = /usr/share/perl/5.14/ExtUtils/MakeMaker.pm +MM_VERSION = 6.57_05 +MM_REVISION = 65705 + +# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle). +# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle) +# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar) +# DLBASE = Basename part of dynamic library. May be just equal BASEEXT. +MAKE = make +FULLEXT = ZoneMinder +BASEEXT = ZoneMinder +PARENT_NAME = +DLBASE = $(BASEEXT) +VERSION_FROM = lib/ZoneMinder/Base.pm +OBJECT = +LDFROM = $(OBJECT) +LINKTYPE = dynamic +BOOTDEP = + +# Handy lists of source code files: +XS_FILES = +C_FILES = +O_FILES = +H_FILES = +MAN1PODS = +MAN3PODS = lib/ZoneMinder.pm \ + lib/ZoneMinder/Base.pm \ + lib/ZoneMinder/Config.pm \ + lib/ZoneMinder/ConfigAdmin.pm \ + lib/ZoneMinder/ConfigData.pm \ + lib/ZoneMinder/Control.pm \ + lib/ZoneMinder/Control/AxisV2.pm \ + lib/ZoneMinder/Control/Ncs370.pm \ + lib/ZoneMinder/Control/PanasonicIP.pm \ + lib/ZoneMinder/Control/PelcoD.pm \ + lib/ZoneMinder/Control/Visca.pm \ + lib/ZoneMinder/Control/mjpgStreamer.pm \ + lib/ZoneMinder/Database.pm \ + lib/ZoneMinder/General.pm \ + lib/ZoneMinder/Logger.pm \ + lib/ZoneMinder/Memory.pm \ + lib/ZoneMinder/Trigger/Channel.pm \ + lib/ZoneMinder/Trigger/Channel/File.pm \ + lib/ZoneMinder/Trigger/Channel/Handle.pm \ + lib/ZoneMinder/Trigger/Channel/Inet.pm \ + lib/ZoneMinder/Trigger/Channel/Serial.pm \ + lib/ZoneMinder/Trigger/Channel/Spawning.pm \ + lib/ZoneMinder/Trigger/Channel/Unix.pm \ + lib/ZoneMinder/Trigger/Connection.pm \ + lib/ZoneMinder/Trigger/Connection/Example.pm + +# Where is the Config information that we are using/depend on +CONFIGDEP = $(PERL_ARCHLIB)$(DFSEP)Config.pm $(PERL_INC)$(DFSEP)config.h + +# Where to build things +INST_LIBDIR = $(INST_LIB) +INST_ARCHLIBDIR = $(INST_ARCHLIB) + +INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT) +INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT) + +INST_STATIC = +INST_DYNAMIC = +INST_BOOT = + +# Extra linker info +EXPORT_LIST = +PERL_ARCHIVE = +PERL_ARCHIVE_AFTER = + + +TO_INST_PM = lib/ZoneMinder.pm \ + lib/ZoneMinder/Base.pm \ + lib/ZoneMinder/Config.pm \ + lib/ZoneMinder/ConfigAdmin.pm \ + lib/ZoneMinder/ConfigData.pm \ + lib/ZoneMinder/Control.pm \ + lib/ZoneMinder/Control/AxisV2.pm \ + lib/ZoneMinder/Control/Ncs370.pm \ + lib/ZoneMinder/Control/PanasonicIP.pm \ + lib/ZoneMinder/Control/PelcoD.pm \ + lib/ZoneMinder/Control/Visca.pm \ + lib/ZoneMinder/Control/mjpgStreamer.pm \ + lib/ZoneMinder/Database.pm \ + lib/ZoneMinder/General.pm \ + lib/ZoneMinder/Logger.pm \ + lib/ZoneMinder/Memory.pm \ + lib/ZoneMinder/Memory/Mapped.pm \ + lib/ZoneMinder/Memory/Shared.pm \ + lib/ZoneMinder/Trigger/Channel.pm \ + lib/ZoneMinder/Trigger/Channel/File.pm \ + lib/ZoneMinder/Trigger/Channel/Handle.pm \ + lib/ZoneMinder/Trigger/Channel/Inet.pm \ + lib/ZoneMinder/Trigger/Channel/Serial.pm \ + lib/ZoneMinder/Trigger/Channel/Spawning.pm \ + lib/ZoneMinder/Trigger/Channel/Unix.pm \ + lib/ZoneMinder/Trigger/Connection.pm \ + lib/ZoneMinder/Trigger/Connection/Example.pm + +PM_TO_BLIB = lib/ZoneMinder/Trigger/Connection.pm \ + $(INST_LIBDIR)/ZoneMinder/Trigger/Connection.pm \ + lib/ZoneMinder/Control/Ncs370.pm \ + $(INST_LIBDIR)/ZoneMinder/Control/Ncs370.pm \ + lib/ZoneMinder/Trigger/Channel/Serial.pm \ + $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Serial.pm \ + lib/ZoneMinder/Memory/Shared.pm \ + $(INST_LIBDIR)/ZoneMinder/Memory/Shared.pm \ + lib/ZoneMinder.pm \ + $(INST_LIBDIR)/ZoneMinder.pm \ + lib/ZoneMinder/Config.pm \ + $(INST_LIBDIR)/ZoneMinder/Config.pm \ + lib/ZoneMinder/Control/mjpgStreamer.pm \ + $(INST_LIBDIR)/ZoneMinder/Control/mjpgStreamer.pm \ + lib/ZoneMinder/Trigger/Channel/Unix.pm \ + $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Unix.pm \ + lib/ZoneMinder/Control/PanasonicIP.pm \ + $(INST_LIBDIR)/ZoneMinder/Control/PanasonicIP.pm \ + lib/ZoneMinder/Base.pm \ + $(INST_LIBDIR)/ZoneMinder/Base.pm \ + lib/ZoneMinder/Control/AxisV2.pm \ + $(INST_LIBDIR)/ZoneMinder/Control/AxisV2.pm \ + lib/ZoneMinder/Memory/Mapped.pm \ + $(INST_LIBDIR)/ZoneMinder/Memory/Mapped.pm \ + lib/ZoneMinder/Trigger/Channel.pm \ + $(INST_LIBDIR)/ZoneMinder/Trigger/Channel.pm \ + lib/ZoneMinder/Memory.pm \ + $(INST_LIBDIR)/ZoneMinder/Memory.pm \ + lib/ZoneMinder/Trigger/Channel/File.pm \ + $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/File.pm \ + lib/ZoneMinder/Database.pm \ + $(INST_LIBDIR)/ZoneMinder/Database.pm \ + lib/ZoneMinder/ConfigData.pm \ + $(INST_LIBDIR)/ZoneMinder/ConfigData.pm \ + lib/ZoneMinder/Control/PelcoD.pm \ + $(INST_LIBDIR)/ZoneMinder/Control/PelcoD.pm \ + lib/ZoneMinder/Control/Visca.pm \ + $(INST_LIBDIR)/ZoneMinder/Control/Visca.pm \ + lib/ZoneMinder/Trigger/Channel/Inet.pm \ + $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Inet.pm \ + lib/ZoneMinder/Logger.pm \ + $(INST_LIBDIR)/ZoneMinder/Logger.pm \ + lib/ZoneMinder/Trigger/Connection/Example.pm \ + $(INST_LIBDIR)/ZoneMinder/Trigger/Connection/Example.pm \ + lib/ZoneMinder/Trigger/Channel/Spawning.pm \ + $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Spawning.pm \ + lib/ZoneMinder/Control.pm \ + $(INST_LIBDIR)/ZoneMinder/Control.pm \ + lib/ZoneMinder/General.pm \ + $(INST_LIBDIR)/ZoneMinder/General.pm \ + lib/ZoneMinder/Trigger/Channel/Handle.pm \ + $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Handle.pm \ + lib/ZoneMinder/ConfigAdmin.pm \ + $(INST_LIBDIR)/ZoneMinder/ConfigAdmin.pm + + +# --- MakeMaker platform_constants section: +MM_Unix_VERSION = 6.57_05 +PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc + + +# --- MakeMaker tool_autosplit section: +# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto +AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' -- + + + +# --- MakeMaker tool_xsubpp section: + + +# --- MakeMaker tools_other section: +SHELL = /bin/sh +CHMOD = chmod +CP = cp +MV = mv +NOOP = $(TRUE) +NOECHO = @ +RM_F = rm -f +RM_RF = rm -rf +TEST_F = test -f +TOUCH = touch +UMASK_NULL = umask 0 +DEV_NULL = > /dev/null 2>&1 +MKPATH = $(ABSPERLRUN) -MExtUtils::Command -e 'mkpath' -- +EQUALIZE_TIMESTAMP = $(ABSPERLRUN) -MExtUtils::Command -e 'eqtime' -- +FALSE = false +TRUE = true +ECHO = echo +ECHO_N = echo -n +UNINST = 0 +VERBINST = 0 +MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''$(VERBINST)'\'', uninstall_shadows => '\''$(UNINST)'\'', dir_mode => '\''$(PERM_DIR)'\'' ]);' -- +DOC_INSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'perllocal_install' -- +UNINSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'uninstall' -- +WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'warn_if_old_packlist' -- +MACROSTART = +MACROEND = +USEMAKEFILE = -f +FIXIN = $(ABSPERLRUN) -MExtUtils::MY -e 'MY->fixin(shift)' -- + + +# --- MakeMaker makemakerdflt section: +makemakerdflt : all + $(NOECHO) $(NOOP) + + +# --- MakeMaker dist section: +TAR = tar +TARFLAGS = cvf +ZIP = zip +ZIPFLAGS = -r +COMPRESS = gzip --best +SUFFIX = .gz +SHAR = shar +PREOP = $(NOECHO) $(NOOP) +POSTOP = $(NOECHO) $(NOOP) +TO_UNIX = $(NOECHO) $(NOOP) +CI = ci -u +RCS_LABEL = rcs -Nv$(VERSION_SYM): -q +DIST_CP = best +DIST_DEFAULT = tardist +DISTNAME = ZoneMinder +DISTVNAME = ZoneMinder-1.25.0 + + +# --- MakeMaker macro section: + + +# --- MakeMaker depend section: + + +# --- MakeMaker cflags section: + + +# --- MakeMaker const_loadlibs section: + + +# --- MakeMaker const_cccmd section: + + +# --- MakeMaker post_constants section: + + +# --- MakeMaker pasthru section: + +PASTHRU = LIBPERL_A="$(LIBPERL_A)"\ + LINKTYPE="$(LINKTYPE)"\ + LD="$(LD)"\ + PREFIX="$(PREFIX)" + + +# --- MakeMaker special_targets section: +.SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT) + +.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir + + + +# --- MakeMaker c_o section: + + +# --- MakeMaker xs_c section: + + +# --- MakeMaker xs_o section: + + +# --- MakeMaker top_targets section: +all :: pure_all manifypods + $(NOECHO) $(NOOP) + + +pure_all :: config pm_to_blib subdirs linkext + $(NOECHO) $(NOOP) + +subdirs :: $(MYEXTLIB) + $(NOECHO) $(NOOP) + +config :: $(FIRST_MAKEFILE) blibdirs + $(NOECHO) $(NOOP) + +help : + perldoc ExtUtils::MakeMaker + + +# --- MakeMaker blibdirs section: +blibdirs : $(INST_LIBDIR)$(DFSEP).exists $(INST_ARCHLIB)$(DFSEP).exists $(INST_AUTODIR)$(DFSEP).exists $(INST_ARCHAUTODIR)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists $(INST_SCRIPT)$(DFSEP).exists $(INST_MAN1DIR)$(DFSEP).exists $(INST_MAN3DIR)$(DFSEP).exists + $(NOECHO) $(NOOP) + +# Backwards compat with 6.18 through 6.25 +blibdirs.ts : blibdirs + $(NOECHO) $(NOOP) + +$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_LIBDIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_LIBDIR) + $(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists + +$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_ARCHLIB) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHLIB) + $(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists + +$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_AUTODIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_AUTODIR) + $(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists + +$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHAUTODIR) + $(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists + +$(INST_BIN)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_BIN) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_BIN) + $(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists + +$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_SCRIPT) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_SCRIPT) + $(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists + +$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_MAN1DIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN1DIR) + $(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists + +$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_MAN3DIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN3DIR) + $(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists + + + +# --- MakeMaker linkext section: + +linkext :: $(LINKTYPE) + $(NOECHO) $(NOOP) + + +# --- MakeMaker dlsyms section: + + +# --- MakeMaker dynamic section: + +dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT) + $(NOECHO) $(NOOP) + + +# --- MakeMaker dynamic_bs section: + +BOOTSTRAP = + + +# --- MakeMaker dynamic_lib section: + + +# --- MakeMaker static section: + +## $(INST_PM) has been moved to the all: target. +## It remains here for awhile to allow for old usage: "make static" +static :: $(FIRST_MAKEFILE) $(INST_STATIC) + $(NOECHO) $(NOOP) + + +# --- MakeMaker static_lib section: + + +# --- MakeMaker manifypods section: + +POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--" +POD2MAN = $(POD2MAN_EXE) + + +manifypods : pure_all \ + lib/ZoneMinder/Trigger/Connection.pm \ + lib/ZoneMinder/Control/Ncs370.pm \ + lib/ZoneMinder/Trigger/Channel/Serial.pm \ + lib/ZoneMinder.pm \ + lib/ZoneMinder/Config.pm \ + lib/ZoneMinder/Control/mjpgStreamer.pm \ + lib/ZoneMinder/Control/PanasonicIP.pm \ + lib/ZoneMinder/Base.pm \ + lib/ZoneMinder/Trigger/Channel/Unix.pm \ + lib/ZoneMinder/Control/AxisV2.pm \ + lib/ZoneMinder/Trigger/Channel.pm \ + lib/ZoneMinder/Memory.pm \ + lib/ZoneMinder/Trigger/Channel/File.pm \ + lib/ZoneMinder/Database.pm \ + lib/ZoneMinder/ConfigData.pm \ + lib/ZoneMinder/Control/PelcoD.pm \ + lib/ZoneMinder/Control/Visca.pm \ + lib/ZoneMinder/Trigger/Channel/Inet.pm \ + lib/ZoneMinder/Logger.pm \ + lib/ZoneMinder/Trigger/Connection/Example.pm \ + lib/ZoneMinder/Trigger/Channel/Spawning.pm \ + lib/ZoneMinder/Control.pm \ + lib/ZoneMinder/General.pm \ + lib/ZoneMinder/Trigger/Channel/Handle.pm \ + lib/ZoneMinder/ConfigAdmin.pm + $(NOECHO) $(POD2MAN) --section=$(MAN3EXT) --perm_rw=$(PERM_RW) \ + lib/ZoneMinder/Trigger/Connection.pm $(INST_MAN3DIR)/ZoneMinder::Trigger::Connection.$(MAN3EXT) \ + lib/ZoneMinder/Control/Ncs370.pm $(INST_MAN3DIR)/ZoneMinder::Control::Ncs370.$(MAN3EXT) \ + lib/ZoneMinder/Trigger/Channel/Serial.pm $(INST_MAN3DIR)/ZoneMinder::Trigger::Channel::Serial.$(MAN3EXT) \ + lib/ZoneMinder.pm $(INST_MAN3DIR)/ZoneMinder.$(MAN3EXT) \ + lib/ZoneMinder/Config.pm $(INST_MAN3DIR)/ZoneMinder::Config.$(MAN3EXT) \ + lib/ZoneMinder/Control/mjpgStreamer.pm $(INST_MAN3DIR)/ZoneMinder::Control::mjpgStreamer.$(MAN3EXT) \ + lib/ZoneMinder/Control/PanasonicIP.pm $(INST_MAN3DIR)/ZoneMinder::Control::PanasonicIP.$(MAN3EXT) \ + lib/ZoneMinder/Base.pm $(INST_MAN3DIR)/ZoneMinder::Base.$(MAN3EXT) \ + lib/ZoneMinder/Trigger/Channel/Unix.pm $(INST_MAN3DIR)/ZoneMinder::Trigger::Channel::Unix.$(MAN3EXT) \ + lib/ZoneMinder/Control/AxisV2.pm $(INST_MAN3DIR)/ZoneMinder::Control::AxisV2.$(MAN3EXT) \ + lib/ZoneMinder/Trigger/Channel.pm $(INST_MAN3DIR)/ZoneMinder::Trigger::Channel.$(MAN3EXT) \ + lib/ZoneMinder/Memory.pm $(INST_MAN3DIR)/ZoneMinder::Memory.$(MAN3EXT) \ + lib/ZoneMinder/Trigger/Channel/File.pm $(INST_MAN3DIR)/ZoneMinder::Trigger::Channel::File.$(MAN3EXT) \ + lib/ZoneMinder/Database.pm $(INST_MAN3DIR)/ZoneMinder::Database.$(MAN3EXT) \ + lib/ZoneMinder/ConfigData.pm $(INST_MAN3DIR)/ZoneMinder::ConfigData.$(MAN3EXT) \ + lib/ZoneMinder/Control/PelcoD.pm $(INST_MAN3DIR)/ZoneMinder::Control::PelcoD.$(MAN3EXT) \ + lib/ZoneMinder/Control/Visca.pm $(INST_MAN3DIR)/ZoneMinder::Control::Visca.$(MAN3EXT) \ + lib/ZoneMinder/Trigger/Channel/Inet.pm $(INST_MAN3DIR)/ZoneMinder::Trigger::Channel::Inet.$(MAN3EXT) \ + lib/ZoneMinder/Logger.pm $(INST_MAN3DIR)/ZoneMinder::Logger.$(MAN3EXT) \ + lib/ZoneMinder/Trigger/Connection/Example.pm $(INST_MAN3DIR)/ZoneMinder::Trigger::Connection::Example.$(MAN3EXT) \ + lib/ZoneMinder/Trigger/Channel/Spawning.pm $(INST_MAN3DIR)/ZoneMinder::Trigger::Channel::Spawning.$(MAN3EXT) \ + lib/ZoneMinder/Control.pm $(INST_MAN3DIR)/ZoneMinder::Control.$(MAN3EXT) \ + lib/ZoneMinder/General.pm $(INST_MAN3DIR)/ZoneMinder::General.$(MAN3EXT) \ + lib/ZoneMinder/Trigger/Channel/Handle.pm $(INST_MAN3DIR)/ZoneMinder::Trigger::Channel::Handle.$(MAN3EXT) \ + lib/ZoneMinder/ConfigAdmin.pm $(INST_MAN3DIR)/ZoneMinder::ConfigAdmin.$(MAN3EXT) + + + + +# --- MakeMaker processPL section: + + +# --- MakeMaker installbin section: + + +# --- MakeMaker subdirs section: + +# none + +# --- MakeMaker clean_subdirs section: +clean_subdirs : + $(NOECHO) $(NOOP) + + +# --- MakeMaker clean section: + +# Delete temporary files but do not touch installed files. We don't delete +# the Makefile here so a later make realclean still has a makefile to use. + +clean :: clean_subdirs + - $(RM_F) \ + *$(LIB_EXT) core \ + core.[0-9] $(INST_ARCHAUTODIR)/extralibs.all \ + core.[0-9][0-9] $(BASEEXT).bso \ + pm_to_blib.ts core.[0-9][0-9][0-9][0-9] \ + MYMETA.yml $(BASEEXT).x \ + $(BOOTSTRAP) perl$(EXE_EXT) \ + tmon.out *$(OBJ_EXT) \ + pm_to_blib $(INST_ARCHAUTODIR)/extralibs.ld \ + blibdirs.ts core.[0-9][0-9][0-9][0-9][0-9] \ + *perl.core core.*perl.*.? \ + $(MAKE_APERL_FILE) perl \ + $(BASEEXT).def core.[0-9][0-9][0-9] \ + mon.out lib$(BASEEXT).def \ + perlmain.c perl.exe \ + so_locations $(BASEEXT).exp + - $(RM_RF) \ + blib + - $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL) + + +# --- MakeMaker realclean_subdirs section: +realclean_subdirs : + $(NOECHO) $(NOOP) + + +# --- MakeMaker realclean section: +# Delete temporary files (via clean) and also delete dist files +realclean purge :: clean realclean_subdirs + - $(RM_F) \ + $(MAKEFILE_OLD) $(FIRST_MAKEFILE) + - $(RM_RF) \ + $(DISTVNAME) + + +# --- MakeMaker metafile section: +metafile : create_distdir + $(NOECHO) $(ECHO) Generating META.yml + $(NOECHO) $(ECHO) '--- #YAML:1.0' > META_new.yml + $(NOECHO) $(ECHO) 'name: ZoneMinder' >> META_new.yml + $(NOECHO) $(ECHO) 'version: 1.25.0' >> META_new.yml + $(NOECHO) $(ECHO) 'abstract: Container module for common ZoneMinder modules' >> META_new.yml + $(NOECHO) $(ECHO) 'author:' >> META_new.yml + $(NOECHO) $(ECHO) ' - Philip Coombes ' >> META_new.yml + $(NOECHO) $(ECHO) 'license: unknown' >> META_new.yml + $(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml + $(NOECHO) $(ECHO) 'configure_requires:' >> META_new.yml + $(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml + $(NOECHO) $(ECHO) 'build_requires:' >> META_new.yml + $(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml + $(NOECHO) $(ECHO) 'requires: {}' >> META_new.yml + $(NOECHO) $(ECHO) 'no_index:' >> META_new.yml + $(NOECHO) $(ECHO) ' directory:' >> META_new.yml + $(NOECHO) $(ECHO) ' - t' >> META_new.yml + $(NOECHO) $(ECHO) ' - inc' >> META_new.yml + $(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.57_05' >> META_new.yml + $(NOECHO) $(ECHO) 'meta-spec:' >> META_new.yml + $(NOECHO) $(ECHO) ' url: http://module-build.sourceforge.net/META-spec-v1.4.html' >> META_new.yml + $(NOECHO) $(ECHO) ' version: 1.4' >> META_new.yml + -$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml + + +# --- MakeMaker signature section: +signature : + cpansign -s + + +# --- MakeMaker dist_basics section: +distclean :: realclean distcheck + $(NOECHO) $(NOOP) + +distcheck : + $(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck + +skipcheck : + $(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck + +manifest : + $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest + +veryclean : realclean + $(RM_F) *~ */*~ *.orig */*.orig *.bak */*.bak *.old */*.old + + + +# --- MakeMaker dist_core section: + +dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE) + $(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \ + -e ' if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';' -- + +tardist : $(DISTVNAME).tar$(SUFFIX) + $(NOECHO) $(NOOP) + +uutardist : $(DISTVNAME).tar$(SUFFIX) + uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu + +$(DISTVNAME).tar$(SUFFIX) : distdir + $(PREOP) + $(TO_UNIX) + $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME) + $(RM_RF) $(DISTVNAME) + $(COMPRESS) $(DISTVNAME).tar + $(POSTOP) + +zipdist : $(DISTVNAME).zip + $(NOECHO) $(NOOP) + +$(DISTVNAME).zip : distdir + $(PREOP) + $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME) + $(RM_RF) $(DISTVNAME) + $(POSTOP) + +shdist : distdir + $(PREOP) + $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar + $(RM_RF) $(DISTVNAME) + $(POSTOP) + + +# --- MakeMaker distdir section: +create_distdir : + $(RM_RF) $(DISTVNAME) + $(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \ + -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');" + +distdir : create_distdir distmeta + $(NOECHO) $(NOOP) + + + +# --- MakeMaker dist_test section: +disttest : distdir + cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL + cd $(DISTVNAME) && $(MAKE) $(PASTHRU) + cd $(DISTVNAME) && $(MAKE) test $(PASTHRU) + + + +# --- MakeMaker dist_ci section: + +ci : + $(PERLRUN) "-MExtUtils::Manifest=maniread" \ + -e "@all = keys %{ maniread() };" \ + -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \ + -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});" + + +# --- MakeMaker distmeta section: +distmeta : create_distdir metafile + $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \ + -e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' -- + + + +# --- MakeMaker distsignature section: +distsignature : create_distdir + $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \ + -e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' -- + $(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE + cd $(DISTVNAME) && cpansign -s + + + +# --- MakeMaker install section: + +install :: pure_install doc_install + $(NOECHO) $(NOOP) + +install_perl :: pure_perl_install doc_perl_install + $(NOECHO) $(NOOP) + +install_site :: pure_site_install doc_site_install + $(NOECHO) $(NOOP) + +install_vendor :: pure_vendor_install doc_vendor_install + $(NOECHO) $(NOOP) + +pure_install :: pure_$(INSTALLDIRS)_install + $(NOECHO) $(NOOP) + +doc_install :: doc_$(INSTALLDIRS)_install + $(NOECHO) $(NOOP) + +pure__install : pure_site_install + $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site + +doc__install : doc_site_install + $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site + +pure_perl_install :: all + $(NOECHO) umask 022; $(MOD_INSTALL) \ + $(INST_LIB) $(DESTINSTALLPRIVLIB) \ + $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \ + $(INST_BIN) $(DESTINSTALLBIN) \ + $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \ + $(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \ + $(INST_MAN3DIR) $(DESTINSTALLMAN3DIR) + $(NOECHO) $(WARN_IF_OLD_PACKLIST) \ + $(SITEARCHEXP)/auto/$(FULLEXT) + + +pure_site_install :: all + $(NOECHO) umask 02; $(MOD_INSTALL) \ + read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \ + write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \ + $(INST_LIB) $(DESTINSTALLSITELIB) \ + $(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \ + $(INST_BIN) $(DESTINSTALLSITEBIN) \ + $(INST_SCRIPT) $(DESTINSTALLSITESCRIPT) \ + $(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \ + $(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR) + $(NOECHO) $(WARN_IF_OLD_PACKLIST) \ + $(PERL_ARCHLIB)/auto/$(FULLEXT) + +pure_vendor_install :: all + $(NOECHO) umask 022; $(MOD_INSTALL) \ + $(INST_LIB) $(DESTINSTALLVENDORLIB) \ + $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \ + $(INST_BIN) $(DESTINSTALLVENDORBIN) \ + $(INST_SCRIPT) $(DESTINSTALLVENDORSCRIPT) \ + $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \ + $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR) + +doc_perl_install :: all + +doc_site_install :: all + $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod + -$(NOECHO) umask 02; $(MKPATH) $(DESTINSTALLSITEARCH) + -$(NOECHO) umask 02; $(DOC_INSTALL) \ + "Module" "$(NAME)" \ + "installed into" "$(INSTALLSITELIB)" \ + LINKTYPE "$(LINKTYPE)" \ + VERSION "$(VERSION)" \ + EXE_FILES "$(EXE_FILES)" \ + >> $(DESTINSTALLSITEARCH)/perllocal.pod + +doc_vendor_install :: all + + +uninstall :: uninstall_from_$(INSTALLDIRS)dirs + $(NOECHO) $(NOOP) + +uninstall_from_perldirs :: + +uninstall_from_sitedirs :: + $(NOECHO) $(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist + +uninstall_from_vendordirs :: + + + +# --- MakeMaker force section: +# Phony target to force checking subdirectories. +FORCE : + $(NOECHO) $(NOOP) + + +# --- MakeMaker perldepend section: + + +# --- MakeMaker makefile section: +# We take a very conservative approach here, but it's worth it. +# We move Makefile to Makefile.old here to avoid gnu make looping. +$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP) + $(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?" + $(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..." + -$(NOECHO) $(RM_F) $(MAKEFILE_OLD) + -$(NOECHO) $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) + - $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL) + $(PERLRUN) Makefile.PL + $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <==" + $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <==" + $(FALSE) + + + +# --- MakeMaker staticmake section: + +# --- MakeMaker makeaperl section --- +MAP_TARGET = perl +FULLPERL = /usr/bin/perl + +$(MAP_TARGET) :: static $(MAKE_APERL_FILE) + $(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@ + +$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) pm_to_blib + $(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET) + $(NOECHO) $(PERLRUNINST) \ + Makefile.PL DIR= \ + MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \ + MAKEAPERL=1 NORECURS=1 CCCDLFLAGS= + + +# --- MakeMaker test section: + +TEST_VERBOSE=0 +TEST_TYPE=test_$(LINKTYPE) +TEST_FILE = test.pl +TEST_FILES = t/*.t +TESTDB_SW = -d + +testdb :: testdb_$(LINKTYPE) + +test :: $(TEST_TYPE) subdirs-test + +subdirs-test :: + $(NOECHO) $(NOOP) + + +test_dynamic :: pure_all + PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-MExtUtils::Command::MM" "-e" "test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES) + +testdb_dynamic :: pure_all + PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE) + +test_ : test_dynamic + +test_static :: test_dynamic +testdb_static :: testdb_dynamic + + +# --- MakeMaker ppd section: +# Creates a PPD (Perl Package Description) for a binary distribution. +ppd : + $(NOECHO) $(ECHO) '' > $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' Container module for common ZoneMinder modules' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' Philip Coombes <philip.coombes@zoneminder.com>' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) '' >> $(DISTNAME).ppd + + +# --- MakeMaker pm_to_blib section: + +pm_to_blib : $(FIRST_MAKEFILE) $(TO_INST_PM) + $(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', q[$(PM_FILTER)], '\''$(PERM_DIR)'\'')' -- \ + lib/ZoneMinder/Trigger/Connection.pm $(INST_LIBDIR)/ZoneMinder/Trigger/Connection.pm \ + lib/ZoneMinder/Control/Ncs370.pm $(INST_LIBDIR)/ZoneMinder/Control/Ncs370.pm \ + lib/ZoneMinder/Trigger/Channel/Serial.pm $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Serial.pm \ + lib/ZoneMinder/Memory/Shared.pm $(INST_LIBDIR)/ZoneMinder/Memory/Shared.pm \ + lib/ZoneMinder.pm $(INST_LIBDIR)/ZoneMinder.pm \ + lib/ZoneMinder/Config.pm $(INST_LIBDIR)/ZoneMinder/Config.pm \ + lib/ZoneMinder/Control/mjpgStreamer.pm $(INST_LIBDIR)/ZoneMinder/Control/mjpgStreamer.pm \ + lib/ZoneMinder/Trigger/Channel/Unix.pm $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Unix.pm \ + lib/ZoneMinder/Control/PanasonicIP.pm $(INST_LIBDIR)/ZoneMinder/Control/PanasonicIP.pm \ + lib/ZoneMinder/Base.pm $(INST_LIBDIR)/ZoneMinder/Base.pm \ + lib/ZoneMinder/Control/AxisV2.pm $(INST_LIBDIR)/ZoneMinder/Control/AxisV2.pm \ + lib/ZoneMinder/Memory/Mapped.pm $(INST_LIBDIR)/ZoneMinder/Memory/Mapped.pm \ + lib/ZoneMinder/Trigger/Channel.pm $(INST_LIBDIR)/ZoneMinder/Trigger/Channel.pm \ + lib/ZoneMinder/Memory.pm $(INST_LIBDIR)/ZoneMinder/Memory.pm \ + lib/ZoneMinder/Trigger/Channel/File.pm $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/File.pm \ + lib/ZoneMinder/Database.pm $(INST_LIBDIR)/ZoneMinder/Database.pm \ + lib/ZoneMinder/ConfigData.pm $(INST_LIBDIR)/ZoneMinder/ConfigData.pm \ + lib/ZoneMinder/Control/PelcoD.pm $(INST_LIBDIR)/ZoneMinder/Control/PelcoD.pm \ + lib/ZoneMinder/Control/Visca.pm $(INST_LIBDIR)/ZoneMinder/Control/Visca.pm \ + lib/ZoneMinder/Trigger/Channel/Inet.pm $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Inet.pm \ + lib/ZoneMinder/Logger.pm $(INST_LIBDIR)/ZoneMinder/Logger.pm \ + lib/ZoneMinder/Trigger/Connection/Example.pm $(INST_LIBDIR)/ZoneMinder/Trigger/Connection/Example.pm \ + lib/ZoneMinder/Trigger/Channel/Spawning.pm $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Spawning.pm \ + lib/ZoneMinder/Control.pm $(INST_LIBDIR)/ZoneMinder/Control.pm \ + lib/ZoneMinder/General.pm $(INST_LIBDIR)/ZoneMinder/General.pm \ + lib/ZoneMinder/Trigger/Channel/Handle.pm $(INST_LIBDIR)/ZoneMinder/Trigger/Channel/Handle.pm \ + lib/ZoneMinder/ConfigAdmin.pm $(INST_LIBDIR)/ZoneMinder/ConfigAdmin.pm + $(NOECHO) $(TOUCH) pm_to_blib + + +# --- MakeMaker selfdocument section: + + +# --- MakeMaker postamble section: + + +# End. diff --git a/scripts/ZoneMinder/blib/arch/.exists b/scripts/ZoneMinder/blib/arch/.exists new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/ZoneMinder/blib/arch/auto/ZoneMinder/.exists b/scripts/ZoneMinder/blib/arch/auto/ZoneMinder/.exists new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/ZoneMinder/blib/bin/.exists b/scripts/ZoneMinder/blib/bin/.exists new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/ZoneMinder/blib/lib/.exists b/scripts/ZoneMinder/blib/lib/.exists new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder.pm new file mode 100644 index 000000000..41c972650 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder.pm @@ -0,0 +1,130 @@ +# ========================================================================== +# +# ZoneMinder Common Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder; + +use 5.006; +use strict; +use warnings; + +require Exporter; +use ZoneMinder::Base qw(:all); +use ZoneMinder::Config qw(:all); +use ZoneMinder::Logger qw(:all); +use ZoneMinder::General qw(:all); +use ZoneMinder::Database qw(:all); +use ZoneMinder::Memory qw(:all); + +our @ISA = qw(Exporter ZoneMinder::Base ZoneMinder::Config ZoneMinder::Logger ZoneMinder::General ZoneMinder::Database ZoneMinder::Memory); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'base' => [ + @ZoneMinder::Base::EXPORT_OK + ], + 'config' => [ + @ZoneMinder::Config::EXPORT_OK + ], + 'debug' => [ + @ZoneMinder::Logger::EXPORT_OK + ], + 'general' => [ + @ZoneMinder::General::EXPORT_OK + ], + 'database' => [ + @ZoneMinder::Database::EXPORT_OK + ], + 'memory' => [ + @ZoneMinder::Memory::EXPORT_OK + ], +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = @{ $EXPORT_TAGS{'all'} }; + +our @EXPORT = ( @EXPORT_OK ); + +our $VERSION = $ZoneMinder::Base::VERSION; + +1; +__END__ + +=head1 NAME + +ZoneMinder - Container module for common ZoneMinder modules + +=head1 SYNOPSIS + + use ZoneMinder; + +=head1 DESCRIPTION + +This module is a convenience container module that uses the +ZoneMinder::Base, ZoneMinder::Common, ZoneMinder::Logger, +ZoneMinder::Database and ZoneMinder::Memory modules. It also +exports by default all symbols provided by the 'all' tag of +each of the modules. + +Thus 'use'ing this module is equivalent to the following + + use ZoneMinder::Base qw(:all); + use ZoneMinder::Config qw(:all); + use ZoneMinder::Logger qw(:all); + use ZoneMinder::Database qw(:all); + use ZoneMinder::Memory qw(:all); + +but is somewhat easier. + +=head2 EXPORT + +All symbols exported by the 'all' tag of each of the included +modules. + +=head1 SEE ALSO + +ZoneMinder::Base, ZoneMinder::Common, ZoneMinder::Logger, +ZoneMinder::Database, ZoneMinder::Memory + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2005 by Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Base.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Base.pm new file mode 100644 index 000000000..095ddc37b --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Base.pm @@ -0,0 +1,86 @@ +# ========================================================================== +# +# ZoneMinder Base Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::Base; + +use 5.006; +use strict; +use warnings; + +require Exporter; + +our @ISA = qw(Exporter); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( 'all' => [ qw() ] ); + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw(); + +our $VERSION = "1.25.0"; + +1; +__END__ + +=head1 NAME + +ZoneMinder::Base - Base perl module for ZoneMinder + +=head1 SYNOPSIS + + use ZoneMinder::Base; + +=head1 DESCRIPTION + +This module is the base module for the rest of the ZoneMinder modules. It is included by each of the other modules but serves no purpose other than to propagate the perl module version amongst the other modules. You will never need to use this module directly but if you write new ZoneMinder modules they should include it. + +=head2 EXPORT + +None by default. + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Config.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Config.pm new file mode 100644 index 000000000..e447f86f9 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Config.pm @@ -0,0 +1,145 @@ +# ========================================================================== +# +# ZoneMinder Config Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::Config; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our @EXPORT_CONFIG; # Get populated by BEGIN + +our %EXPORT_TAGS = ( + 'constants' => [ qw( + ZM_PID + ) ] +); +push( @{$EXPORT_TAGS{config}}, @EXPORT_CONFIG ); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +use constant ZM_PID => "/var/run/zm/zm.pid"; # Path to the ZoneMinder run pid file +use constant ZM_CONFIG => "/etc/zm/zm.conf"; # Path to the ZoneMinder config file + +use Carp; + +# Load the config from the database into the symbol table +BEGIN +{ + no strict 'refs'; + + my $config_file = ZM_CONFIG; + ( my $local_config_file = $config_file ) =~ s|^.*/|./|; + if ( -s $local_config_file && -r $local_config_file ) + { + print( STDERR "Warning, overriding installed $local_config_file file with local copy\n" ); + $config_file = $local_config_file; + } + open( CONFIG, "<".$config_file ) or croak( "Can't open config file '$config_file': $!" ); + foreach my $str ( ) + { + next if ( $str =~ /^\s*$/ ); + next if ( $str =~ /^\s*#/ ); + my ( $name, $value ) = $str =~ /^\s*([^=\s]+)\s*=\s*(.+?)\s*$/; + $name =~ tr/a-z/A-Z/; + *{$name} = sub { $value }; + push( @EXPORT_CONFIG, $name ); + } + close( CONFIG ); + + use DBI; + my $dbh = DBI->connect( "DBI:mysql:database=".&ZM_DB_NAME.";host=".&ZM_DB_HOST, &ZM_DB_USER, &ZM_DB_PASS ); + my $sql = "select * from Config"; + my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or croak( "Can't execute: ".$sth->errstr() ); + while( my $config = $sth->fetchrow_hashref() ) + { + *{$config->{Name}} = sub { $config->{Value} }; + push( @EXPORT_CONFIG, $config->{Name} ); + } + $sth->finish(); + $dbh->disconnect(); +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::Config - ZoneMinder configuration module. + +=head1 SYNOPSIS + + use ZoneMinder::Config qw(:all); + +=head1 DESCRIPTION + +The ZoneMinder::Config module is used to import the ZoneMinder configuration from the database. It will do this at compile time in a BEGIN block and require access to the zm.conf file either in the current directory or in its defined location in order to determine database access details, configuration from this file will also be included. If the :all or :config tags are used then this configuration is exported into the namespace of the calling program or module. + +Once the configuration has been imported then configuration variables are defined as constants and can be accessed directory by name, e.g. + + $lang = ZM_LANG_DEFAULT; + +=head2 EXPORT + +None by default. +The :constants tag will export the ZM_PID constant which details the location of the zm.pid file +The :config tag will export all configuration from the database as well as any from the zm.conf file +The :all tag will export all above symbols. + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/ConfigAdmin.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/ConfigAdmin.pm new file mode 100644 index 000000000..8ee1ec82b --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/ConfigAdmin.pm @@ -0,0 +1,213 @@ +# ========================================================================== +# +# ZoneMinder Config Admin Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the debug definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::ConfigAdmin; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'functions' => [ qw( + loadConfigFromDB + saveConfigToDB + ) ] +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'functions'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Configuration Administration +# +# ========================================================================== + +use ZoneMinder::Config qw(:all); +use ZoneMinder::ConfigData qw(:all); + +use Carp; + +sub loadConfigFromDB +{ + print( "Loading config from DB\n" ); + my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + + if ( !$dbh ) + { + print( "Error: unable to load options from database: $DBI::errstr\n" ); + return( 0 ); + } + my $sql = "select * from Config"; + my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or croak( "Can't execute: ".$sth->errstr() ); + my $option_count = 0; + while( my $config = $sth->fetchrow_hashref() ) + { + my ( $name, $value ) = ( $config->{Name}, $config->{Value} ); + #print( "Name = '$name'\n" ); + my $option = $options_hash{$name}; + if ( !$option ) + { + warn( "No option '$name' found, removing" ); + next; + } + #next if ( $option->{category} eq 'hidden' ); + if ( defined($value) ) + { + if ( $option->{type} == $types{boolean} ) + { + $option->{value} = $value?"yes":"no"; + } + else + { + $option->{value} = $value; + } + } + $option_count++;; + } + $sth->finish(); + $dbh->disconnect(); + return( $option_count ); +} + +sub saveConfigToDB +{ + print( "Saving config to DB\n" ); + my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + + if ( !$dbh ) + { + print( "Error: unable to save options to database: $DBI::errstr\n" ); + return( 0 ); + } + my $sql = "delete from Config"; + my $res = $dbh->do( $sql ) or croak( "Can't do '$sql': ".$dbh->errstr() ); + + $sql = "replace into Config set Id = ?, Name = ?, Value = ?, Type = ?, DefaultValue = ?, Hint = ?, Pattern = ?, Format = ?, Prompt = ?, Help = ?, Category = ?, Readonly = ?, Requires = ?"; + my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + foreach my $option ( @options ) + { + #next if ( $option->{category} eq 'hidden' ); + #print( $option->{name}."\n" ) if ( !$option->{category} ); + $option->{db_type} = $option->{type}->{db_type}; + $option->{db_hint} = $option->{type}->{hint}; + $option->{db_pattern} = $option->{type}->{pattern}; + $option->{db_format} = $option->{type}->{format}; + if ( $option->{db_type} eq "boolean" ) + { + $option->{db_value} = ($option->{value} eq "yes")?"1":"0"; + } + else + { + $option->{db_value} = $option->{value}; + } + if ( my $requires = $option->{requires} ) + { + $option->{db_requires} = join( ";", map { my $value = $_->{value}; $value = ($value eq "yes")?1:0 if ( $options_hash{$_->{name}}->{db_type} eq "boolean" ); ( "$_->{name}=$value" ) } @$requires ); + } + else + { + } + my $res = $sth->execute( $option->{id}, $option->{name}, $option->{db_value}, $option->{db_type}, $option->{default}, $option->{db_hint}, $option->{db_pattern}, $option->{db_format}, $option->{description}, $option->{help}, $option->{category}, $option->{readonly}?1:0, $option->{db_requires} ) or croak( "Can't execute: ".$sth->errstr() ); + } + $sth->finish(); + $dbh->disconnect(); +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::ConfigAdmin - ZoneMinder Configuration Administration module + +=head1 SYNOPSIS + + use ZoneMinder::ConfigAdmin; + use ZoneMinder::ConfigAdmin qw(:all); + + loadConfigFromDB(); + saveConfigToDB(); + +=head1 DESCRIPTION + +The ZoneMinder:ConfigAdmin module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. + +The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. + +=head1 METHODS + +=over 4 + +=item loadConfigFromDB (); + +Loads existing configuration from the database (if any) and merges it with the definitions held in this module. This results in the merging of any new configuration and the removal of any deprecated configuration while preserving the existing values of every else. + +=item saveConfigToDB (); + +Saves configuration held in memory to the database. The act of loading and saving configuration is a convenient way to ensure that the configuration held in the database corresponds with the most recent definitions and that all components are using the same set of configuration. + +=head2 EXPORT + +None by default. +The :data tag will export the various configuration data structures +The :functions tag will export the helper functions. +The :all tag will export all above symbols. + + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/ConfigData.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/ConfigData.pm new file mode 100644 index 000000000..e108d8687 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/ConfigData.pm @@ -0,0 +1,2056 @@ +# ========================================================================== +# +# ZoneMinder Config Data Module, $Date: 2011-01-20 18:49:42 +0000 (Thu, 20 Jan 2011) $, $Revision: 3230 $ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the debug definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::ConfigData; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'data' => [ qw( + %types + @options + %options_hash + ) ] +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'data'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Configuration Data +# +# ========================================================================== + +use Carp; + +our $configInitialised = 0; + +sub INIT +{ + initialiseConfig(); +} + +# Types +our %types = +( + string => { db_type=>"string", hint=>"string", pattern=>qr|^(.+)$|, format=>q( $1 ) }, + alphanum => { db_type=>"string", hint=>"alphanumeric", pattern=>qr|^([a-zA-Z0-9-_]+)$|, format=>q( $1 ) }, + text => { db_type=>"text", hint=>"free text", pattern=>qr|^(.+)$|, format=>q( $1 ) }, + boolean => { db_type=>"boolean", hint=>"yes|no", pattern=>qr|^([yn])|i, check=>q( $1 ), format=>q( ($1 =~ /^y/) ? "yes" : "no" ) }, + integer => { db_type=>"integer", hint=>"integer", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + decimal => { db_type=>"decimal", hint=>"decimal", pattern=>qr|^(\d+(?:\.\d+)?)$|, format=>q( $1 ) }, + hexadecimal => { db_type=>"hexadecimal", hint=>"hexadecimal", pattern=>qr|^(?:0x)?([0-9a-f]{1,8})$|, format=>q( "0x".$1 ) }, + tristate => { db_type=>"string", hint=>"auto|yes|no", pattern=>qr|^([ayn])|i, check=>q( $1 ), format=>q( ($1 =~ /^y/) ? "yes" : ($1 =~ /^n/ ? "no" : "auto" ) ) }, + abs_path => { db_type=>"string", hint=>"/absolute/path/to/somewhere", pattern=>qr|^((?:/[^/]*)+?)/?$|, format=>q( $1 ) }, + rel_path => { db_type=>"string", hint=>"relative/path/to/somewhere", pattern=>qr|^((?:[^/].*)?)/?$|, format=>q( $1 ) }, + directory => { db_type=>"string", hint=>"directory", pattern=>qr|^([a-zA-Z0-9-_.]+)$|, format=>q( $1 ) }, + file => { db_type=>"string", hint=>"filename", pattern=>qr|^([a-zA-Z0-9-_.]+)$|, format=>q( $1 ) }, + hostname => { db_type=>"string", hint=>"host.your.domain", pattern=>qr|^([a-zA-Z0-9_.-]+)$|, format=>q( $1 ) }, + url => { db_type=>"string", hint=>"http://host.your.domain/", pattern=>qr|^(?:http://)?(.+)$|, format=>q( "http://".$1 ) }, + email => { db_type=>"string", hint=>"your.name\@your.domain", pattern=>qr|^([a-zA-Z0-9_.-]+)\@([a-zA-Z0-9_.-]+)$|, format=>q( $1\@$2 ) }, +); + +our @options = +( + { + name => "ZM_LANG_DEFAULT", + default => "en_gb", + description => "Default language used by web interface", + help => "ZoneMinder allows the web interface to use languages other than English if the appropriate language file has been created and is present. This option allows you to change the default language that is used from the shipped language, British English, to another language", + type => $types{string}, + category => "system", + }, + { + name => "ZM_OPT_USE_AUTH", + default => "no", + description => "Authenticate user logins to ZoneMinder", + help => "ZoneMinder can run in two modes. The simplest is an entirely unauthenticated mode where anyone can access ZoneMinder and perform all tasks. This is most suitable for installations where the web server access is limited in other ways. The other mode enables user accounts with varying sets of permissions. Users must login or authenticate to access ZoneMinder and are limited by their defined permissions.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_AUTH_TYPE", + default => "builtin", + description => "What is used to authenticate ZoneMinder users", + help => "ZoneMinder can use two methods to authenticate users when running in authenticated mode. The first is a builtin method where ZoneMinder provides facilities for users to log in and maintains track of their identity. The second method allows interworking with other methods such as http basic authentication which passes an independently authentication 'remote' user via http. In this case ZoneMinder would use the supplied user without additional authentication provided such a user is configured ion ZoneMinder.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], + type => { db_type=>"string", hint=>"builtin|remote", pattern=>qr|^([br])|i, format=>q( $1 =~ /^b/ ? "builtin" : "remote" ) }, + category => "system", + }, + { + name => "ZM_AUTH_RELAY", + default => "hashed", + description => "Method used to relay authentication information", + help => "When ZoneMinder is running in authenticated mode it can pass user details between the web pages and the back end processes. There are two methods for doing this. This first is to use a time limited hashed string which contains no direct username or password details, the second method is to pass the username and passwords around in plaintext. This method is not recommend except where you do not have the md5 libraries available on your system or you have a completely isolated system with no external access. You can also switch off authentication relaying if your system is isolated in other ways.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], + type => { db_type=>"string", hint=>"hashed|plain|none", pattern=>qr|^([hpn])|i, format=>q( ($1 =~ /^h/) ? "hashed" : ($1 =~ /^p/ ? "plain" : "none" ) ) }, + category => "system", + }, + { + name => "ZM_AUTH_HASH_SECRET", + default => "...Change me to something unique...", + description => "Secret for encoding hashed authentication information", + help => "When ZoneMinder is running in hashed authenticated mode it is necessary to generate hashed strings containing encrypted sensitive information such as usernames and password. Although these string are reasonably secure the addition of a random secret increases security substantially.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], + type => $types{string}, + category => "system", + }, + { + name => "ZM_AUTH_HASH_IPS", + default => "yes", + description => "Include IP addresses in the authentication hash", + help => "When ZoneMinder is running in hashed authenticated mode it can optionally include the requesting IP address in the resultant hash. This adds an extra level of security as only requests from that address may use that authentication key. However in some circumstances, such as access over mobile networks, the requesting address can change for each request which will cause most requests to fail. This option allows you to control whether IP addresses are included in the authentication hash on your system. If you experience intermitent problems with authentication, switching this option off may help.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_AUTH_HASH_LOGINS", + default => "no", + description => "Allow login by authentication hash", + help => "The normal process for logging into ZoneMinder is via the login screen with username and password. In some circumstances it may be desirable to allow access directly to one or more pages, for instance from a third party application. If this option is enabled then adding an 'auth' parameter to any request will include a shortcut login bypassing the login screen, if not already logged in. As authentication hashes are time and, optionally, IP limited this can allow short-term access to ZoneMinder screens from other web pages etc. In order to use this the calling application will hae to generate the authentication hash itself and ensure it is valid. If you use this option you should ensure that you have modified the ZM_AUTH_HASH_SECRET to somethign unique to your system.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_DIR_EVENTS", + default => "events", + description => "Directory where events are stored", + help => "This is the path to the events directory where all the event images and other miscellaneous files are stored. It is normally given as a subdirectory of the web directory you have specified earlier however if disk space is tight it can reside on another partition in which case you should create a link from that area to the path you give here.", + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_USE_DEEP_STORAGE", + default => "yes", + description => "Use a deep filesystem hierarchy for events", + help => "Traditionally ZoneMinder stores all events for a monitor in one directory for that monitor. This is simple and efficient except when you have very large amounts of events. Some filesystems are unable to store more than 32k files in one directory and even without this limitation, large numbers of files in a directory can slow creation and deletion of files. This option allows you to select an alternate method of storing events by year/month/day/hour/min/second which has the effect of separating events out into more directories, resulting in less per directory, and also making it easier to manually navigate to any events that may have happened at a particular time or date.", + type => $types{boolean}, + category => "paths", + }, + { + name => "ZM_DIR_IMAGES", + default => "images", + description => "Directory where the images that the ZoneMinder client generates are stored", + help => "ZoneMinder generates a myriad of images, mosty of which are associated with events. For those that aren't this is where they go.", + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_DIR_SOUNDS", + default => "sounds", + description => "Directory to the sounds that the ZoneMinder client can use", + help => "ZoneMinder can optionally play a sound file when an alarm is detected. This indicates where (relative to the web root) to look for this file.", + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_PATH_ZMS", + default => "/cgi-bin/nph-zms", + description => "Web path to zms streaming server", + help => "The ZoneMinder streaming server is required to send streamed images to your browser. It will be installed into the cgi-bin path given at configuration time. This option determines what the web path to the server is rather than the local path on your machine. Ordinarily the streaming server runs in parser-header mode however if you experience problems with streaming you can change this to non-parsed-header (nph) mode by changing 'zms' to 'nph-zms'.", + type => $types{rel_path}, + category => "paths", + }, + { + name => "ZM_COLOUR_JPEG_FILES", + default => "yes", + description => "Colourise greyscale JPEG files", + help => "Cameras that capture in greyscale can write their captured images to jpeg files with a corresponding greyscale colour space. This saves a small amount of disk space over colour ones. However some tools such as ffmpeg either fail to work with this colour space or have to convert it beforehand. Setting this option to yes uses up a little more space but makes creation of MPEG files much faster.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_ADD_JPEG_COMMENTS", + default => "no", + description => "Add jpeg timestamp annotations as file header comments", + help => "JPEG files may have a number of extra fields added to the file header. The comment field may have any kind of text added. This options allows you to have the same text that is used to annotate the image additionally included as a file header comment. If you archive event images to other locations this may help you locate images for particular events or times if you use software that can read comment headers.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_JPEG_FILE_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the saved event files (1-100)", + help => "When ZoneMinder detects an event it will save the images associated with that event to files. These files are in the JPEG format and can be viewed or streamed later. This option specifies what image quality should be used to save these files. A higher number means better quality but less compression so will take up more disk space and take longer to view over a slow connection. By contrast a low number means smaller, quicker to view, files but at the price of lower quality images. This setting applies to all images written except if the capture image has caused an alarm and the alarm file quality option is set at a higher value when that is used instead.", + type => $types{integer}, + category => "images", + }, + { + name => "ZM_JPEG_ALARM_FILE_QUALITY", + default => "0", + description => "Set the JPEG quality setting for the saved event files during an alarm (1-100)", + help => "This value is equivalent to the regular jpeg file quality setting above except that it only applies to images saved while in an alarm state and then only if this value is set to a higher quality setting than the ordinary file setting. If set to a lower value then it is ignored. Thus leaving it at the default of 0 effectively means to use the regular file quality setting for all saved images. This is to prevent acccidentally saving important images at a worse quality setting.", + type => $types{integer}, + category => "images", + }, + # Deprecated, now stream quality + { + name => "ZM_JPEG_IMAGE_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", + help => "When viewing a 'live' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.", + type => $types{integer}, + category => "hidden", + }, + { + name => "ZM_JPEG_STREAM_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", + help => "When viewing a 'live' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.", + type => $types{integer}, + category => "images", + }, + { + name => "ZM_MPEG_TIMED_FRAMES", + default => "yes", + description => "Tag video frames with a timestamp for more realistic streaming", + help => "When using streamed MPEG based video, either for live monitor streams or events, ZoneMinder can send the streams in two ways. If this option is selected then the timestamp for each frame, taken from it's capture time, is included in the stream. This means that where the frame rate varies, for instance around an alarm, the stream will still maintain it's 'real' timing. If this option is not selected then an approximate frame rate is calculated and that is used to schedule frames instead. This option should be selected unless you encounter problems with your preferred streaming method.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_MPEG_LIVE_FORMAT", + default => "swf", + description => "What format 'live' video streams are played in", + help => "When using MPEG mode ZoneMinder can output live video. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of 'asf' works well under Windows with Windows Media Player but I'm currently not sure what, if anything, works on a Linux platform. If you find out please let me know! If this option is left blank then live streams will revert to being in motion jpeg format", + type => $types{string}, + category => "images", + }, + { + name => "ZM_MPEG_REPLAY_FORMAT", + default => "swf", + description => "What format 'replay' video streams are played in", + help => "When using MPEG mode ZoneMinder can replay events in encoded video format. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of 'asf' works well under Windows with Windows Media Player and 'mpg', or 'avi' etc should work under Linux. If you know any more then please let me know! If this option is left blank then live streams will revert to being in motion jpeg format", + type => $types{string}, + category => "images", + }, + { + name => "ZM_RAND_STREAM", + default => "yes", + description => "Add a random string to prevent caching of streams", + help => "Some browsers can cache the streams used by ZoneMinder. In order to prevent his a harmless random string can be appended to the url to make each invocation of the stream appear unique.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_OPT_CAMBOZOLA", + default => "no", + description => "Is the (optional) cambozola java streaming client installed", + help => "Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don't natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_PATH_CAMBOZOLA", + default => "cambozola.jar", + description => "Web path to (optional) cambozola java streaming client", + help => "Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don't natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed. Leave this as 'cambozola.jar' if cambozola is installed in the same directory as the ZoneMinder web client files.", + requires => [ { name=>"ZM_OPT_CAMBOZOLA", value=>"yes" } ], + type => $types{rel_path}, + category => "images", + }, + { + name => "ZM_RELOAD_CAMBOZOLA", + default => "0", + description => "After how many seconds should Cambozola be reloaded in live view", + help => "Cambozola allows for the viewing of streaming MJPEG however it caches the entire stream into cache space on the computer, setting this to a number > 0 will cause it to automatically reload after that many seconds to avoid filling up a hard drive.", + type => $types{integer}, + category => "images", + }, + { + name => "ZM_TIMESTAMP_ON_CAPTURE", + default => "yes", + description => "Timestamp images as soon as they are captured", + help => "ZoneMinder can add a timestamp to images in two ways. The default method, when this option is set, is that each image is timestamped immediately when captured and so the image held in memory is marked right away. The second method does not timestamp the images until they are either saved as part of an event or accessed over the web. The timestamp used in both methods will contain the same time as this is preserved along with the image. The first method ensures that an image is timestamped regardless of any other circumstances but will result in all images being timestamped even those never saved or viewed. The second method necessitates that saved images are copied before being saved otherwise two timestamps perhaps at different scales may be applied. This has the (perhaps) desirable side effect that the timestamp is always applied at the same resolution so an image that has scaling applied will still have a legible and correctly scaled timestamp.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_CPU_EXTENSIONS", + default => "yes", + description => "Use advanced CPU extensions to increase performance", + help => "When advanced processor extensions such as SSE2 or SSSE3 are available, ZoneMinder can use them, which should increase performance and reduce system load. Enabling this option on processors that do not support the advanced processors extensions used by ZoneMinder is harmless and will have no effect.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_FAST_IMAGE_BLENDS", + default => "yes", + description => "Use a fast algorithm to blend the reference image", + help => "To detect alarms ZoneMinder needs to blend the captured image with the stored reference image to update it for comparison with the next image. The reference blend percentage specified for the monitor controls how much the new image affects the reference image. There are two methods that are available for this. If this option is set then fast calculation which does not use any multiplication or division is used. This calculation is extremely fast, however it limits the possible blend percentages to 50%, 25%, 12.5%, 6.25%, 3.25% and 1.5%. Any other blend percentage will be rounded to the nearest possible one. The alternative is to switch this option off and use standard blending instead, which is slower.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_OPT_ADAPTIVE_SKIP", + default => "yes", + description => "Should frame analysis try and be efficient in skipping frames", + help => "In previous versions of ZoneMinder the analysis daemon would attempt to keep up with the capture daemon by processing the last captured frame on each pass. This would sometimes have the undesirable side-effect of missing a chunk of the initial activity that caused the alarm because the pre-alarm frames would all have to be written to disk and the database before processing the next frame, leading to some delay between the first and second event frames. Setting this option enables a newer adaptive algorithm where the analysis daemon attempts to process as many captured frames as possible, only skipping frames when in danger of the capture daemon overwriting yet to be processed frames. This skip is variable depending on the size of the ring buffer and the amount of space left in it. Enabling this option will give you much better coverage of the beginning of alarms whilst biasing out any skipped frames towards the middle or end of the event. However you should be aware that this will have the effect of making the analysis daemon run somewhat behind the capture daemon during events and for particularly fast rates of capture it is possible for the adaptive algorithm to be overwhelmed and not have time to react to a rapid build up of pending frames and thus for a buffer overrun condition to occur.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_BLEND_ALARMED_IMAGES", + default => "yes", + description => "Blend alarmed images to update the reference image", + help => "To detect alarms ZoneMinder compares an image with a reference image which is formed from a composite of the previous images. This option determines whether images that cause events are included in this process. Doing so may increase the precision of the alarmed region but can cause problems if wholescale lighting changes cause alarms as this would not get fed back into the image and an alarm may persist indefinately. A better way to achive the same effect in most cases is to lower substantially the reference blend percentage in specific monitors.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_MAX_SUSPEND_TIME", + default => "30", + description => "Maximum time that a monitor may have motion detection suspended", + help => "ZoneMinder allows monitors to have motion detection to be suspended, for instance while panning a camera. Ordinarily this relies on the operator resuming motion detection afterwards as failure to do so can leave a monitor in a permanently suspended state. This setting allows you to set a maximum time which a camera may be suspended for before it automatically resumes motion detection. This time can be extended by subsequent suspend indications after the first so continuous camera movement will also occur while the monitor is suspended.", + type => $types{integer}, + category => "config", + }, + # Deprecated, really no longer necessary + { + name => "ZM_OPT_REMOTE_CAMERAS", + default => "no", + description => "Are you going to use remote/networked cameras", + help => "ZoneMinder can work with both local cameras, ie. those attached physically to your computer and remote or network cameras. If you will be using networked cameras select this option.", + type => $types{boolean}, + category => "hidden", + }, + # Deprecated, now set on a per monitor basis using the Method field + { + name => "ZM_NETCAM_REGEXPS", + default => "yes", + description => "Use regular expression matching with network cameras", + help => "Traditionally ZoneMinder has used complex regular regular expressions to handle the multitude of formats that network cameras produce. In versions from 1.21.1 the default is to use a simpler and faster built in pattern matching methodology. This works well with most networks cameras but if you have problems you can try the older, but more flexible, regular expression based method by selecting this option. Note, to use this method you must have libpcre installed on your system.", + requires => [ { name => "ZM_OPT_REMOTE_CAMERAS", value => "yes" } ], + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_HTTP_VERSION", + default => "1.1", + description => "The version of HTTP that ZoneMinder will use to connect", + help => "ZoneMinder can communicate with network cameras using either of the HTTP/1.1 or HTTP/1.0 standard. A server will normally fall back to the version it supports iwht no problem so this should usually by left at the default. However it can be changed to HTTP/1.0 if necessary to resolve particular issues.", + type => { db_type=>"string", hint=>"1.1|1.0", pattern=>qr|^(1\.[01])$|, format=>q( $1?$1:"" ) }, + category => "network", + }, + { + name => "ZM_HTTP_UA", + default => "ZoneMinder", + description => "The user agent that ZoneMinder uses to identify itself", + help => "When ZoneMinder communicates with remote cameras it will identify itself using this string and it's version number. This is normally sufficient, however if a particular cameras expects only to communicate with certain browsers then this can be changed to a different string identifying ZoneMinder as Internet Explorer or Netscape etc.", + type => $types{string}, + category => "network", + }, + { + name => "ZM_HTTP_TIMEOUT", + default => "2500", + description => "How long ZoneMinder waits before giving up on images (milliseconds)", + help => "When retrieving remote images ZoneMinder will wait for this length of time before deciding that an image is not going to arrive and taking steps to retry. This timeout is in milliseconds (1000 per second) and will apply to each part of an image if it is not sent in one whole chunk.", + type => $types{integer}, + category => "network", + }, + { + name => "ZM_MIN_RTP_PORT", + default => "40200", + description => "Minimum port that ZoneMinder will listen for RTP traffic on", + help => "When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the minimum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting.", + type => $types{integer}, + category => "network", + }, + { + name => "ZM_MAX_RTP_PORT", + default => "40499", + description => "Maximum port that ZoneMinder will listen for RTP traffic on", + help => "When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the maximum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting. You should also ensure that you have opened up at least two ports for each monitor that will be connecting to unicasting network cameras.", + type => $types{integer}, + category => "network", + }, + { + name => "ZM_OPT_FFMPEG", + default => "yes", + description => "Is the ffmpeg video encoder/decoder installed", + help => "ZoneMinder can optionally encode a series of video images into an MPEG encoded movie file for viewing, downloading or storage. This option allows you to specify whether you have the ffmpeg tools installed. Note that creating MPEG files can be fairly CPU and disk intensive and is not a required option as events can still be reviewed as video streams without it.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_PATH_FFMPEG", + default => "/usr/bin/ffmpeg", + description => "Path to (optional) ffmpeg mpeg encoder", + help => "This path should point to where ffmpeg has been installed.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{abs_path}, + category => "images", + }, + { + name => "ZM_FFMPEG_INPUT_OPTIONS", + default => "", + description => "Additional input options to ffmpeg", + help => "Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the input to ffmpeg (options that are given before the -i option). Check the ffmpeg documentation for a full list of options which may be used here.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_FFMPEG_OUTPUT_OPTIONS", + default => "-r 25", + description => "Additional output options to ffmpeg", + help => "Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the output from ffmpeg (options that are given after the -i option). Check the ffmpeg documentation for a full list of options which may be used here. The most common one will often be to force an output frame rate supported by the video encoder.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_FFMPEG_FORMATS", + default => "mpg mpeg wmv asf avi* mov swf 3gp**", + description => "Formats to allow for ffmpeg video generation", + help => "Ffmpeg can generate video in many different formats. This option allows you to list the ones you want to be able to select. As new formats are supported by ffmpeg you can add them here and be able to use them immediately. Adding a '*' after a format indicates that this will be the default format used for web video, adding '**' defines the default format for phone video.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_LOG_LEVEL_SYSLOG", + default => "0", + description => "Save logging output to the system log", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to the system log. ZoneMinder binaries have always logged to the system log but now scripts and web logging is also included. To preserve the previous behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_FILE", + default => "-5", + description => "Save logging output to component files", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to individual log files written by specific components. This is how logging worked previously and although useful for tracking down issues in specific components it also resulted in many disparate log files. To preserve this behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance though file output has less impact than the other options. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_WEBLOG", + default => "-5", + description => "Save logging output to the weblog", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output from the web interface that goes to the httpd error log. Note that only web logging from PHP and JavaScript files is included and so this option is really only useful for investigating specific issues with those components. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_DATABASE", + default => "0", + description => "Save logging output to the database", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that is written to the database. This is a new option which can make viewing logging output easier and more intuitive and also makes it easier to get an overall impression of how the system is performing. If you have a large or very busy system then it is possible that use of this option may slow your system down if the table becomes very large. Ensure you use the LOG_DATABASE_LIMIT option to keep the table to a manageable size. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_DATABASE_LIMIT", + default => "7 day", + description => "Maximum number of log entries to retain", + help => "If you are using database logging then it is possible to quickly build up a large number of entries in the Logs table. This option allows you to specify how many of these entries are kept. If you set this option to a number greater than zero then that number is used to determine the maximum number of rows, less than or equal to zero indicates no limit and is not recommended. You can also set this value to time values such as ' day' which will limit the log entries to those newer than that time. You can specify 'hour', 'day', 'week', 'month' and 'year', note that the values should be singular (no 's' at the end). The Logs table is pruned periodically so it is possible for more than the expected number of rows to be present briefly in the meantime.", + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG", + default => "no", + description => "Switch debugging on", + help => "ZoneMinder components usually support debug logging available to help with diagnosing problems. Binary components have several levels of debug whereas more other components have only one. Normally this is disabled to minimise performance penalties and avoid filling logs too quickly. This option lets you switch on other options that allow you to configure additional debug information to be output. Components will pick up this instruction when they are restarted.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_TARGET", + default => "", + description => "What components should have extra debug enabled", + help => "There are three scopes of debug available. Leaving this option blank means that all components will use extra debug (not recommended). Setting this option to '_', e.g. _zmc, will limit extra debug to that component only. Setting this option to '__', e.g. '_zmc_m1' will limit extra debug to that instance of the component only. This is ordinarily what you probably want to do. To debug scripts use their names without the .pl extension, e.g. '_zmvideo' and to debug issues with the web interface use '_web'. You can specify multiple targets by separating them with '|' characters.", + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_LEVEL", + default => 1, + description => "What level of extra debug should be enabled", + help => "There are 9 levels of debug available, with higher numbers being more debug and level 0 being no debug. However not all levels are used by all components. Also if there is debug at a high level it is usually likely to be output at such a volume that it may obstruct normal operation. For this reason you should set the level carefully and cautiously until the degree of debug you wish to see is present. Scripts and the web interface only have one level so this is an on/off type option for them.", + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => { db_type=>"integer", hint=>"1|2|3|4|5|6|7|8|9", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_FILE", + default => "/tmp/zm/zm_debug.log+", + description => "Where extra debug is output to", + help => "This option allows you to specify a different target for debug output. All components have a default log file which will norally be in /tmp or /var/log and this is where debug will be written to if this value is empty. Adding a path here will temporarily redirect debug, and other logging output, to this file. This option is a simple filename and you are debugging several components then they will all try and write to the same file with undesirable consequences. Appending a '+' to the filename will cause the file to be created with a '.' suffix containing your process id. In this way debug from each run of a component is kept separate. This is the recommended setting as it will also prevent subsequent runs from overwriting the same log. You should ensure that permissions are set up to allow writing to the file and directory specified here.", + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_CHECK_PERIOD", + default => "900", + description => "Time period used when calculating overall system health", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to indicate what period of historical events are used in this calculation. This value is expressed in seconds and is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_WAR_COUNT", + default => "1", + description => "Number of warnings indicating system alert state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alert state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_ERR_COUNT", + default => "1", + description => "Number of errors indicating system alert state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alert state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_FAT_COUNT", + default => "0", + description => "Number of fatal error indicating system alert state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alert state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_WAR_COUNT", + default => "100", + description => "Number of warnings indicating system alarm state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alarm state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_ERR_COUNT", + default => "10", + description => "Number of errors indicating system alarm state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alarm state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_FAT_COUNT", + default => "1", + description => "Number of fatal error indicating system alarm state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alarm state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_RECORD_EVENT_STATS", + default => "yes", + description => "Record event statistical information, switch off if too slow", + help => "This version of ZoneMinder records detailed information about events in the Stats table. This can help in profiling what the optimum settings are for Zones though this is tricky at present. However in future releases this will be done more easily and intuitively, especially with a large sample of events. The default option of 'yes' allows this information to be collected now in readiness for this but if you are concerned about performance you can switch this off in which case no Stats information will be saved.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_RECORD_DIAG_IMAGES", + default => "no", + description => "Record intermediate alarm diagnostic images, can be very slow", + help => "In addition to recording event statistics you can also record the intermediate diagnostic images that display the results of the various checks and processing that occur when trying to determine if an alarm event has taken place. There are several of these images generated for each frame and zone for each alarm or alert frame so this can have a massive impact on performance. Only switch this setting on for debug or analysis purposes and remember to switch it off again once no longer required.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_DUMP_CORES", + default => "no", + description => "Create core files on unexpected process failure.", + help => "When an unrecoverable error occurs in a ZoneMinder binary process is has traditionally been trapped and the details written to logs to aid in remote analysis. However in some cases it is easier to diagnose the error if a core file, which is a memory dump of the process at the time of the error, is created. This can be interactively analysed in the debugger and may reveal more or better information than that available from the logs. This option is recommended for advanced users only otherwise leave at the default. Note using this option to trigger core files will mean that there will be no indication in the binary logs that a process has died, they will just stop, however the zmdc log will still contain an entry. Also note that you may have to explicitly enable core file creation on your system via the 'ulimit -c' command or other means otherwise no file will be created regardless of the value of this option.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_PATH_MAP", + default => "/dev/shm", + description => "Path to the mapped memory files that that ZoneMinder can use", + help => "ZoneMinder has historically used IPC shared memory for shared data between processes. This has it's advantages and limitations. This version of ZoneMinder can use an alternate method, mapped memory, instead with can be enabled with the --enable--mmap directive to configure. This requires less system configuration and is generally more flexible. However it requires each shared data segment to map onto a filesystem file. This option indicates where those mapped files go. You should ensure that this location has sufficient space for these files and for the best performance it should be a tmpfs file system or ramdisk otherwise disk access may render this method slower than the regular shared memory one.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_SOCKS", + default => "/tmp/zm", + description => "Path to the various Unix domain socket files that ZoneMinder uses", + help => "ZoneMinder generally uses Unix domain sockets where possible. This reduces the need for port assignments and prevents external applications from possibly compromising the daemons. However each Unix socket requires a .sock file to be created. This option indicates where those socket files go.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_LOGS", + default => "/var/log/zm", + description => "Path to the various logs that the ZoneMinder daemons generate", + help => "There are various daemons that are used by ZoneMinder to perform various tasks. Most generate helpful log files and this is where they go. They can be deleted if not required for debugging.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_SWAP", + default => "/tmp/zm", + description => "Path to location for temporary swap images used in streaming", + help => "Buffered playback requires temporary swap images to be stored for each instance of the streaming daemons. This option determines where these images will be stored. The images will actually be stored in sub directories beneath this location and will be automatically cleaned up after a period of time.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_WEB_TITLE_PREFIX", + default => "ZM", + description => "The title prefix displayed on each window", + help => "If you have more than one installation of ZoneMinder it can be helpful to display different titles for each one. Changing this option allows you to customise the window titles to include further information to aid identification.", + type => $types{string}, + category => "web", + }, + { + name => "ZM_WEB_RESIZE_CONSOLE", + default => "yes", + description => "Should the console window resize itself to fit", + help => "Traditionally the main ZoneMinder web console window has resized itself to shrink to a size small enough to list only the monitors that are actually present. This is intended to make the window more unobtrusize but may not be to everyones tastes, especially if opened in a tab in browsers which support this kind if layout. Switch this option off to have the console window size left to the users preference", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_POPUP_ON_ALARM", + default => "yes", + description => "Should the monitor window jump to the top if an alarm occurs", + help => "When viewing a live monitor stream you can specify whether you want the window to pop to the front if an alarm occurs when the window is minimised or behind another window. This is most useful if your monitors are over doors for example when they can pop up if someone comes to the doorway.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_OPT_X10", + default => "no", + description => "Support interfacing with X10 devices", + help => "If you have an X10 Home Automation setup in your home you can use ZoneMinder to initiate or react to X10 signals if your computer has the appropriate interface controller. This option indicates whether X10 options will be available in the browser client.", + type => $types{boolean}, + category => "x10", + }, + { + name => "ZM_X10_DEVICE", + default => "/dev/ttyS0", + description => "What device is your X10 controller connected on", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => "If you have an X10 controller device (e.g. XM10U) connected to your computer this option details which port it is conected on, the default of /dev/ttyS0 maps to serial or com port 1.", + type => $types{abs_path}, + category => "x10", + }, + { + name => "ZM_X10_HOUSE_CODE", + default => "A", + description => "What X10 house code should be used", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => "X10 devices are grouped together by identifying them as all belonging to one House Code. This option details what that is. It should be a single letter between A and P.", + type => { db_type=>"string", hint=>"A-P", pattern=>qr|^([A-P])|i, format=>q( uc($1) ) }, + category => "x10", + }, + { + name => "ZM_X10_DB_RELOAD_INTERVAL", + default => "60", + description => "How often (in seconds) the X10 daemon reloads the monitors from the database", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => "The zmx10 daemon periodically checks the database to find out what X10 events trigger, or result from, alarms. This option determines how frequently this check occurs, unless you change this area frequently this can be a fairly large value.", + type => $types{integer}, + category => "x10", + }, + { + name => "ZM_WEB_SOUND_ON_ALARM", + default => "no", + description => "Should the monitor window play a sound if an alarm occurs", + help => "When viewing a live monitor stream you can specify whether you want the window to play a sound to alert you if an alarm occurs.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_ALARM_SOUND", + default => "", + description => "The sound to play on alarm, put this in the sounds directory", + help => "You can specify a sound file to play if an alarm occurs whilst you are watching a live monitor stream. So long as your browser understands the format it does not need to be any particular type. This file should be placed in the sounds directory defined earlier.", + type => $types{file}, + requires => [ { name => "ZM_WEB_SOUND_ON_ALARM", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_COMPACT_MONTAGE", + default => "no", + description => "Compact the montage view by removing extra detail", + help => "The montage view shows the output of all of your active monitors in one window. This include a small menu and status information for each one. This can increase the web traffic and make the window larger than may be desired. Setting this option on removes all this extraneous information and just displays the images.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_OPT_FAST_DELETE", + default => "yes", + description => "Delete only event database records for speed", + help => "Normally an event created as the result of an alarm consists of entries in one or more database tables plus the various files associated with it. When deleting events in the browser it can take a long time to remove all of this if your are trying to do a lot of events at once. It is recommended that you set this option which means that the browser client only deletes the key entries in the events table, which means the events will no longer appear in the listing, and leaves the zmaudit daemon to clear up the rest later.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_STRICT_VIDEO_CONFIG", + default => "yes", + description => "Allow errors in setting video config to be fatal", + help => "With some video devices errors can be reported in setting the various video attributes when in fact the operation was successful. Switching this option off will still allow these errors to be reported but will not cause them to kill the video capture daemon. Note however that doing this will cause all errors to be ignored including those which are genuine and which may cause the video capture to not function correctly. Use this option with caution.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_SIGNAL_CHECK_POINTS", + default => "10", + description => "How many points in a captured image to check for signal loss", + help => "For locally attached video cameras ZoneMinder can check for signal loss by looking at a number of random points on each captured image. If all of these points are set to the same fixed colour then the camera is assumed to have lost signal. When this happens any open events are closed and a short one frame signal loss event is generated, as is another when the signal returns. This option defines how many points on each image to check. Note that this is a maximum, any points found to not have the check colour will abort any further checks so in most cases on a couple of points will actually be checked. Network and file based cameras are never checked.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_V4L_MULTI_BUFFER", + default => "yes", + description => "Use more than one buffer for Video 4 Linux devices", + help => "Performance when using Video 4 Linux devices is usually best if multiple buffers are used allowing the next image to be captured while the previous one is being processed. If you have multiple devices on a card sharing one input that requires switching then this approach can sometimes cause frames from one source to be mixed up with frames from another. Switching this option off prevents multi buffering resulting in slower but more stable image capture. This option is ignored for non-local cameras or if only one input is present on a capture chip. This option addresses a similar problem to the ZM_CAPTURES_PER_FRAME option and you should normally change the value of only one of the options at a time.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_CAPTURES_PER_FRAME", + default => "1", + description => "How many images are captured per returned frame, for shared local cameras", + help => "If you are using cameras attached to a video capture card which forces multiple inputs to share one capture chip, it can sometimes produce images with interlaced frames reversed resulting in poor image quality and a distinctive comb edge appearance. Increasing this setting allows you to force additional image captures before one is selected as the captured frame. This allows the capture hardware to 'settle down' and produce better quality images at the price of lesser capture rates. This option has no effect on (a) network cameras, or (b) where multiple inputs do not share a capture chip. This option addresses a similar problem to the ZM_V4L_MULTI_BUFFER option and you should normally change the value of only one of the options at a time.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_FILTER_RELOAD_DELAY", + default => "300", + description => "How often (in seconds) filters are reloaded in zmfilter", + help => "ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are reloaded from the database to get the latest versions or new filters. If you don't change filters very often this value can be set to a large value.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_FILTER_EXECUTE_INTERVAL", + default => "60", + description => "How often (in seconds) to run automatic saved filters", + help => "ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are executed on the saved event in the database. If you want a rapid response to new events this should be a smaller value, however this may increase the overall load on the system and affect performance of other elements.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_OPT_UPLOAD", + default => "no", + description => "Should ZoneMinder support uploading events from filters", + help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should be uploaded to a remote server for archiving. This option specifies whether this functionality should be available", + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_FORMAT", + default => "tar", + description => "What format the uploaded events should be created in.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => "Uploaded events may be stored in either .tar or .zip format, this option specifies which. Note that to use this you will need to have the Archive::Tar and/or Archive::Zip perl modules installed.", + type => { db_type=>"string", hint=>"tar|zip", pattern=>qr|^([tz])|i, format=>q( $1 =~ /^t/ ? "tar" : "zip" ) }, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_COMPRESS", + default => "no", + description => "Should archive files be compressed", + help => "When the archive files are created they can be compressed. However in general since the images are compressed already this saves only a minimal amount of space versus utilising more CPU in their creation. Only enable if you have CPU to waste and are limited in disk space on your remote server or bandwidth.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_ANALYSE", + default => "no", + description => "Include the analysis files in the archive", + help => "When the archive files are created they can contain either just the captured frames or both the captured frames and, for frames that caused an alarm, the analysed image with the changed area highlighted. This option controls files are included. Only include analysed frames if you have a high bandwidth connection to the remote server or if you need help in figuring out what caused an alarm in the first place as archives with these files in can be considerably larger.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_PROTOCOL", + default => "ftp", + description => "What protocol to use to upload events", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => "ZoneMinder can upload events to a remote server using either FTP or SFTP. Regular FTP is widely supported but not necessarily very secure whereas SFTP (Secure FTP) runs over an ssh connection and so is encrypted and uses regular ssh ports. Note that to use this you will need to have the appropriate perl module, either Net::FTP or Net::SFTP installed depending on your choice.", + type => { db_type=>"string", hint=>"ftp|sftp", pattern=>qr|^([tz])|i, format=>q( $1 =~ /^f/ ? "ftp" : "sftp" ) }, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_HOST", + default => "", + description => "The remote server to upload to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the name, or ip address, of the server to use.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{hostname}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_HOST", + default => "", + description => "The remote server to upload events to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the name, or ip address, of the server to use.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{hostname}, + category => "upload", + }, + { + name => "ZM_UPLOAD_PORT", + default => "", + description => "The port on the remote upload server, if not the default (SFTP only)", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. If you are using the SFTP protocol then this option allows you to specify a particular port to use for connection. If this option is left blank then the default, port 22, is used. This option is ignored for FTP uploads.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_USER", + default => "", + description => "Your ftp username", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the username that ZoneMinder should use to log in for ftp transfer.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{alphanum}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_USER", + default => "", + description => "Remote server username", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the username that ZoneMinder should use to log in for transfer.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{alphanum}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_PASS", + default => "", + description => "Your ftp password", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the password that ZoneMinder should use to log in for ftp transfer.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{string}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_PASS", + default => "", + description => "Remote server password", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the password that ZoneMinder should use to log in for transfer. If you are using certicate based logins for SFTP servers you can leave this option blank.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{string}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_LOC_DIR", + default => "/tmp/zm", + description => "The local directory in which to create upload files", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{abs_path}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_LOC_DIR", + default => "/tmp/zm", + description => "The local directory in which to create upload files", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{abs_path}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_REM_DIR", + default => "", + description => "The remote directory to upload to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the remote directory that ZoneMinder should use to upload event files to.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{rel_path}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_REM_DIR", + default => "", + description => "The remote directory to upload to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the remote directory that ZoneMinder should use to upload event files to.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{rel_path}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_TIMEOUT", + default => "120", + description => "How long to allow the transfer to take for each file", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the maximum ftp inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_TIMEOUT", + default => "120", + description => "How long to allow the transfer to take for each file", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the maximum inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_PASSIVE", + default => "yes", + description => "Use passive ftp when uploading", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates that ftp transfers should be done in passive mode. This uses a single connection for all ftp activity and, whilst slower than active transfers, is more robust and likely to work from behind filewalls. This option is ignored for SFTP transfers.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => "If your computer is behind a firewall or proxy you may need to set FTP to passive mode. In fact for simple transfers it makes little sense to do otherwise anyway but you can set this to 'No' if you wish.", + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_DEBUG", + default => "no", + description => "Switch ftp debugging on", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. If you are having (or expecting) troubles with uploading events then setting this to 'yes' permits additional information to be included in the zmfilter log file.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_DEBUG", + default => "no", + description => "Switch upload debugging on", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. If you are having (or expecting) troubles with uploading events then setting this to 'yes' permits additional information to be generated by the underlying transfer modules and included in the logs.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_OPT_EMAIL", + default => "no", + description => "Should ZoneMinder email you details of events that match corresponding filters", + help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details emailed to you at a designated email address. This will allow you to be notified of events as soon as they occur and also to quickly view the events directly. This option specifies whether this functionality should be available. The email created with this option can be any size and is intended to be sent to a regular email reader rather than a mobile device.", + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_EMAIL_ADDRESS", + default => "", + description => "The email address to send matching event details to", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the email address that any events that match the appropriate filters will be sent to.", + type => $types{email}, + category => "mail", + }, + { + name => "ZM_EMAIL_TEXT", + default => 'subject = "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)" +body = " +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder"', + description => "The text of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the content of the email that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "hidden", + }, + { + name => "ZM_EMAIL_SUBJECT", + default => "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)", + description => "The subject of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the subject of the email that is sent for any events that match the appropriate filters.", + type => $types{string}, + category => "mail", + }, + { + name => "ZM_EMAIL_BODY", + default => " +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder", + description => "The body of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the content of the email that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "mail", + }, + { + name => "ZM_OPT_MESSAGE", + default => "no", + description => "Should ZoneMinder message you with details of events that match corresponding filters", + help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details sent to you at a designated short message email address. This will allow you to be notified of events as soon as they occur. This option specifies whether this functionality should be available. The email created by this option will be brief and is intended to be sent to an SMS gateway or a minimal mail reader such as a mobile device or phone rather than a regular email reader.", + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_MESSAGE_ADDRESS", + default => "", + description => "The email address to send matching event details to", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the short message email address that any events that match the appropriate filters will be sent to.", + type => $types{email}, + category => "mail", + }, + { + name => "ZM_MESSAGE_TEXT", + default => 'subject = "ZoneMinder: Alarm - %MN%-%EI%" +body = "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score."', + description => "The text of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the content of the message that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "hidden", + }, + { + name => "ZM_MESSAGE_SUBJECT", + default => "ZoneMinder: Alarm - %MN%-%EI%", + description => "The subject of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the subject of the message that is sent for any events that match the appropriate filters.", + type => $types{string}, + category => "mail", + }, + { + name => "ZM_MESSAGE_BODY", + default => "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.", + description => "The body of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the content of the message that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "mail", + }, + { + name => "ZM_NEW_MAIL_MODULES", + default => "no", + description => "Use a newer perl method to send emails", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "Traditionally ZoneMinder has used the MIME::Entity perl module to construct and send notification emails and messages. Some people have reported problems with this module not being present at all or flexible enough for their needs. If you are one of those people this option allows you to select a new mailing method using MIME::Lite and Net::SMTP instead. This method was contributed by Ross Melin and should work for everyone but has not been extensively tested so currently is not selected by default.", + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_EMAIL_HOST", + default => "localhost", + description => "The host address of your SMTP mail server", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "If you have chosen SMTP as the method by which to send notification emails or messages then this option allows you to choose which SMTP server to use to send them. The default of localhost may work if you have the sendmail, exim or a similar daemon running however you may wish to enter your ISP's SMTP mail server here.", + type => $types{hostname}, + category => "mail", + }, + { + name => "ZM_FROM_EMAIL", + default => "", + description => "The email address you wish your event notifications to originate from", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "The emails or messages that will be sent to you informing you of events can appear to come from a designated email address to help you with mail filtering etc. An address of something like ZoneMinder\@your.domain is recommended.", + type => $types{email}, + category => "mail", + }, + { + name => "ZM_URL", + default => "", + description => "The URL of your ZoneMinder installation", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "The emails or messages that will be sent to you informing you of events can include a link to the events themselves for easy viewing. If you intend to use this feature then set this option to the url of your installation as it would appear from where you read your email, e.g. http://host.your.domain/zm.php.", + type => $types{url}, + category => "mail", + }, + { + name => "ZM_MAX_RESTART_DELAY", + default => "600", + description => "Maximum delay (in seconds) for daemon restart attempts.", + help => "The zmdc (zm daemon control) process controls when processeses are started or stopped and will attempt to restart any that fail. If a daemon fails frequently then a delay is introduced between each restart attempt. If the daemon stills fails then this delay is increased to prevent extra load being placed on the system by continual restarts. This option controls what this maximum delay is.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_WATCH_CHECK_INTERVAL", + default => "10", + description => "How often to check the capture daemons have not locked up", + help => "The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines how often the daemons are checked.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_WATCH_MAX_DELAY", + default => "5", + description => "The maximum delay allowed since the last captured image", + help => "The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines the maximum delay to allow since the last captured frame. The daemon will be restarted if it has not captured any images after this period though the actual restart may take slightly longer in conjunction with the check interval value above.", + type => $types{decimal}, + category => "system", + }, + { + + name => "ZM_RUN_AUDIT", + default => "yes", + description => "Run zmaudit to check data consistency", + help => "The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using 'fast deletes' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. This option controls whether zmaudit is run in the background and performs these checks and fixes continuously. This is recommended for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to not have zmaudit running unconditionally and schedule occasional checks at other, more convenient, times.", + type => $types{boolean}, + category => "system", + }, + { + + name => "ZM_AUDIT_CHECK_INTERVAL", + default => "900", + description => "How often to check database and filesystem consistency", + help => "The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using 'fast deletes' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. The default check interval of 900 seconds (15 minutes) is fine for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to make this interval much larger to reduce the impact on your system. This option determines how often these checks are performed.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_FORCED_ALARM_SCORE", + default => "255", + description => "Score to give forced alarms", + help => "The 'zmu' utility can be used to force an alarm on a monitor rather than rely on the motion detection algorithms. This option determines what score to give these alarms to distinguish them from regular ones. It must be 255 or less.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_BULK_FRAME_INTERVAL", + default => "100", + description => "How often a bulk frame should be written to the database", + help => "Traditionally ZoneMinder writes an entry into the Frames database table for each frame that is captured and saved. This works well in motion detection scenarios but when in a DVR situation ('Record' or 'Mocord' mode) this results in a huge number of frame writes and a lot of database and disk bandwidth for very little additional information. Setting this to a non-zero value will enabled ZoneMinder to group these non-alarm frames into one 'bulk' frame entry which saves a lot of bandwidth and space. The only disadvantage of this is that timing information for individual frames is lost but in constant frame rate situations this is usually not significant. This setting is ignored in Modect mode and individual frames are still written if an alarm occurs in Mocord mode also.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_EVENT_CLOSE_MODE", + default => "idle", + description => "When continuous events are closed.", + help => "When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section. This option controls what happens when an alarm occurs in Mocord mode. The 'time' setting means that the event will be closed at the end of the section regardless of alarm activity. The 'idle' setting means that the event will be closed at the end of the section if there is no alarm activity occuring at the time otherwise it will be closed once the alarm is over meaning the event may end up being longer than the normal section length. The 'alarm' setting means that if an alarm occurs during the event, the event will be closed once the alarm is over regardless of when this occurs. This has the effect of limiting the number of alarms to one per event and the events will be shorter than the section length if an alarm has occurred.", + type => $types{boolean}, + type => { db_type=>"string", hint=>"time|idle|alarm", pattern=>qr|^([tia])|i, format=>q( ($1 =~ /^t/) ? "time" : ($1 =~ /^i/ ? "idle" : "time" ) ) }, + category => "config", + }, + # Deprecated, superseded by event close mode + { + name => "ZM_FORCE_CLOSE_EVENTS", + default => "no", + description => "Close events at section ends.", + help => "When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section and ordinarily this will prevent the event being closed until the motion has ceased. Switching this option on will force the event closed at the specified time regardless of any motion activity.", + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_CREATE_ANALYSIS_IMAGES", + default => "yes", + description => "Create analysed alarm images with motion outlined", + help => "By default during an alarm ZoneMinder records both the raw captured image and one that has been analysed and had areas where motion was detected outlined. This can be very useful during zone configuration or in analysing why events occured. However it also incurs some overhead and in a stable system may no longer be necessary. This parameter allows you to switch the generation of these images off.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_WEIGHTED_ALARM_CENTRES", + default => "no", + description => "Use a weighted algorithm to calculate the centre of an alarm", + help => "ZoneMinder will always calculate the centre point of an alarm in a zone to give some indication of where on the screen it is. This can be used by the experimental motion tracking feature or your own custom extensions. In the alarmed or filtered pixels mode this is a simple midpoint between the extents of the detected pxiesl. However in the blob method this can instead be calculated using weighted pixel locations to give more accurate positioning for irregularly shaped blobs. This method, while more precise is also slower and so is turned off by default.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_EVENT_IMAGE_DIGITS", + default => "3", + description => "How many significant digits are used in event image numbering", + help => "As event images are captured they are stored to the filesystem with a numerical index. By default this index has three digits so the numbers start 001, 002 etc. This works works for most scenarios as events with more than 999 frames are rarely captured. However if you have extremely long events and use external applications then you may wish to increase this to ensure correct sorting of images in listings etc. Warning, increasing this value on a live system may render existing events unviewable as the event will have been saved with the previous scheme. Decreasing this value should have no ill effects.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_DEFAULT_ASPECT_RATIO", + default => "4:3", + description => "The default width:height aspect ratio used in monitors", + help => "When specifying the dimensions of monitors you can click a checkbox to ensure that the width stays in the correct ratio to the height, or vice versa. This setting allows you to indicate what the ratio of these settings should be. This should be specified in the format : and the default of 4:3 normally be acceptable but 11:9 is another common setting. If the checkbox is not clicked when specifying monitor dimensions this setting has no effect.", + type => $types{string}, + category => "config", + }, + { + name => "ZM_USER_SELF_EDIT", + default => "no", + description => "Allow unprivileged users to change their details", + help => "Ordinarily only users with system edit privilege are able to change users details. Switching this option on allows ordinary users to change their passwords and their language settings", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_OPT_FRAME_SERVER", + default => "no", + description => "Should analysis farm out the writing of images to disk", + #requires => [ { name => "ZM_OPT_ADAPTIVE_SKIP", value => "yes" } ], + help => "In some circumstances it is possible for a slow disk to take so long writing images to disk that it causes the analysis daemon to fall behind especially during high frame rate events. Setting this option to yes enables a frame server daemon (zmf) which will be sent the images from the analysis daemon and will do the actual writing of images itself freeing up the analysis daemon to get on with other things. Should this transmission fail or other permanent or transient error occur, this function will fall back to the analysis daemon.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_FRAME_SOCKET_SIZE", + default => "0", + description => "Specify the frame server socket buffer size if non-standard", + requires => [ { name => "ZM_OPT_FRAME_SERVER", value => "yes" } ], + help => "For large captured images it is possible for the writes from the analysis daemon to the frame server to fail as the amount to be written exceeds the default buffer size. While the images are then written by the analysis daemon so no data is lost, it defeats the object of the frame server daemon in the first place. You can use this option to indicate that a larger buffer size should be used. Note that you may have to change the existing maximum socket buffer size on your system via sysctl (or in /proc/sys/net/core/wmem_max) to allow this new size to be set. Alternatively you can change the default buffer size on your system in the same way in which case that will be used with no change necessary in this option", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_OPT_CONTROL", + default => "no", + description => "Support controllable (e.g. PTZ) cameras", + help => "ZoneMinder includes limited support for controllable cameras. A number of sample protocols are included and others can easily be added. If you wish to control your cameras via ZoneMinder then select this option otherwise if you only have static cameras or use other control methods then leave this option off.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_OPT_TRIGGERS", + default => "no", + description => "Interface external event triggers via socket or device files", + help => "ZoneMinder can interact with external systems which prompt or cancel alarms. This is done via the zmtrigger.pl script. This option indicates whether you want to use these external triggers. Most people will say no here.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_CHECK_FOR_UPDATES", + default => "yes", + description => "Check with zoneminder.com for updated versions", + help => "From ZoneMinder version 1.17.0 onwards new versions are expected to be more frequent. To save checking manually for each new version ZoneMinder can check with the zoneminder.com website to determine the most recent release. These checks are infrequent, about once per week, and no personal or system information is transmitted other than your current version number. If you do not wish these checks to take place or your ZoneMinder system has no internet access you can switch these check off with this configuration variable", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_UPDATE_CHECK_PROXY", + default => "", + description => "Proxy url if required to access zoneminder.com", + help => "If you use a proxy to access the internet then ZoneMinder needs to know so it can access zoneminder.com to check for updates. If you do use a proxy enter the full proxy url here in the form of http://:/", + type => $types{string}, + category => "system", + }, + { + name => "ZM_SHM_KEY", + default => "0x7a6d0000", + description => "Shared memory root key to use", + help => "ZoneMinder uses shared memory to speed up communication between modules. To identify the right area to use shared memory keys are used. This option controls what the base key is, each monitor will have it's Id or'ed with this to get the actual key used. You will not normally need to change this value unless it clashes with another instance of ZoneMinder on the same machine. Only the first four hex digits are used, the lower four will be masked out and ignored.", + type => $types{hexadecimal}, + category => "system", + }, + # Deprecated, really no longer necessary + { + name => "ZM_WEB_REFRESH_METHOD", + default => "javascript", + description => "What method windows should use to refresh themselves", + help => "Many windows in Javascript need to refresh themselves to keep their information current. This option determines what method they should use to do this. Choosing 'javascript' means that each window will have a short JavaScript statement in with a timer to prompt the refresh. This is the most compatible method. Choosing 'http' means the refresh instruction is put in the HTTP header. This is a cleaner method but refreshes are interrupted or cancelled when a link in the window is clicked meaning that the window will no longer refresh and this would have to be done manually.", + type => { db_type=>"string", hint=>"javascript|http", pattern=>qr|^([jh])|i, format=>q( $1 =~ /^j/ ? "javascript" : "http" ) }, + category => "hidden", + }, + { + name => "ZM_WEB_EVENT_SORT_FIELD", + default => "DateTime", + description => "Default field the event lists are sorted by", + help => "Events in lists can be initially ordered in any way you want. This option controls what field is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the 'Prev' and 'Next' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.", + type => { db_type=>"string", hint=>"Id|Name|Cause|MonitorName|DateTime|Length|Frames|AlarmFrames|TotScore|AvgScore|MaxScore", pattern=>qr|.|, format=>q( $1 ) }, + category => "web", + }, + { + name => "ZM_WEB_EVENT_SORT_ORDER", + default => "asc", + description => "Default order the event lists are sorted by", + help => "Events in lists can be initially ordered in any way you want. This option controls what order (ascending or descending) is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the 'Prev' and 'Next' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.", + type => { db_type=>"string", hint=>"asc|desc", pattern=>qr|^([ad])|i, format=>q( $1 =~ /^a/i ? "asc" : "desc" ) }, + category => "web", + }, + { + name => "ZM_WEB_EVENTS_PER_PAGE", + default => "25", + description => "How many events to list per page in paged mode", + help => "In the event list view you can either list all events or just a page at a time. This option controls how many events are listed per page in paged mode and how often to repeat the column headers in non-paged mode.", + type => $types{integer}, + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMBS", + default => "no", + description => "Display mini-thumbnails of event images in event lists", + help => "Ordinarily the event lists just display text details of the events to save space and time. By switching this option on you can also display small thumbnails to help you identify events of interest. The size of these thumbnails is controlled by the following two options.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMB_WIDTH", + default => "48", + description => "The width of the thumbnails that appear in the event lists", + help => "This options controls the width of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a height instead in the next option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.", + type => $types{integer}, + requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMB_HEIGHT", + default => "0", + description => "The height of the thumbnails that appear in the event lists", + help => "This options controls the height of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a width instead in the previous option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.", + type => $types{integer}, + requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_USE_OBJECT_TAGS", + default => "yes", + description => "Wrap embed in object tags for media content", + help => "There are two methods of including media content in web pages. The most common way is use the EMBED tag which is able to give some indication of the type of content. However this is not a standard part of HTML. The official method is to use OBJECT tags which are able to give more information allowing the correct media viewers etc to be loaded. However these are less widely supported and content may be specifically tailored to a particular platform or player. This option controls whether media content is enclosed in EMBED tags only or whether, where appropriate, it is additionally wrapped in OBJECT tags. Currently OBJECT tags are only used in a limited number of circumstances but they may become more widespread in the future. It is suggested that you leave this option on unless you encounter problems playing some content.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_H_REFRESH_MAIN", + default => "300", + introduction => "There are now a number of options that are grouped into bandwidth categories, this allows you to configure the ZoneMinder client to work optimally over the various access methods you might to access the client.\n\nThe next few options control what happens when the client is running in 'high' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a local network or high speed link. In most cases the default values will be suitable as a starting point.", + description => "How often (in seconds) the main console window should refresh itself", + help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_CYCLE", + default => "10", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_IMAGE", + default => "5", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_STATUS", + default => "3", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_EVENTS", + default => "30", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "highband", + }, + { + name => "ZM_WEB_H_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_VIDEO_BITRATE", + default => "150000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_VIDEO_MAXFPS", + default => "15", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_SCALE_THUMBS", + default => "no", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "highband", + }, + { + name => "ZM_WEB_H_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", + type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_SHOW_PROGRESS", + default => "yes", + description => "Show the progress of replay in event view.", + help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", + type => $types{boolean}, + category => "highband", + }, + { + name => "ZM_WEB_H_AJAX_TIMEOUT", + default => "3000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_M_REFRESH_MAIN", + default => "300", + description => "How often (in seconds) the main console window should refresh itself", + help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", + type => $types{integer}, + introduction => "The next few options control what happens when the client is running in 'medium' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a slower cable or DSL link. In most cases the default values will be suitable as a starting point.", + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_CYCLE", + default => "20", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_IMAGE", + default => "10", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_STATUS", + default => "5", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_EVENTS", + default => "60", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "medband", + }, + { + name => "ZM_WEB_M_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_VIDEO_BITRATE", + default => "75000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_VIDEO_MAXFPS", + default => "10", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "medband", + }, + { + name => "ZM_WEB_M_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", + type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_SHOW_PROGRESS", + default => "yes", + description => "Show the progress of replay in event view.", + help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", + type => $types{boolean}, + category => "medband", + }, + { + name => "ZM_WEB_M_AJAX_TIMEOUT", + default => "5000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_L_REFRESH_MAIN", + default => "300", + description => "How often (in seconds) the main console window should refresh itself", + introduction => "The next few options control what happens when the client is running in 'low' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a modem or slow link. In most cases the default values will be suitable as a starting point.", + help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_CYCLE", + default => "30", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_IMAGE", + default => "15", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_STATUS", + default => "10", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_EVENTS", + default => "180", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "lowband", + }, + { + name => "ZM_WEB_L_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_VIDEO_BITRATE", + default => "25000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_VIDEO_MAXFPS", + default => "5", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "lowband", + }, + { + name => "ZM_WEB_L_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", + type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_SHOW_PROGRESS", + default => "no", + description => "Show the progress of replay in event view.", + help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", + type => $types{boolean}, + category => "lowband", + }, + { + name => "ZM_WEB_L_AJAX_TIMEOUT", + default => "10000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_P_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_VIDEO_BITRATE", + default => "8000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_VIDEO_MAXFPS", + default => "5", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_AJAX_TIMEOUT", + default => "10000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_DYN_LAST_VERSION", + default => "", + description => "What the last version of ZoneMinder recorded from zoneminder.com is", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_CURR_VERSION", + default => "1.25.0", + description => "What the effective current version of ZoneMinder is, might be different from actual if versions ignored", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_DB_VERSION", + default => "1.25.0", + description => "What the version of the database is, from zmupdate", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_LAST_CHECK", + default => "", + description => "When the last check for version from zoneminder.com was", + help => "", + type => $types{integer}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_NEXT_REMINDER", + default => "", + description => "When the earliest time to remind about versions will be", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_DONATE_REMINDER_TIME", + default => 0, + description => "When the earliest time to remind about donations will be", + help => "", + type => $types{integer}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_SHOW_DONATE_REMINDER", + default => "yes", + description => "Remind about donations or not", + help => "", + type => $types{boolean}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_EYEZM_DEBUG", + default => "no", + description => "Switch additional debugging on for eyeZm Plugin", + help => "Enable or Disable extra debugging from the eyeZm Plugin. Extra debugging information will be displayed in it's own file (EYEZM_LOG_TO_FILE is set), or your Apache error log", + type => $types{boolean}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_LOG_TO_FILE", + default => "yes", + description => "When eyeZm Debugging is enabled, enabling this logs output to it's own file", + help => "When EYEZM_DEBUG is on and EYEZM_LOG_TO_FILE is on, output generated from the eyeZm Plugin will go to it's own file. Otherwise it will go to the apache error log.", + type => $types{boolean}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_LOG_FILE", + default => "/var/log/zm/zm_xml.log", + description => "Default filename to use when logging eyeZm Output and EYEZM_LOG_TO_FILE is enabled", + help => "This file will contain it's own output from the eyeZm Plugin when EYEZM_LOG_TO_FILE and EYEZM_DEBUG are both enabled", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_EVENT_VCODEC", + default => "mpeg4", + description => "Default video-codec to use for encoding events", + help => "The eyeZm Plugin calls FFMPEG externally to encode the captured images. If your FFMPEG is not built with support for H264, change this to MPEG-4. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+).", + type => { db_type=>"string", hint=>"mpeg4|h264", pattern=>qr|^([mh])|i, format=>q( $1 =~ /^m/ ? "mpeg4" : "h264" ) }, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_FEED_VCODEC", + default => "mjpeg", + description => "Default video-codec to use for streaming the live feed", + help => "Determines whether the live stream is generated using native MJPEG streaming with ZoneMinder, or H264 using FFMPEG and HTML-5 streaming. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+). This is just a default parameter, and can be overridden with eyeZm.", + type => { db_type=>"string", hint=>"mjpeg|h264", pattern=>qr|^([mh])|i, format=>q( $1 =~ /^m/ ? "mjpeg" : "h264" ) }, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_DEFAULT_BR", + default => "96k", + description => "Default bit-rate to use with FFMPEG for H264 streaming", + help => "When using the eyeZm Plugin to stream H264 data, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_DEFAULT_EVBR", + default => "128k", + description => "Default bit-rate to use with FFMPEG for H264 event viewing", + help => "When using the eyeZm Plugin to view events in H264, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_TIMEOUT", + default => "20", + description => "Timeout (sec) to wait for H264 stream to start before terminating", + help => "The eyeZm Plugin will attempt to spawn an H264 stream when requested, and require that it complete within the timeout specified. If you have a slow system or find through the logs that the H264 stream is not starting because the timeout is expiring, even though FFMPEG is running, try increasing this value. If you have a fast system, decreasing this value can improve the responsiveness when there are issues starting H264 streams", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_SEG_DURATION", + default => "3", + description => "Segment duration used for streaming using HTTP-5 Streaming protocol", + help => "The HTTP-5 Live Streaming Protocol segments the input video stream into small chunks of a duration specified by this parameter. Increasing the segment duration will help with choppy connections on the other end, but will increase the latency in starting a stream.", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_PATH_PLUGINS", + default => "/usr/share/zm", + description => "Path to the plugin folder", + help => "3d-party plugins have to be placed here.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PLUGIN_EXTENSION", + default => ".zmpl", + description => "Default extension of plugins to found.", + help => "Default extension of plugins to found.", + type => $types{rel_path}, + category => "paths", + }, + { + name => "ZM_PLUGINS_CONFIG_PATH", + default => "/usr/share/zm/plugins.conf", + description => "Path to the config file for plugins.", + help => "Path to the config file for plugins.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_LOAD_PLUGINS", + default => "no", + description => "Load and use 3d-party plugins", + help => "3d-party plugins will be loaded and used for analysing.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_TURNOFF_NATIVE_ANALYSIS", + default => "no", + description => "Turn native ZM\'s image analysis possibility off", + help => "Image analysis with ZM\'s motion detected function will be turned off. Only detection functions from loaded plugins will be used. Note, that if no plugins have be loaded, no detection will be done.", + type => $types{boolean}, + category => "config", + }, + +); + +our %options_hash = map { ( $_->{name}, $_ ) } @options; + +# This function should never need to be called explicitly, except if +# this module is 'require'd rather than 'use'd. See zmconfgen.pl. +sub initialiseConfig +{ + return if ( $configInitialised ); + + # Do some initial data munging to finish the data structures + # Create option ids + my $option_id = 0; + foreach my $option ( @options ) + { + if ( defined($option->{default}) ) + { + $option->{value} = $option->{default} + } + else + { + $option->{value} = ''; + } + #next if ( $option->{category} eq 'hidden' ); + $option->{id} = $option_id++; + } + $configInitialised = 1; +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::ConfigData - ZoneMinder Configuration Data module + +=head1 SYNOPSIS + + use ZoneMinder::ConfigData; + use ZoneMinder::ConfigData qw(:all); + + loadConfigFromDB(); + saveConfigToDB(); + +=head1 DESCRIPTION + +The ZoneMinder:ConfigData module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. + +The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. + +=head1 METHODS + +=over 4 + +=item loadConfigFromDB (); + +Loads existing configuration from the database (if any) and merges it with the definitions held in this module. This results in the merging of any new configuration and the removal of any deprecated configuration while preserving the existing values of every else. + +=item saveConfigToDB (); + +Saves configuration held in memory to the database. The act of loading and saving configuration is a convenient way to ensure that the configuration held in the database corresponds with the most recent definitions and that all components are using the same set of configuration. + +=head2 EXPORT + +None by default. +The :data tag will export the various configuration data structures +The :functions tag will export the helper functions. +The :all tag will export all above symbols. + + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Control.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control.pm new file mode 100644 index 000000000..2a646772d --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control.pm @@ -0,0 +1,205 @@ +# ========================================================================== +# +# ZoneMinder Base Control Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the base class definitions for the camera control +# protocol implementations +# +package ZoneMinder::Control; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Base connection class +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); +use ZoneMinder::Database qw(:all); + +our $AUTOLOAD; + +sub new +{ + my $class = shift; + my $id = shift; + my $self = {}; + $self->{name} = "PelcoD"; + if ( !defined($id) ) + { + Fatal( "No monitor defined when invoking protocol ".$self->{name} ); + } + $self->{id} = $id; + bless( $self, $class ); + return $self; +} + +sub DESTROY +{ +} + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( exists($self->{$name}) ) + { + return( $self->{$name} ); + } + croak( "Can't access $name member of object of class $class" ); +} + +sub getKey() +{ + my $self = shift; + return( $self->{id} ); +} + +sub open +{ + my $self = shift; + Fatal( "No open method defined for protocol ".$self->{name} ); +} + +sub close +{ + my $self = shift; + Fatal( "No close method defined for protocol ".$self->{name} ); +} + +sub loadMonitor +{ + my $self = shift; + if ( !$self->{Monitor} ) + { + if ( !($self->{Monitor} = zmDbGetMonitor( $self->{id} )) ) + { + Fatal( "Monitor id ".$self->{id}." not found or not controllable" ); + } + if ( defined($self->{Monitor}->{AutoStopTimeout}) ) + { + # Convert to microseconds. + $self->{Monitor}->{AutoStopTimeout} = int(1000000*$self->{Monitor}->{AutoStopTimeout}); + } + } +} + +sub getParam +{ + my $self = shift; + my $params = shift; + my $name = shift; + my $default = shift; + + if ( defined($params->{$name}) ) + { + return( $params->{$name} ); + } + elsif ( defined($default) ) + { + return( $default ); + } + Fatal( "Missing mandatory parameter '$name'" ); +} + +sub executeCommand +{ + my $self = shift; + my $params = shift; + + $self->loadMonitor(); + + my $command = $params->{command}; + delete $params->{command}; + + #if ( !defined($self->{$command}) ) + #{ + #Fatal( "Unsupported command '$command'" ); + #} + &{$self->{$command}}( $self, $params ); +} + +sub printMsg() +{ + my $self = shift; + Fatal( "No printMsg method defined for protocol ".$self->{name} ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/AxisV2.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/AxisV2.pm new file mode 100644 index 000000000..e5a5882b9 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/AxisV2.pm @@ -0,0 +1,475 @@ +# ========================================================================== +# +# ZoneMinder Axis version 2 API Control Protocol Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the implementation of the Axis V2 API camera control +# protocol +# +package ZoneMinder::Control::AxisV2; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Axis V2 Control Protocol +# +# ========================================================================== + +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 ); + bless( $self, $class ); + srand( time() ); + return $self; +} + +our $AUTOLOAD; + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || 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/".ZM_VERSION ); + + $self->{state} = '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; + + printMsg( $cmd, "Tx" ); + + #print( "http://$address/$cmd\n" ); + my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd" ); + my $res = $self->{ua}->request($req); + + if ( $res->is_success ) + { + $result = !undef; + } + else + { + Error( "Error check failed: '".$res->status_line()."'" ); + } + + return( $result ); +} + +sub cameraReset +{ + my $self = shift; + Debug( "Camera Reset" ); + my $cmd = "/axis-cgi/admin/restart.cgi"; + $self->sendCmd( $cmd ); +} + +sub moveConUp +{ + my $self = shift; + Debug( "Move Up" ); + my $cmd = "/axis-cgi/com/ptz.cgi?move=up"; + $self->sendCmd( $cmd ); +} + +sub moveConDown +{ + my $self = shift; + Debug( "Move Down" ); + my $cmd = "/axis-cgi/com/ptz.cgi?move=down"; + $self->sendCmd( $cmd ); +} + +sub moveConLeft +{ + my $self = shift; + Debug( "Move Left" ); + my $cmd = "/axis-cgi/com/ptz.cgi?move=left"; + $self->sendCmd( $cmd ); +} + +sub moveConRight +{ + my $self = shift; + Debug( "Move Right" ); + my $cmd = "/axis-cgi/com/ptz.cgi?move=right"; + $self->sendCmd( $cmd ); +} + +sub moveConUpRight +{ + my $self = shift; + Debug( "Move Up/Right" ); + my $cmd = "/axis-cgi/com/ptz.cgi?move=upright"; + $self->sendCmd( $cmd ); +} + +sub moveConUpLeft +{ + my $self = shift; + Debug( "Move Up/Left" ); + my $cmd = "/axis-cgi/com/ptz.cgi?move=upleft"; + $self->sendCmd( $cmd ); +} + +sub moveConDownRight +{ + my $self = shift; + Debug( "Move Down/Right" ); + my $cmd = "/axis-cgi/com/ptz.cgi?move=downright"; + $self->sendCmd( $cmd ); +} + +sub moveConDownLeft +{ + my $self = shift; + Debug( "Move Down/Left" ); + my $cmd = "/axis-cgi/com/ptz.cgi?move=downleft"; + $self->sendCmd( $cmd ); +} + +sub moveMap +{ + my $self = shift; + my $params = shift; + my $xcoord = $self->getParam( $params, 'xcoord' ); + my $ycoord = $self->getParam( $params, 'ycoord' ); + Debug( "Move Map to $xcoord,$ycoord" ); + my $cmd = "/axis-cgi/com/ptz.cgi?center=$xcoord,$ycoord&imagewidth=".$self->{Monitor}->{Width}."&imageheight=".$self->{Monitor}->{Height}; + $self->sendCmd( $cmd ); +} + +sub moveRelUp +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'tiltstep' ); + Debug( "Step Up $step" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rtilt=$step"; + $self->sendCmd( $cmd ); +} + +sub moveRelDown +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'tiltstep' ); + Debug( "Step Down $step" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rtilt=-$step"; + $self->sendCmd( $cmd ); +} + +sub moveRelLeft +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'panstep' ); + Debug( "Step Left $step" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rpan=-$step"; + $self->sendCmd( $cmd ); +} + +sub moveRelRight +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'panstep' ); + Debug( "Step Right $step" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rpan=$step"; + $self->sendCmd( $cmd ); +} + +sub moveRelUpRight +{ + my $self = shift; + my $params = shift; + my $panstep = $self->getParam( $params, 'panstep' ); + my $tiltstep = $self->getParam( $params, 'tiltstep' ); + Debug( "Step Up/Right $tiltstep/$panstep" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rpan=$panstep&rtilt=$tiltstep"; + $self->sendCmd( $cmd ); +} + +sub moveRelUpLeft +{ + my $self = shift; + my $params = shift; + my $panstep = $self->getParam( $params, 'panstep' ); + my $tiltstep = $self->getParam( $params, 'tiltstep' ); + Debug( "Step Up/Left $tiltstep/$panstep" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rpan=-$panstep&rtilt=$tiltstep"; + $self->sendCmd( $cmd ); +} + +sub moveRelDownRight +{ + my $self = shift; + my $params = shift; + my $panstep = $self->getParam( $params, 'panstep' ); + my $tiltstep = $self->getParam( $params, 'tiltstep' ); + Debug( "Step Down/Right $tiltstep/$panstep" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rpan=$panstep&rtilt=-$tiltstep"; + $self->sendCmd( $cmd ); +} + +sub moveRelDownLeft +{ + my $self = shift; + my $params = shift; + my $panstep = $self->getParam( $params, 'panstep' ); + my $tiltstep = $self->getParam( $params, 'tiltstep' ); + Debug( "Step Down/Left $tiltstep/$panstep" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rpan=-$panstep&rtilt=-$tiltstep"; + $self->sendCmd( $cmd ); +} + +sub zoomRelTele +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Zoom Tele" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rzoom=$step"; + $self->sendCmd( $cmd ); +} + +sub zoomRelWide +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Zoom Wide" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rzoom=-$step"; + $self->sendCmd( $cmd ); +} + +sub focusRelNear +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Focus Near" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rfocus=-$step"; + $self->sendCmd( $cmd ); +} + +sub focusRelFar +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Focus Far" ); + my $cmd = "/axis-cgi/com/ptz.cgi?rfocus=$step"; + $self->sendCmd( $cmd ); +} + +sub focusAuto +{ + my $self = shift; + Debug( "Focus Auto" ); + my $cmd = "/axis-cgi/com/ptz.cgi?autofocus=on"; + $self->sendCmd( $cmd ); +} + +sub focusMan +{ + my $self = shift; + Debug( "Focus Manual" ); + my $cmd = "/axis-cgi/com/ptz.cgi?autofocus=off"; + $self->sendCmd( $cmd ); +} + +sub irisRelOpen +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Iris Open" ); + my $cmd = "/axis-cgi/com/ptz.cgi?riris=$step"; + $self->sendCmd( $cmd ); +} + +sub irisRelClose +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Iris Close" ); + my $cmd = "/axis-cgi/com/ptz.cgi?riris=-$step"; + $self->sendCmd( $cmd ); +} + +sub irisAuto +{ + my $self = shift; + Debug( "Iris Auto" ); + my $cmd = "/axis-cgi/com/ptz.cgi?autoiris=on"; + $self->sendCmd( $cmd ); +} + +sub irisMan +{ + my $self = shift; + Debug( "Iris Manual" ); + my $cmd = "/axis-cgi/com/ptz.cgi?autoiris=off"; + $self->sendCmd( $cmd ); +} + +sub presetClear +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + Debug( "Clear Preset $preset" ); + my $cmd = "/axis-cgi/com/ptz.cgi?removeserverpresetno=$preset"; + $self->sendCmd( $cmd ); +} + +sub presetSet +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + Debug( "Set Preset $preset" ); + my $cmd = "/axis-cgi/com/ptz.cgi?setserverpresetno=$preset"; + $self->sendCmd( $cmd ); +} + +sub presetGoto +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + Debug( "Goto Preset $preset" ); + my $cmd = "/axis-cgi/com/ptz.cgi?gotoserverpresetno=$preset"; + $self->sendCmd( $cmd ); +} + +sub presetHome +{ + my $self = shift; + Debug( "Home Preset" ); + my $cmd = "/axis-cgi/com/ptz.cgi?move=home"; + $self->sendCmd( $cmd ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/Ncs370.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/Ncs370.pm new file mode 100644 index 000000000..358aecb2b --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/Ncs370.pm @@ -0,0 +1,241 @@ +# ========================================================================== +# +# ZoneMinder Neu-Fusion Control Protocol Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the implementation of the Neu-Fusion NCS370 IP camera +# control protocol +# +package ZoneMinder::Control::Ncs370; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Ncs370 IP Control Protocol +# +# ========================================================================== + +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 ); + bless( $self, $class ); + srand( time() ); + return $self; +} + +our $AUTOLOAD; + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || 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/".ZM_VERSION ); + + $self->{state} = '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; + + printMsg( $cmd, "Tx" ); + + my $req = HTTP::Request->new( POST=>"http://".$self->{Monitor}->{ControlAddress}."/PANTILTCONTROL.CGI" ); + my $res = $self->{ua}->request($req); + + if ( $res->is_success ) + { + $result = !undef; + } + else + { + Error( "Error check failed: '".$res->status_line()."'" ); + } + + return( $result ); +} + +sub moveConUp +{ + my $self = shift; + Debug( "Move Up" ); + my $cmd = "PanSingleMoveDegree=1\nTiltSingleMoveDegree=1\nPanTiltSingleMove=1"; + $self->sendCmd( $cmd ); +} + +sub moveConDown +{ + my $self = shift; + Debug( "Move Down" ); + my $cmd = "PanSingleMoveDegree=1\nTiltSingleMoveDegree=1\nPanTiltSingleMove=7"; + $self->sendCmd( $cmd ); +} + +sub moveConLeft +{ + my $self = shift; + Debug( "Move Left" ); + my $cmd = "PanSingleMoveDegree=1\nTiltSingleMoveDegree=1\nPanTiltSingleMove=3"; + $self->sendCmd( $cmd ); +} + +sub moveConRight +{ + my $self = shift; + Debug( "Move Right" ); + my $cmd = "PanSingleMoveDegree=1\nTiltSingleMoveDegree=1\nPanTiltSingleMove=5"; + $self->sendCmd( $cmd ); +} + +sub moveConUpRight +{ + moveConUp(); + moveConRight(); +} + +sub moveConUpLeft +{ + moveConUp(); + moveConLeft(); +} + +sub moveConDownRight +{ + moveConDown(); + moveConRight(); +} + +sub moveConDownLeft +{ + moveConDown(); + moveConLeft(); +} + +sub presetHome +{ + my $self = shift; + Debug( "Home Preset" ); + my $cmd = "PanSingleMoveDegree=1\nTiltSingleMoveDegree=1\nPanTiltSingleMove=4"; + $self->sendCmd( $cmd ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/PanasonicIP.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/PanasonicIP.pm new file mode 100644 index 000000000..643765e9f --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/PanasonicIP.pm @@ -0,0 +1,322 @@ +# ========================================================================== +# +# ZoneMinder Panasonic IP Control Protocol Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the implementation of the Panasonic IP camera control +# protocol +# +package ZoneMinder::Control::PanasonicIP; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Panasonic IP Control Protocol +# +# ========================================================================== + +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 ); + bless( $self, $class ); + srand( time() ); + return $self; +} + +our $AUTOLOAD; + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || 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/".ZM_VERSION ); + + $self->{state} = '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; + + printMsg( $cmd, "Tx" ); + + my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd" ); + my $res = $self->{ua}->request($req); + + if ( $res->is_success ) + { + $result = !undef; + } + else + { + Error( "Error check failed: '".$res->status_line()."'" ); + } + + return( $result ); +} + +sub cameraReset +{ + my $self = shift; + Debug( "Camera Reset" ); + my $cmd = "nphRestart?PAGE=Restart&Restart=OK"; + $self->sendCmd( $cmd ); +} + +sub moveConUp +{ + my $self = shift; + Debug( "Move Up" ); + my $cmd = "nphControlCamera?Direction=TiltUp"; + $self->sendCmd( $cmd ); +} + +sub moveConDown +{ + my $self = shift; + Debug( "Move Down" ); + my $cmd = "nphControlCamera?Direction=TiltDown"; + $self->sendCmd( $cmd ); +} + +sub moveConLeft +{ + my $self = shift; + Debug( "Move Left" ); + my $cmd = "nphControlCamera?Direction=PanLeft"; + $self->sendCmd( $cmd ); +} + +sub moveConRight +{ + my $self = shift; + Debug( "Move Right" ); + my $cmd = "nphControlCamera?Direction=PanRight"; + $self->sendCmd( $cmd ); +} + +sub moveMap +{ + my $self = shift; + my $params = shift; + my $xcoord = $self->getParam( $params, 'xcoord' ); + my $ycoord = $self->getParam( $params, 'ycoord' ); + Debug( "Move Map to $xcoord,$ycoord" ); + my $cmd = "nphControlCamera?Direction=Direct&NewPosition.x=$xcoord&NewPosition.y=$ycoord&Width=".$self->{Monitor}->{Width}."&Height=".$self->{Monitor}->{Height}; + $self->sendCmd( $cmd ); +} + +sub zoomConTele +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Zoom Tele" ); + my $cmd = "nphControlCamera?Direction=ZoomTele"; + $self->sendCmd( $cmd ); +} + +sub zoomConWide +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Zoom Wide" ); + my $cmd = "nphControlCamera?Direction=ZoomWide"; + $self->sendCmd( $cmd ); +} + +sub focusConNear +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Focus Near" ); + my $cmd = "nphControlCamera?Direction=FocusNear"; + $self->sendCmd( $cmd ); +} + +sub focusConFar +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'step' ); + Debug( "Focus Far" ); + my $cmd = "nphControlCamera?Direction=FocusFar"; + $self->sendCmd( $cmd ); +} + +sub focusAuto +{ + my $self = shift; + Debug( "Focus Auto" ); + my $cmd = "nphControlCamera?Direction=FocusAuto"; + $self->sendCmd( $cmd ); +} + +sub focusMan +{ + my $self = shift; + Debug( "Focus Manual" ); + my $cmd = "/axis-cgi/com/ptz.cgi?autofocus=off"; + $self->sendCmd( $cmd ); +} + +sub presetClear +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + Debug( "Clear Preset $preset" ); + my $cmd = "nphPresetNameCheck?Data=$preset"; + $self->sendCmd( $cmd ); +} + +sub presetSet +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + Debug( "Set Preset $preset" ); + my $cmd = "nphPresetNameCheck?PresetName=$preset&Data=$preset"; + $self->sendCmd( $cmd ); +} + +sub presetGoto +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + Debug( "Goto Preset $preset" ); + my $cmd = "nphControlCamera?Direction=Preset&PresetOperation=Move&Data=$preset"; + $self->sendCmd( $cmd ); +} + +sub presetHome +{ + my $self = shift; + Debug( "Home Preset" ); + my $cmd = "nphControlCamera?Direction=HomePosition"; + $self->sendCmd( $cmd ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/PelcoD.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/PelcoD.pm new file mode 100644 index 000000000..6c507bd1a --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/PelcoD.pm @@ -0,0 +1,735 @@ +# ========================================================================== +# +# ZoneMinder Pelco-D Control Protocol Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the implementation of the Pelco-D camera control +# protocol +# +package ZoneMinder::Control::PelcoD; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Pelco-D Control Protocol +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); + +use Time::HiRes qw( usleep ); + +use constant SYNC => 0xff; +use constant COMMAND_GAP => 100000; # In ms + +sub new +{ + my $class = shift; + my $id = shift; + my $self = ZoneMinder::Control->new( $id ); + bless( $self, $class ); + srand( time() ); + return $self; +} + +our $AUTOLOAD; + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || 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 Device::SerialPort; + $self->{port} = new Device::SerialPort( $self->{Monitor}->{ControlDevice} ); + $self->{port}->baudrate(2400); + $self->{port}->databits(8); + $self->{port}->parity('none'); + $self->{port}->stopbits(1); + $self->{port}->handshake('none'); + + $self->{port}->read_const_time(50); + $self->{port}->read_char_time(10); + + $self->{state} = 'open'; +} + +sub close +{ + my $self = shift; + $self->{state} = 'closed'; + $self->{port}->close(); +} + +sub printMsg +{ + if ( logDebugging() ) + { + my $self = shift; + my $msg = shift; + my $prefix = shift || ""; + $prefix = $prefix.": " if ( $prefix ); + + my $line_length = 16; + my $msg_len = int(@$msg); + + my $msg_str = $prefix; + for ( my $i = 0; $i < $msg_len; $i++ ) + { + if ( ($i > 0) && ($i%$line_length == 0) && ($i != ($msg_len-1)) ) + { + $msg_str .= sprintf( "\n%*s", length($prefix), "" ); + } + $msg_str .= sprintf( "%02x ", $msg->[$i] ); + } + $msg_str .= "[".$msg_len."]"; + Debug( $msg_str ); + } +} + +sub sendCmd +{ + my $self = shift; + my $cmd = shift; + my $ack = shift || 0; + + my $result = undef; + + my $checksum = 0x00; + for ( my $i = 1; $i < int(@$cmd); $i++ ) + { + $checksum += $cmd->[$i]; + $checksum &= 0xff; + } + push( @$cmd, $checksum ); + + $self->printMsg( $cmd, "Tx" ); + my $id = $cmd->[0] & 0xf; + + my $tx_msg = pack( "C*", @$cmd ); + + #print( "Tx: ".length( $tx_msg )." bytes\n" ); + my $n_bytes = $self->{port}->write( $tx_msg ); + if ( !$n_bytes ) + { + Error( "Write failed: $!" ); + } + if ( $n_bytes != length($tx_msg) ) + { + Error( "Incomplete write, only ".$n_bytes." of ".length($tx_msg)." written: $!" ); + } + + if ( $ack ) + { + Debug( "Waiting for ack" ); + my $max_wait = 3; + my $now = time(); + while( 1 ) + { + my ( $count, $rx_msg ) = $self->{port}->read(4); + + if ( $count ) + { + #print( "Rx1: ".$count." bytes\n" ); + my @resp = unpack( "C*", $rx_msg ); + printMsg( \@resp, "Rx" ); + + if ( $resp[0] = 0x80 + ($id<<4) ) + { + if ( ($resp[1] & 0xf0) == 0x40 ) + { + my $socket = $resp[1] & 0x0f; + Debug( "Got ack for socket $socket" ); + $result = !undef; + } + else + { + Error( "Got bogus response" ); + } + last; + } + else + { + Error( "Got message for camera ".(($resp[0]-0x80)>>4) ); + } + } + if ( (time() - $now) > $max_wait ) + { + Warning( "Response timeout" ); + last; + } + } + } +} + +sub remoteReset +{ + my $self = shift; + Debug( "Remote Reset" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x0f, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub resetDefaults +{ + my $self = shift; + Debug( "Reset Defaults" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x29, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub cameraOff +{ + my $self = shift; + Debug( "Camera Off" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x08, 0x00, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub cameraOn +{ + my $self = shift; + Debug( "Camera On" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x88, 0x00, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub autoScan +{ + my $self = shift; + Debug( "Auto Scan" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x90, 0x00, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub manScan +{ + my $self = shift; + Debug( "Manual Scan" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x10, 0x00, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub stop +{ + my $self = shift; + Debug( "Stop" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x00, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub moveConUp +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'tiltspeed' ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Up" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x08, 0x00, $speed ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop( $params ); + } +} + +sub moveConDown +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'tiltspeed' ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Down" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x10, 0x00, $speed ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop(); + } +} + +sub moveConLeft +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'panspeed' ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Left" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x04, $speed, 0x00 ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop(); + } +} + +sub moveConRight +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'panspeed' ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Right" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x02, $speed, 0x00 ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop(); + } +} + +sub moveConUpLeft +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 0x3f ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x3f ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Up/Left" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x0c, $panspeed, $tiltspeed ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop(); + } +} + +sub moveConUpRight +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 0x3f ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x3f ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Up/Right" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x0a, $panspeed, $tiltspeed ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop(); + } +} + +sub moveConDownLeft +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 0x3f ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x3f ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Down/Left" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x14, $panspeed, $tiltspeed ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop(); + } +} + +sub moveConDownRight +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 0x3f ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x3f ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Down/Right" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x12, $panspeed, $tiltspeed ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop(); + } +} + +sub moveStop +{ + my $self = shift; + Debug( "Move Stop" ); + $self->stop(); +} + +sub flip180 +{ + my $self = shift; + Debug( "Flip 180" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x07, 0x00, 0x21 ); + $self->sendCmd( \@msg ); +} + +sub zeroPan +{ + my $self = shift; + Debug( "Zero Pan" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x07, 0x00, 0x22 ); + $self->sendCmd( \@msg ); +} + +sub _setZoomSpeed +{ + my $self = shift; + my $speed = shift; + Debug( "Set Zoom Speed $speed" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x25, 0x00, $speed ); + $self->sendCmd( \@msg ); +} + +sub zoomStop +{ + my $self = shift; + Debug( "Zoom Stop" ); + $self->stop(); + $self->_setZoomSpeed( 0 ); +} + +sub zoomConTele +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed', 0x01 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Zoom Tele" ); + $self->_setZoomSpeed( $speed ); + usleep( COMMAND_GAP ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x20, 0x00, 0x00 ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->zoomStop(); + } +} + +sub zoomConWide +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed', 0x01 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Zoom Wide" ); + $self->_setZoomSpeed( $speed ); + usleep( COMMAND_GAP ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x40, 0x00, 0x00 ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->zoomStop(); + } +} + +sub _setFocusSpeed +{ + my $self = shift; + my $speed = shift; + Debug( "Set Focus Speed $speed" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x27, 0x00, $speed ); + $self->sendCmd( \@msg ); +} + +sub focusConNear +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed', 0x03 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Focus Near" ); + $self->_setFocusSpeed( $speed ); + usleep( COMMAND_GAP ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x01, 0x00, 0x00, 0x00 ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->_setFocusSpeed( 0 ); + } +} + +sub focusConFar +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed', 0x03 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Focus Far" ); + $self->_setFocusSpeed( $speed ); + usleep( COMMAND_GAP ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x80, 0x00, 0x00 ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->_setFocusSpeed( 0 ); + } +} + +sub focusStop +{ + my $self = shift; + Debug( "Focus Stop" ); + $self->stop(); + $self->_setFocusSpeed( 0 ); +} + +sub focusAuto +{ + my $self = shift; + Debug( "Focus Auto" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x2b, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub focusMan +{ + my $self = shift; + Debug( "Focus Man" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x2b, 0x00, 0x02 ); + $self->sendCmd( \@msg ); +} + +sub _setIrisSpeed +{ + my $self = shift; + my $speed = shift; + Debug( "Set Iris Speed $speed" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x27, 0x00, $speed ); + $self->sendCmd( \@msg ); +} + +sub irisConClose +{ + my $self = shift; + my $params = shift; + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Iris Close" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x04, 0x00, 0x00, 0x00 ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->_setIrisSpeed( 0 ); + } +} + +sub irisConOpen +{ + my $self = shift; + my $params = shift; + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Iris Open" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x02, 0x80, 0x00, 0x00 ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->_setIrisSpeed( 0 ); + } +} + +sub irisStop +{ + my $self = shift; + Debug( "Iris Stop" ); + $self->stop(); + $self->_setIrisSpeed( 0 ); +} + +sub irisAuto +{ + my $self = shift; + Debug( "Iris Auto" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x2d, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub irisMan +{ + my $self = shift; + Debug( "Iris Man" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x2d, 0x00, 0x02 ); + $self->sendCmd( \@msg ); +} + +sub writeScreen +{ + my $self = shift; + my $params = shift; + my $string = $self->getParam( $params, 'string' ); + Debug( "Writing '$string' to screen" ); + + my @chars = unpack( "C*", $string ); + for ( my $i = 0; $i < length($string); $i++ ) + { + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x15, $i, $chars[$i] ); + $self->sendCmd( \@msg ); + usleep( COMMAND_GAP ); + } +} + +sub clearScreen +{ + my $self = shift; + Debug( "Clear Screen" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x17, 0x00, 0x00 ); + $self->sendCmd( \@msg ); +} + +sub clearPreset +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset', 1 ); + Debug( "Clear Preset $preset" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x05, 0x00, $preset ); + $self->sendCmd( \@msg ); +} + +sub presetSet +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset', 1 ); + Debug( "Set Preset $preset" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x03, 0x00, $preset ); + $self->sendCmd( \@msg ); +} + +sub presetGoto +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset', 1 ); + Debug( "Goto Preset $preset" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x07, 0x00, $preset ); + $self->sendCmd( \@msg ); +} + +sub presetHome +{ + my $self = shift; + Debug( "Home Preset" ); + my @msg = ( SYNC, $self->{Monitor}->{ControlAddress}, 0x00, 0x07, 0x00, 0x22 ); + $self->sendCmd( \@msg ); +} + +sub reset +{ + my $self = shift; + Debug( "Reset" ); + $self->remoteReset(); + $self->resetDefaults(); +} + +sub wake +{ + my $self = shift; + Debug( "Wake" ); + $self->cameraOn(); +} + +sub sleep +{ + my $self = shift; + Debug( "Sleep" ); + $self->cameraOff(); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/Visca.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/Visca.pm new file mode 100644 index 000000000..37f30dc09 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/Visca.pm @@ -0,0 +1,668 @@ +# ========================================================================== +# +# ZoneMinder Visca Control Protocol Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the implementation of the Visca camera control +# protocol +# +package ZoneMinder::Control::Visca; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Visca Control Protocol +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); + +use Time::HiRes qw( usleep ); + +use constant SYNC => 0xff; +use constant COMMAND_GAP => 100000; # In ms + +sub new +{ + my $class = shift; + my $id = shift; + my $self = ZoneMinder::Control->new( $id ); + bless( $self, $class ); + srand( time() ); + return $self; +} + +our $AUTOLOAD; + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || 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 Device::SerialPort; + $self->{port} = new Device::SerialPort( $self->{Monitor}->{ControlDevice} ); + $self->{port}->baudrate(9600); + $self->{port}->databits(8); + $self->{port}->parity('none'); + $self->{port}->stopbits(1); + $self->{port}->handshake('rts'); + $self->{port}->stty_echo(0); + + #$self->{port}->read_const_time(250); + $self->{port}->read_char_time(2); + + $self->{state} = 'open'; +} + +sub close +{ + my $self = shift; + $self->{state} = 'closed'; + $self->{port}->close(); +} + +sub printMsg +{ + if ( logDebugging() ) + { + my $self = shift; + my $msg = shift; + my $prefix = shift || ""; + $prefix = $prefix.": " if ( $prefix ); + + my $line_length = 16; + my $msg_len = int(@$msg); + + my $msg_str = $prefix; + for ( my $i = 0; $i < $msg_len; $i++ ) + { + if ( ($i > 0) && ($i%$line_length == 0) && ($i != ($msg_len-1)) ) + { + $msg_str .= sprintf( "\n%*s", length($prefix), "" ); + } + $msg_str .= sprintf( "%02x ", $msg->[$i] ); + } + $msg_str .= "[".$msg_len."]"; + Debug( $msg_str ); + } +} + +sub sendCmd +{ + my $self = shift; + my $cmd = shift; + my $ack = shift || 0; + my $cmp = shift || 0; + + my $result = undef; + + $self->printMsg( $cmd, "Tx" ); + my $id = $cmd->[0] & 0xf; + + my $tx_msg = pack( "C*", @$cmd ); + + #print( "Tx: ".length( $tx_msg )." bytes\n" ); + my $n_bytes = $self->{port}->write( $tx_msg ); + if ( !$n_bytes ) + { + Error( "Write failed: $!" ); + } + if ( $n_bytes != length($tx_msg) ) + { + Error( "Incomplete write, only ".$n_bytes." of ".length($tx_msg)." written: $!" ); + } + + if ( $ack ) + { + Debug( "Waiting for ack" ); + my $max_wait = 3; + my $now = time(); + while( 1 ) + { + my ( $count, $rx_msg ) = $self->{port}->read(4); + + if ( $count ) + { + #print( "Rx1: ".$count." bytes\n" ); + my @resp = unpack( "C*", $rx_msg ); + $self->printMsg( \@resp, "Rx" ); + + if ( $resp[0] = 0x80 + ($id<<4) ) + { + if ( ($resp[1] & 0xf0) == 0x40 ) + { + my $socket = $resp[1] & 0x0f; + Debug( "Got ack for socket $socket" ); + $result = !undef; + } + else + { + Error( "Got bogus response" ); + } + last; + } + else + { + Error( "Got message for camera ".(($resp[0]-0x80)>>4) ); + } + } + if ( (time() - $now) > $max_wait ) + { + last; + } + } + } + + if ( $cmp ) + { + Debug( "Waiting for command complete" ); + my $max_wait = 10; + my $now = time(); + while( 1 ) + { + #print( "Waiting\n" ); + my ( $count, $rx_msg ) = $self->{port}->read(16); + + if ( $count ) + { + #print( "Rx1: ".$count." bytes\n" ); + my @resp = unpack( "C*", $rx_msg ); + $self->printMsg( \@resp, "Rx" ); + + if ( $resp[0] = 0x80 + ($id<<4) ) + { + if ( ($resp[1] & 0xf0) == 0x50 ) + { + Debug( "Got command complete" ); + $result = !undef; + } + else + { + Error( "Got bogus response" ); + } + last; + } + else + { + Error( "Got message for camera ".(($resp[0]-0x80)>>4) ); + } + } + if ( (time() - $now) > $max_wait ) + { + last; + } + } + } + return( $result ); +} + +sub cameraOff +{ + my $self = shift; + Debug( "Camera Off\n" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x00, 0x0, SYNC ); + $self->sendCmd( \@msg ); +} + +sub cameraOn +{ + my $self = shift; + Debug( "Camera On\n" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x00, 0x2, SYNC ); + $self->sendCmd( \@msg ); +} + +sub stop +{ + my $self = shift; + Debug( "Stop\n" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x01, 0x00, 0x00, 0x03, 0x03, SYNC ); + $self->sendCmd( \@msg ); +} + +sub moveConUp +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'tiltspeed', 0x40 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Up" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x01, 0x00, $speed, 0x03, 0x01, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop( $params ); + } +} + +sub moveConDown +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'tiltspeed', 0x40 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Down" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x01, 0x00, $speed, 0x03, 0x02, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop( $params ); + } +} + +sub movConLeft +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'panspeed', 0x40 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Left" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x01, $speed, 0x00, 0x01, 0x03, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop( $params ); + } +} + +sub moveConRight +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'panspeed', 0x40 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Right" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x01, $speed, 0x00, 0x02, 0x03, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop( $params ); + } +} + +sub moveUpLeft +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 0x40 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x40 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Up/Left" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x01, $panspeed, $tiltspeed, 0x01, 0x01, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop( $params ); + } +} + +sub moveUpRight +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 0x40 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x40 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Up/Right" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x01, $panspeed, $tiltspeed, 0x02, 0x01, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop( $params ); + } +} + +sub moveDownLeft +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 0x40 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x40 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Down/Left" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x01, $panspeed, $tiltspeed, 0x01, 0x02, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop( $params ); + } +} + +sub moveDownRight +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed', 0x40 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x40 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Move Down/Right" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x01, $panspeed, $tiltspeed, 0x02, 0x02, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->stop( $params ); + } +} + +sub moveRelUp +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'tiltstep' ); + my $speed = $self->getParam( $params, 'tiltspeed', 0x40 ); + Debug( "Step Up" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x03, 0x00, $speed, 0x00, 0x00, 0x00, 0x00, ($step&0xf000)>>12, ($step&0x0f00)>>8, ($step&0x00f0)>>4, ($step&0x000f)>>0, SYNC ); + + $self->sendCmd( \@msg ); +} + +sub moveRelDown +{ + my $self = shift; + my $params = shift; + my $step = -$self->getParam( $params, 'tiltstep' ); + my $speed = $self->getParam( $params, 'tiltspeed', 0x40 ); + Debug( "Step Down" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x03, 0x00, $speed, 0x00, 0x00, 0x00, 0x00, ($step&0xf000)>>12, ($step&0x0f00)>>8, ($step&0x00f0)>>4, ($step&0x000f)>>0, SYNC ); + $self->sendCmd( \@msg ); +} + +sub moveRelLeft +{ + my $self = shift; + my $params = shift; + my $step = -$self->getParam( $params, 'panstep' ); + my $speed = $self->getParam( $params, 'panspeed', 0x40 ); + Debug( "Step Left" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x03, $speed, 0x00, ($step&0xf000)>>12, ($step&0x0f00)>>8, ($step&0x00f0)>>4, ($step&0x000f)>>0, 0x00, 0x00, 0x00, 0x00, SYNC ); + $self->sendCmd( \@msg ); +} + +sub moveRelRight +{ + my $self = shift; + my $params = shift; + my $step = $self->getParam( $params, 'panstep' ); + my $speed = $self->getParam( $params, 'panspeed', 0x40 ); + Debug( "Step Right" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x03, $speed, 0x00, ($step&0xf000)>>12, ($step&0x0f00)>>8, ($step&0x00f0)>>4, ($step&0x000f)>>0, 0x00, 0x00, 0x00, 0x00, SYNC ); + $self->sendCmd( \@msg ); +} + +sub moveRelUpLeft +{ + my $self = shift; + my $params = shift; + my $panstep = -$self->getParam( $params, 'panstep' ); + my $tiltstep = $self->getParam( $params, 'tiltstep' ); + my $panspeed = $self->getParam( $params, 'panspeed', 0x40 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x40 ); + Debug( "Step Up/Left" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x03, $panspeed, $tiltspeed, ($panstep&0xf000)>>12, ($panstep&0x0f00)>>8, ($panstep&0x00f0)>>4, ($panstep&0x000f)>>0, ($tiltstep&0xf000)>>12, ($tiltstep&0x0f00)>>8, ($tiltstep&0x00f0)>>4, ($tiltstep&0x000f)>>0, SYNC ); + $self->sendCmd( \@msg ); +} + +sub moveRelUpRight +{ + my $self = shift; + my $params = shift; + my $panstep = $self->getParam( $params, 'panstep' ); + my $tiltstep = $self->getParam( $params, 'tiltstep' ); + my $panspeed = $self->getParam( $params, 'panspeed', 0x40 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x40 ); + Debug( "Step Up/Right" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x03, $panspeed, $tiltspeed, ($panstep&0xf000)>>12, ($panstep&0x0f00)>>8, ($panstep&0x00f0)>>4, ($panstep&0x000f)>>0, ($tiltstep&0xf000)>>12, ($tiltstep&0x0f00)>>8, ($tiltstep&0x00f0)>>4, ($tiltstep&0x000f)>>0, SYNC ); + $self->sendCmd( \@msg ); +} + +sub moveRelDownLeft +{ + my $self = shift; + my $params = shift; + my $panstep = -$self->getParam( $params, 'panstep' ); + my $tiltstep = -$self->getParam( $params, 'tiltstep' ); + my $panspeed = $self->getParam( $params, 'panspeed', 0x40 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x40 ); + Debug( "Step Down/Left" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x03, $panspeed, $tiltspeed, ($panstep&0xf000)>>12, ($panstep&0x0f00)>>8, ($panstep&0x00f0)>>4, ($panstep&0x000f)>>0, ($tiltstep&0xf000)>>12, ($tiltstep&0x0f00)>>8, ($tiltstep&0x00f0)>>4, ($tiltstep&0x000f)>>0, SYNC ); + $self->sendCmd( \@msg ); +} + +sub moveRelDownRight +{ + my $self = shift; + my $params = shift; + my $panstep = $self->getParam( $params, 'panstep' ); + my $tiltstep = -$self->getParam( $params, 'tiltstep' ); + my $panspeed = $self->getParam( $params, 'panspeed', 0x40 ); + my $tiltspeed = $self->getParam( $params, 'tiltspeed', 0x40 ); + Debug( "Step Down/Right" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x03, $panspeed, $tiltspeed, ($panstep&0xf000)>>12, ($panstep&0x0f00)>>8, ($panstep&0x00f0)>>4, ($panstep&0x000f)>>0, ($tiltstep&0xf000)>>12, ($tiltstep&0x0f00)>>8, ($tiltstep&0x00f0)>>4, ($tiltstep&0x000f)>>0, SYNC ); + $self->sendCmd( \@msg ); +} + +sub zoomConTele +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed', 0x06 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Zoom Tele" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x07, 0x20|$speed, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->zoomStop(); + } +} + +sub zoomWide +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed', 0x06 ); + my $autostop = $self->getParam( $params, 'autostop', 0 ); + Debug( "Zoom Wide" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x07, 0x30|$speed, SYNC ); + $self->sendCmd( \@msg ); + if( $autostop && $self->{Monitor}->{AutoStopTimeout} ) + { + usleep( $self->{Monitor}->{AutoStopTimeout} ); + $self->zoomStop(); + } +} + +sub zoomStop +{ + my $self = shift; + my $params = shift; + Debug( "Zoom Stop" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x07, 0x00, SYNC ); + $self->sendCmd( \@msg ); +} + +sub focusConNear +{ + my $self = shift; + my $params = shift; + Debug( "Focus Near" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x08, 0x03, SYNC ); + $self->sendCmd( \@msg ); +} + +sub focusConFar +{ + my $self = shift; + my $params = shift; + Debug( "Focus Far" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x08, 0x02, SYNC ); + $self->sendCmd( \@msg ); +} + +sub focusStop +{ + my $self = shift; + my $params = shift; + Debug( "Focus Stop" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x08, 0x00, SYNC ); + $self->sendCmd( \@msg ); +} + +sub focusAuto +{ + my $self = shift; + my $params = shift; + Debug( "Focus Auto" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x38, 0x02, SYNC ); + $self->sendCmd( \@msg ); +} + +sub focusMan +{ + my $self = shift; + my $params = shift; + Debug( "Focus Man" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x38, 0x03, SYNC ); + $self->sendCmd( \@msg ); +} + +sub presetClear +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset', 1 ); + Debug( "Clear Preset $preset" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x3f, 0x00, $preset, SYNC ); + $self->sendCmd( \@msg ); +} + +sub presetSet +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset', 1 ); + Debug( "Set Preset $preset" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x3f, 0x01, $preset, SYNC ); + $self->sendCmd( \@msg ); +} + +sub presetGoto +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset', 1 ); + Debug( "Goto Preset $preset" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x04, 0x3f, 0x02, $preset, SYNC ); + $self->sendCmd( \@msg ); +} + +sub presetHome +{ + my $self = shift; + my $params = shift; + Debug( "Home Preset" ); + my @msg = ( 0x80|$self->{Monitor}->{ControlAddress}, 0x01, 0x06, 0x04, SYNC ); + $self->sendCmd( \@msg ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/mjpgStreamer.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/mjpgStreamer.pm new file mode 100644 index 000000000..33a15cba1 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Control/mjpgStreamer.pm @@ -0,0 +1,252 @@ +# ========================================================================== +# +# ZoneMinder mjpg STreamer Control Protocol Module, $Date: 2007-11-04 17:30:29 +0000 (Sun, 04 Nov 2007) $, $Revision: 2229 $ +# Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the implementation of the mjpg streamer camera control +# protocol +# +package ZoneMinder::Control::mjpgStreamer; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# mjpgSTreamer Control Protocol +# +# ========================================================================== + +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 ); + Debug( "Camera New" ); + bless( $self, $class ); + srand( time() ); + return $self; +} + +our $AUTOLOAD; + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + Debug( "Camera 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(); + Debug( "Camera open" ); + use LWP::UserAgent; + $self->{ua} = LWP::UserAgent->new; + $self->{ua}->agent( "ZoneMinder Control Agent/".ZM_VERSION ); + + $self->{state} = '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; + + printMsg( $cmd, "Tx" ); + + my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd" ); + my $res = $self->{ua}->request($req); + + if ( $res->is_success ) + { + $result = !undef; + } + else + { + Error( "Error check failed: '".$res->status_line()."'" ); + } + + return( $result ); +} + +sub Up +{ + my $self = shift; + $self->moveConUp(); +} + +sub Down +{ + my $self = shift; + $self->moveConDown(); +} + +sub Left +{ + my $self = shift; + $self->moveConLeft(); +} + +sub Right +{ + my $self = shift; + $self->moveConRight(); +} + + +sub reset +{ + my $self = shift; + $self->cameraReset(); +} + + + +sub cameraReset +{ + my $self = shift; + Debug( "Camera Reset" ); + my $cmd = "?action=command&command=reset_pan_tilt"; + $self->sendCmd( $cmd ); +} + +sub moveConUp +{ + my $self = shift; + Debug( "Move Up" ); + my $cmd = "?action=command&command=tilt_minus"; + $self->sendCmd( $cmd ); +} + +sub moveConDown +{ + my $self = shift; + Debug( "Move Down" ); + my $cmd = "?action=command&command=tilt_plus"; + $self->sendCmd( $cmd ); +} + +sub moveConLeft +{ + my $self = shift; + Debug( "Move Left" ); + my $cmd = "?action=command&command=pan_plus"; + $self->sendCmd( $cmd ); +} + +sub moveConRight +{ + my $self = shift; + Debug( "Move Right" ); + my $cmd = "?action=command&command=pan_minus"; + $self->sendCmd( $cmd ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2005 by Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Database.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Database.pm new file mode 100644 index 000000000..d0bae5dde --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Database.pm @@ -0,0 +1,238 @@ +# ========================================================================== +# +# ZoneMinder Database Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::Database; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'functions' => [ qw( + zmDbConnect + zmDbDisconnect + zmDbGetMonitors + zmDbGetMonitor + zmDbGetMonitorAndControl + ) ] +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Database Access +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); +use ZoneMinder::Config qw(:all); + +use Carp; + +our $dbh = undef; + +sub zmDbConnect( ;$ ) +{ + my $force = shift; + if ( $force ) + { + zmDbDisconnect(); + } + if ( !defined( $dbh ) ) + { + my ( $host, $port ) = ( ZM_DB_HOST =~ /^([^:]+)(?::(.+))?$/ ); + + if ( defined($port) ) + { + $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".$host.";port=".$port, ZM_DB_USER, ZM_DB_PASS ); + } + else + { + $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + } + $dbh->trace( 0 ); + } + return( $dbh ); +} + +sub zmDbDisconnect() +{ + if ( defined( $dbh ) ) + { + $dbh->disconnect(); + $dbh = undef; + } +} + +use constant DB_MON_ALL => 0; # All monitors +use constant DB_MON_CAPT => 1; # All monitors that are capturing +use constant DB_MON_ACTIVE => 2; # All monitors that are active +use constant DB_MON_MOTION => 3; # All monitors that are doing motion detection +use constant DB_MON_RECORD => 4; # All monitors that are doing unconditional recording +use constant DB_MON_PASSIVE => 5; # All monitors that are in nodect state + +sub zmDbGetMonitors( ;$ ) +{ + zmDbConnect(); + + my $function = shift || DB_MON_ALL; + my $sql = "select * from Monitors"; + + if ( $function ) + { + if ( $function == DB_MON_CAPT ) + { + $sql .= " where Function >= 'Monitor'"; + } + elsif ( $function == DB_MON_ACTIVE ) + { + $sql .= " where Function > 'Monitor'"; + } + elsif ( $function == DB_MON_MOTION ) + { + $sql .= " where Function = 'Modect' or Function = 'Mocord'"; + } + elsif ( $function == DB_MON_RECORD ) + { + $sql .= " where Function = 'Record' or Function = 'Mocord'"; + } + elsif ( $function == DB_MON_PASSIVE ) + { + $sql .= " where Function = 'Nodect'"; + } + } + my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or croak( "Can't execute '$sql': ".$sth->errstr() ); + + my @monitors; + while( my $monitor = $sth->fetchrow_hashref() ) + { + push( @monitors, $monitor ); + } + $sth->finish(); + return( \@monitors ); +} + +sub zmDbGetMonitor( $ ) +{ + zmDbConnect(); + + my $id = shift; + + return( undef ) if ( !defined($id) ); + + my $sql = "select * from Monitors where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $id ) or croak( "Can't execute '$sql': ".$sth->errstr() ); + my $monitor = $sth->fetchrow_hashref(); + + return( $monitor ); +} + +sub zmDbGetMonitorAndControl( $ ) +{ + zmDbConnect(); + + my $id = shift; + + return( undef ) if ( !defined($id) ); + + my $sql = "select C.*,M.*,C.Protocol from Monitors as M inner join Controls as C on (M.ControlId = C.Id) where M.Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $id ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $monitor = $sth->fetchrow_hashref(); + + return( $monitor ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/General.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/General.pm new file mode 100644 index 000000000..5af7150a8 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/General.pm @@ -0,0 +1,768 @@ +# ========================================================================== +# +# ZoneMinder General Utility Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::General; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'functions' => [ qw( + executeShellCommand + getCmdFormat + runCommand + setFileOwner + getEventPath + createEventPath + createEvent + deleteEventFiles + makePath + jsonEncode + jsonDecode + ) ] +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# General Utility Functions +# +# ========================================================================== + +use ZoneMinder::Config qw(:all); +use ZoneMinder::Logger qw(:all); +use ZoneMinder::Database qw(:all); + +use POSIX; + +# For running general shell commands +sub executeShellCommand( $ ) +{ + my $command = shift; + my $output = qx( $command ); + my $status = $? >> 8; + if ( $status || logDebugging() ) + { + Debug( "Command: $command\n" ); + chomp( $output ); + Debug( "Output: $output\n" ); + } + return( $status ); +} + +sub getCmdFormat() +{ + Debug( "Testing valid shell syntax\n" ); + + my ( $name ) = getpwuid( $> ); + if ( $name eq ZM_WEB_USER ) + { + Debug( "Running as '$name', su commands not needed\n" ); + return( "" ); + } + + my $null_command = "true"; + + my $prefix = "sudo -u ".ZM_WEB_USER." "; + my $suffix = ""; + my $command = $prefix.$null_command.$suffix; + Debug( "Testing \"$command\"\n" ); + $command .= " > /dev/null 2>&1"; + my $output = qx($command); + my $status = $? >> 8; + if ( !$status ) + { + Debug( "Test ok, using format \"$prefix$suffix\"\n" ); + return( $prefix, $suffix ); + } + else + { + chomp( $output ); + Debug( "Test failed, '$output'\n" ); + + $prefix = "su ".ZM_WEB_USER." --shell=/bin/sh --command='"; + $suffix = "'"; + $command = $prefix.$null_command.$suffix; + Debug( "Testing \"$command\"\n" ); + my $output = qx($command); + my $status = $? >> 8; + if ( !$status ) + { + Debug( "Test ok, using format \"$prefix$suffix\"\n" ); + return( $prefix, $suffix ); + } + else + { + chomp( $output ); + Debug( "Test failed, '$output'\n" ); + + $prefix = "su ".ZM_WEB_USER." -c '"; + $suffix = "'"; + $command = $prefix.$null_command.$suffix; + Debug( "Testing \"$command\"\n" ); + $output = qx($command); + $status = $? >> 8; + if ( !$status ) + { + Debug( "Test ok, using format \"$prefix$suffix\"\n" ); + return( $prefix, $suffix ); + } + else + { + chomp( $output ); + Debug( "Test failed, '$output'\n" ); + } + } + } + Error( "Unable to find valid 'su' syntax\n" ); + exit( -1 ); +} + +our $testedShellSyntax = 0; +our ( $cmdPrefix, $cmdSuffix ); + +# For running ZM daemons etc +sub runCommand( $ ) +{ + if ( !$testedShellSyntax ) + { + # Determine the appropriate syntax for the su command + ( $cmdPrefix, $cmdSuffix ) = getCmdFormat(); + $testedShellSyntax = !undef; + } + + my $command = shift; + $command = ZM_PATH_BIN."/".$command; + if ( $cmdPrefix ) + { + $command = $cmdPrefix.$command.$cmdSuffix; + } + Debug( "Command: $command\n" ); + my $output = qx($command); + my $status = $? >> 8; + chomp( $output ); + if ( $status || logDebugging() ) + { + if ( $status ) + { + Error( "Unable to run \"$command\", output is \"$output\"\n" ); + exit( -1 ); + } + else + { + Debug( "Output: $output\n" ); + } + } + return( $output ); +} + +sub getEventPath( $ ) +{ + my $event = shift; + + my $event_path = ""; + if ( ZM_USE_DEEP_STORAGE ) + { + $event_path = ZM_DIR_EVENTS.'/'.$event->{MonitorId}.'/'.strftime( "%y/%m/%d/%H/%M/%S", localtime($event->{Time}) ); + } + else + { + $event_path = ZM_DIR_EVENTS.'/'.$event->{MonitorId}.'/'.$event->{Id}; + } + $event_path = ZM_PATH_WEB.'/'.$event_path if ( index(ZM_DIR_EVENTS,'/') != 0 ); + return( $event_path ); +} + +sub createEventPath( $ ) +{ + # + # WARNING assumes running from events directory + # + my $event = shift; + my $eventRootPath = (ZM_DIR_EVENTS=~m|/|)?ZM_DIR_EVENTS:(ZM_PATH_WEB.'/'.ZM_DIR_EVENTS); + my $eventPath = $eventRootPath.'/'.$event->{MonitorId}; + + if ( ZM_USE_DEEP_STORAGE ) + { + my @startTime = localtime( $event->{StartTime} ); + + my @datetimeParts = (); + $datetimeParts[0] = sprintf( "%02d", $startTime[5]-100 ); + $datetimeParts[1] = sprintf( "%02d", $startTime[4]+1 ); + $datetimeParts[2] = sprintf( "%02d", $startTime[3] ); + $datetimeParts[3] = sprintf( "%02d", $startTime[2] ); + $datetimeParts[4] = sprintf( "%02d", $startTime[1] ); + $datetimeParts[5] = sprintf( "%02d", $startTime[0] ); + + my $datePath = join('/',@datetimeParts[0..2]); + my $timePath = join('/',@datetimeParts[3..5]); + + makePath( $datePath, $eventPath ); + $eventPath .= '/'.$datePath; + + # Create event id symlink + my $idFile = sprintf( "%s/.%d", $eventPath, $event->{Id} ); + symlink( $timePath, $idFile ) or Fatal( "Can't symlink $idFile -> $eventPath: $!" ); + + makePath( $timePath, $eventPath ); + $eventPath .= '/'.$timePath; + setFileOwner( $idFile ); # Must come after directory has been created + + # Create empty id tag file + $idFile = sprintf( "%s/.%d", $eventPath, $event->{Id} ); + open( ID_FP, ">$idFile" ) or Fatal( "Can't open $idFile: $!" ); + close( ID_FP ); + setFileOwner( $idFile ); + } + else + { + makePath( $event->{Id}, $eventPath ); + $eventPath .= '/'.$event->{Id}; + + my $idFile = sprintf( "%s/.%d", $eventPath, $event->{Id} ); + open( ID_FP, ">$idFile" ) or Fatal( "Can't open $idFile: $!" ); + close( ID_FP ); + setFileOwner( $idFile ); + } + return( $eventPath ); +} + +use Data::Dumper; + +our $_setFileOwner = undef; +our ( $_ownerUid, $_ownerGid ); + +sub _checkProcessOwner() +{ + if ( !defined($_setFileOwner) ) + { + my ( $processOwner ) = getpwuid( $> ); + if ( $processOwner ne ZM_WEB_USER ) + { + # Not running as web user, so should be root in whch case chown the temporary directory + ( my $ownerName, my $ownerPass, $_ownerUid, $_ownerGid ) = getpwnam( ZM_WEB_USER ) or Fatal( "Can't get user details for web user '".ZM_WEB_USER."': $!" ); + $_setFileOwner = 1; + } + else + { + $_setFileOwner = 0; + } + } + return( $_setFileOwner ); +} + +sub setFileOwner( $ ) +{ + my $file = shift; + + if ( _checkProcessOwner() ) + { + chown( $_ownerUid, $_ownerGid, $file ) or Fatal( "Can't change ownership of file '$file' to '".ZM_WEB_USER.":".ZM_WEB_GROUP."': $!" ); + } +} + +our $_hasImageInfo = undef; + +sub _checkForImageInfo() +{ + if ( !defined($_hasImageInfo) ) + { + my $result = eval + { + require Image::Info; + Image::Info->import(); + }; + $_hasImageInfo = $@?0:1; + } + return( $_hasImageInfo ); +} + +sub createEvent( $;$ ) +{ + my $event = shift; + + Debug( "Creating event" ); + #print( Dumper( $event )."\n" ); + + _checkForImageInfo(); + + my $dbh = zmDbConnect(); + + if ( $event->{monitor} ) + { + $event->{MonitorId} = $event->{monitor}->{Id}; + } + elsif ( $event->{MonitorId} ) + { + my $sql = "select * from Monitors where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{MonitorId} ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); + $event->{monitor} = $sth->fetchrow_hashref() or Fatal( "Unable to create event, can't load monitor with id '".$event->{MonitorId}."'" ); + $sth->finish(); + } + else + { + Fatal( "Unable to create event, no monitor or monitor id supplied" ); + } + $event->{Name} = "New Event" unless( $event->{Name} ); + $event->{Frames} = int(@{$event->{frames}}); + $event->{TotScore} = $event->{MaxScore} = 0; + + my $lastTimestamp = 0.0; + foreach my $frame ( @{$event->{frames}} ) + { + if ( !$event->{Width} ) + { + if ( $_hasImageInfo ) + { + my $imageInfo = Image::Info::image_info( $frame->{imagePath} ); + if ( $imageInfo->{error} ) + { + Error( "Unable to extract image info from '".$frame->{imagePath}."': ".$imageInfo->{error} ); + } + else + { + ( $event->{Width}, $event->{Height} ) = Image::Info::dim( $imageInfo ); + } + } + } + $frame->{Type} = $frame->{Score}>0?'Alarm':'Normal' unless( $frame->{Type} ); + $frame->{Delta} = $lastTimestamp?($frame->{TimeStamp}-$lastTimestamp):0.0; + $event->{StartTime} = $frame->{TimeStamp} unless ( $event->{StartTime} ); + $event->{TotScore} += $frame->{Score}; + $event->{MaxScore} = $frame->{Score} if ( $frame->{Score} > $event->{MaxScore} ); + $event->{AlarmFrames}++ if ( $frame->{Type} eq 'Alarm' ); + $event->{EndTime} = $frame->{TimeStamp}; + $lastTimestamp = $frame->{TimeStamp}; + } + $event->{Width} = $event->{monitor}->{Width} unless( $event->{Width} ); + $event->{Height} = $event->{monitor}->{Height} unless( $event->{Height} ); + $event->{AvgScore} = $event->{TotScore}/int($event->{AlarmFrames}); + $event->{Length} = $event->{EndTime} - $event->{StartTime}; + + my %formats = ( + StartTime => 'from_unixtime(?)', + EndTime => 'from_unixtime(?)', + ); + + my ( @fields, @formats, @values ); + while ( my ( $field, $value ) = each( %$event ) ) + { + next unless $field =~ /^[A-Z]/; + push( @fields, $field ); + push( @formats, ($formats{$field} or '?') ); + push( @values, $event->{$field} ); + } + + my $sql = "insert into Events (".join(',',@fields).") values (".join(',',@formats).")"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( @values ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); + $event->{Id} = $dbh->{mysql_insertid}; + Info( "Created event ".$event->{Id} ); + + if ( $event->{EndTime} ) + { + $event->{Name} = $event->{monitor}->{EventPrefix}.$event->{Id} if ( $event->{Name} eq 'New Event' ); + my $sql = "update Events set Name = ? where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Name}, $event->{Id} ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); + } + + my $eventPath = createEventPath( $event ); + + my %frameFormats = ( + TimeStamp => 'from_unixtime(?)', + ); + my $frameId = 1; + foreach my $frame ( @{$event->{frames}} ) + { + $frame->{EventId} = $event->{Id}; + $frame->{FrameId} = $frameId++; + + my ( @fields, @formats, @values ); + while ( my ( $field, $value ) = each( %$frame ) ) + { + next unless $field =~ /^[A-Z]/; + push( @fields, $field ); + push( @formats, ($frameFormats{$field} or '?') ); + push( @values, $frame->{$field} ); + } + + my $sql = "insert into Frames (".join(',',@fields).") values (".join(',',@formats).")"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( @values ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); + #$frame->{FrameId} = $dbh->{mysql_insertid}; + if ( $frame->{imagePath} ) + { + $frame->{capturePath} = sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg", $eventPath, $frame->{FrameId} ); + rename( $frame->{imagePath}, $frame->{capturePath} ) or Fatal( "Can't copy ".$frame->{imagePath}." to ".$frame->{capturePath}.": $!" ); + setFileOwner( $frame->{capturePath} ); + if ( 0 && ZM_CREATE_ANALYSIS_IMAGES ) + { + $frame->{analysePath} = sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-analyse.jpg", $eventPath, $frame->{FrameId} ); + link( $frame->{capturePath}, $frame->{analysePath} ) or Fatal( "Can't link ".$frame->{capturePath}." to ".$frame->{analysePath}.": $!" ); + setFileOwner( $frame->{analysePath} ); + } + } + } +} + +sub addEventImage( $$ ) +{ + my $event = shift; + my $frame = shift; + + # TBD +} + +sub updateEvent( $ ) +{ + my $event = shift; + + if ( !$event->{EventId} ) + { + Error( "Unable to update event, no event id supplied" ); + return( 0 ); + } + + my $dbh = zmDbConnect(); + + $event->{Name} = $event->{monitor}->{EventPrefix}.$event->{Id} if ( $event->{Name} eq 'New Event' ); + + my %formats = ( + StartTime => 'from_unixtime(?)', + EndTime => 'from_unixtime(?)', + ); + + my ( @values, @sets ); + while ( my ( $field, $value ) = each( %$event ) ) + { + next if ( $field eq 'Id' ); + push( @values, $event->{$field} ); + push( @sets, $field." = ".($formats{$field} or '?') ); + } + my $sql = "update Events set ".join(',',@sets)." where Id = ?"; + push( @values, $event->{Id} ); + + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( @values ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); +} + +sub deleteEventFiles( $;$ ) +{ + # + # WARNING assumes running from events directory + # + my $event_id = shift; + my $monitor_id = shift; + $monitor_id = '*' if ( !defined($monitor_id) ); + + if ( ZM_USE_DEEP_STORAGE ) + { + my $link_path = $monitor_id."/*/*/*/.".$event_id; + #Debug( "LP1:$link_path" ); + my @links = glob($link_path); + #Debug( "L:".$links[0].": $!" ); + if ( @links ) + { + ( $link_path ) = ( $links[0] =~ /^(.*)$/ ); # De-taint + #Debug( "LP2:$link_path" ); + + ( my $day_path = $link_path ) =~ s/\.\d+//; + #Debug( "DP:$day_path" ); + my $event_path = $day_path.readlink( $link_path ); + ( $event_path ) = ( $event_path =~ /^(.*)$/ ); # De-taint + #Debug( "EP:$event_path" ); + my $command = "/bin/rm -rf ".$event_path; + #Debug( "C:$command" ); + executeShellCommand( $command ); + + unlink( $link_path ) or Error( "Unable to unlink '$link_path': $!" ); + my @path_parts = split( /\//, $event_path ); + for ( my $i = int(@path_parts)-2; $i >= 1; $i-- ) + { + my $delete_path = join( '/', @path_parts[0..$i] ); + #Debug( "DP$i:$delete_path" ); + my @has_files = glob( $delete_path."/*" ); + #Debug( "HF1:".$has_files[0] ) if ( @has_files ); + last if ( @has_files ); + @has_files = glob( $delete_path."/.[0-9]*" ); + #Debug( "HF2:".$has_files[0] ) if ( @has_files ); + last if ( @has_files ); + my $command = "/bin/rm -rf ".$delete_path; + executeShellCommand( $command ); + } + } + } + else + { + my $command = "/bin/rm -rf $monitor_id/$event_id"; + executeShellCommand( $command ); + } +} + +sub makePath( $;$ ) +{ + my $path = shift; + my $root = shift; + $root = (( $path =~ m|^/| )?'':'.' ) unless( $root ); + + Debug( "Creating path '$path' in $root'\n" ); + my @parts = split( '/', $path ); + my $fullPath = $root; + foreach my $dir ( @parts ) + { + $fullPath .= '/'.$dir; + if ( !-d $fullPath ) + { + if ( -e $fullPath ) + { + Fatal( "Can't create '$fullPath', already exists as non directory" ); + } + else + { + Debug( "Creating '$fullPath'\n" ); + mkdir( $fullPath, 0755 ) or Fatal( "Can't mkdir '$fullPath': $!" ); + setFileOwner( $fullPath ); + } + } + } + return( $fullPath ); +} + +our $testedJSON = 0; +our $hasJSONAny = 0; + +sub _testJSON +{ + return if ( $testedJSON ); + my $result = eval + { + require JSON::Any; + JSON::Any->import(); + }; + $testedJSON = 1; + $hasJSONAny = 1 if ( $result ); +} + +sub _getJSONType( $ ) +{ + my $value = shift; + return( 'null' ) unless( defined($value) ); + return( 'integer' ) if ( $value =~ /^\d+$/ ); + return( 'double' ) if ( $value =~ /^\d+$/ ); + return( 'hash' ) if ( ref($value) eq 'HASH' ); + return( 'array' ) if ( ref($value) eq 'ARRAY' ); + return( 'string' ); +} + +sub jsonEncode( $ ); + +sub jsonEncode( $ ) +{ + my $value = shift; + + _testJSON(); + if ( $hasJSONAny ) + { + my $string = eval { JSON::Any->objToJson( $value ) }; + Fatal( "Unable to encode object to JSON: $@" ) unless( $string ); + return( $string ); + } + + my $type = _getJSONType($value); + if ( $type eq 'integer' || $type eq 'double' ) + { + return( $value ); + } + elsif ( $type eq 'boolean' ) + { + return( $value?'true':'false' ); + } + elsif ( $type eq 'string' ) + { + $value =~ s|(["\\/])|\\$1|g; + $value =~ s|\r?\n|\n|g; + return( '"'.$value.'"' ); + } + elsif ( $type eq 'null' ) + { + return( 'null' ); + } + elsif ( $type eq 'array' ) + { + return( '['.join( ',', map { jsonEncode( $_ ) } @$value ).']' ); + } + elsif ( $type eq 'hash' ) + { + my $result = '{'; + while ( my ( $subKey=>$subValue ) = each( %$value ) ) + { + $result .= ',' if ( $result ne '{' ); + $result .= '"'.$subKey.'":'.jsonEncode( $subValue ); + } + return( $result.'}' ); + } + else + { + Fatal( "Unexpected type '$type'" ); + } +} + +sub jsonDecode( $ ) +{ + my $value = shift; + + _testJSON(); + if ( $hasJSONAny ) + { + my $object = eval { JSON::Any->jsonToObj( $value ) }; + Fatal( "Unable to decode JSON string '$value': $@" ) unless( $object ); + return( $object ); + } + + my $comment = 0; + my $unescape = 0; + my $out = ''; + my @chars = split( //, $value ); + for ( my $i = 0; $i < @chars; $i++ ) + { + if ( !$comment ) + { + if ( $chars[$i] eq ':' ) + { + $out .= '=>'; + } + else + { + $out .= $chars[$i]; + } + } + elsif ( !$unescape ) + { + if ( $chars[$i] eq '\\' ) + { + $unescape = 1; + } + else + { + $out .= $chars[$i]; + } + } + else + { + if ( $chars[$i] ne '/' ) + { + $out .= '\\'; + } + $out .= $chars[$i]; + $unescape = 0; + } + if ( $chars[$i] eq '"' ) + { + $comment = !$comment; + } + } + $out =~ s/=>true/=>1/g; + $out =~ s/=>false/=>0/g; + $out =~ s/=>null/=>undef/g; + $out =~ s/`/'/g; + $out =~ s/qx/qq/g; + ( $out ) = $out =~ m/^({.+})$/; # Detaint and check it's a valid object syntax + my $result = eval $out; + Fatal( $@ ) if ( $@ ); + return( $result ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Logger.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Logger.pm new file mode 100644 index 000000000..46095be2e --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Logger.pm @@ -0,0 +1,861 @@ +# ========================================================================== +# +# ZoneMinder Logger Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the debug definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::Logger; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'constants' => [ qw( + DEBUG + INFO + WARNING + ERROR + FATAL + PANIC + NOLOG + ) ], + 'functions' => [ qw( + logInit + logReinit + logTerm + logSetSignal + logClearSignal + logDebugging + logLevel + logTermLevel + logDatabaseLevel + logFileLevel + logSyslogLevel + Mark + Dump + Debug + Info + Warning + Error + Fatal + Panic + ) ] +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Logger Facilities +# +# ========================================================================== + +use ZoneMinder::Config qw(:all); + +use DBI; +use Carp; +use POSIX; +use IO::Handle; +use Data::Dumper; +use Time::HiRes qw/gettimeofday/; +use Sys::Syslog; + +use constant { + DEBUG => 1, + INFO => 0, + WARNING => -1, + ERROR => -2, + FATAL => -3, + PANIC => -4, + NOLOG => -5 +}; + +our %codes = ( + &DEBUG => "DBG", + &INFO => "INF", + &WARNING => "WAR", + &ERROR => "ERR", + &FATAL => "FAT", + &PANIC => "PNC", + &NOLOG => "OFF" +); + +our %priorities = ( + &DEBUG => "debug", + &INFO => "info", + &WARNING => "warning", + &ERROR => "err", + &FATAL => "err", + &PANIC => "err" +); + +our $logger; + +sub new +{ + my $class = shift; + my $this = {}; + + $this->{initialised} = undef; + + #$this->{id} = "zmundef"; + ( $this->{id} ) = $0 =~ m|^(?:.*/)?([^/]+?)(?:\.[^/.]+)?$|; + $this->{idRoot} = $this->{id}; + $this->{idArgs} = ""; + + $this->{level} = INFO; + $this->{termLevel} = NOLOG; + $this->{databaseLevel} = NOLOG; + $this->{fileLevel} = NOLOG; + $this->{syslogLevel} = NOLOG; + $this->{effectiveLevel} = INFO; + + $this->{autoFlush} = 1; + $this->{hasTerm} = -t STDERR; + + ( $this->{fileName} = $0 ) =~ s|^.*/||; + $this->{logPath} = ZM_PATH_LOGS; + $this->{logFile} = $this->{logPath}."/".$this->{id}.".log"; + + $this->{trace} = 0; + + bless( $this, $class ); + return $this; +} + +sub BEGIN +{ + # Fake the config variables that are used in case they are not defined yet + # Only really necessary to support upgrade from previous version + if ( !eval('defined(ZM_LOG_DEBUG)') ) + { + no strict 'subs'; + no strict 'refs'; + my %dbgConfig = ( + ZM_LOG_LEVEL_DATABASE => 0, + ZM_LOG_LEVEL_FILE => 0, + ZM_LOG_LEVEL_SYSLOG => 0, + ZM_LOG_DEBUG => 0, + ZM_LOG_DEBUG_TARGET => "", + ZM_LOG_DEBUG_LEVEL => 1, + ZM_LOG_DEBUG_FILE => "" + ); + while ( my ( $name, $value ) = each( %dbgConfig ) ) + { + *{$name} = sub { $value }; + } + use strict 'subs'; + use strict 'refs'; + } +} + +sub DESTROY +{ + my $this = shift; + $this->terminate(); +} + +sub initialise( @ ) +{ + my $this = shift; + my %options = @_; + + $this->{id} = $options{id} if ( defined($options{id}) ); + + $this->{logPath} = $options{logPath} if ( defined($options{logPath}) ); + + my $tempLogFile; + $tempLogFile = $this->{logPath}."/".$this->{id}.".log"; + $tempLogFile = $options{logFile} if ( defined($options{logFile}) ); + if ( my $logFile = $this->getTargettedEnv('LOG_FILE') ) + { + $tempLogFile = $logFile; + } + + my $tempLevel = INFO; + my $tempTermLevel = $this->{termLevel}; + my $tempDatabaseLevel = $this->{databaseLevel}; + my $tempFileLevel = $this->{fileLevel}; + my $tempSyslogLevel = $this->{syslogLevel}; + + $tempTermLevel = $options{termLevel} if ( defined($options{termLevel}) ); + if ( defined($options{databaseLevel}) ) + { + $tempDatabaseLevel = $options{databaseLevel}; + } + else + { + $tempDatabaseLevel = ZM_LOG_LEVEL_DATABASE; + } + if ( defined($options{fileLevel}) ) + { + $tempFileLevel = $options{fileLevel}; + } + else + { + $tempFileLevel = ZM_LOG_LEVEL_FILE; + } + if ( defined($options{syslogLevel}) ) + { + $tempSyslogLevel = $options{syslogLevel}; + } + else + { + $tempSyslogLevel = ZM_LOG_LEVEL_SYSLOG; + } + + if ( defined($ENV{'LOG_PRINT'}) ) + { + $tempTermLevel = $ENV{'LOG_PRINT'}? DEBUG : NOLOG; + } + + my $level; + $tempLevel = $level if ( defined($level = $this->getTargettedEnv('LOG_LEVEL')) ); + + $tempTermLevel = $level if ( defined($level = $this->getTargettedEnv('LOG_LEVEL_TERM')) ); + $tempDatabaseLevel = $level if ( defined($level = $this->getTargettedEnv('LOG_LEVEL_DATABASE')) ); + $tempFileLevel = $level if ( defined($level = $this->getTargettedEnv('LOG_LEVEL_FILE')) ); + $tempSyslogLevel = $level if ( defined($level = $this->getTargettedEnv('LOG_LEVEL_SYSLOG')) ); + + if ( ZM_LOG_DEBUG ) + { + foreach my $target ( split( /\|/, ZM_LOG_DEBUG_TARGET ) ) + { + if ( $target eq $this->{id} || $target eq "_".$this->{id} || $target eq $this->{idRoot} || $target eq "_".$this->{idRoot} || $target eq "" ) + { + if ( ZM_LOG_DEBUG_LEVEL > NOLOG ) + { + $tempLevel = $this->limit( ZM_LOG_DEBUG_LEVEL ); + if ( ZM_LOG_DEBUG_FILE ne "" ) + { + $tempLogFile = ZM_LOG_DEBUG_FILE; + $tempFileLevel = $tempLevel; + } + } + } + } + } + + $this->logFile( $tempLogFile ); + + $this->termLevel( $tempTermLevel ); + $this->databaseLevel( $tempDatabaseLevel ); + $this->fileLevel( $tempFileLevel ); + $this->syslogLevel( $tempSyslogLevel ); + + $this->level( $tempLevel ); + + $this->{trace} = $options{trace} if ( defined($options{trace}) ); + + $this->{autoFlush} = $ENV{'LOG_FLUSH'}?1:0 if ( defined($ENV{'LOG_FLUSH'}) ); + + $this->{initialised} = !undef; + + Debug( "LogOpts: level=".$codes{$this->{level}}."/".$codes{$this->{effectiveLevel}}.", screen=".$codes{$this->{termLevel}}.", database=".$codes{$this->{databaseLevel}}.", logfile=".$codes{$this->{fileLevel}}."->".$this->{logFile}.", syslog=".$codes{$this->{syslogLevel}} ); +} + +sub terminate() +{ + my $this = shift; + return unless ( $this->{initialised} ); + $this->syslogLevel( NOLOG ); + $this->fileLevel( NOLOG ); + $this->databaseLevel( NOLOG ); + $this->termLevel( NOLOG ); +} + +sub reinitialise() +{ + my $this = shift; + + return unless ( $this->{initialised} ); + + # Bit of a nasty hack to reopen connections to log files and the DB + my $syslogLevel = $this->syslogLevel(); + $this->syslogLevel( NOLOG ); + my $logfileLevel = $this->fileLevel(); + $this->fileLevel( NOLOG ); + my $databaseLevel = $this->databaseLevel(); + $this->databaseLevel( NOLOG ); + my $screenLevel = $this->termLevel(); + $this->termLevel( NOLOG ); + + $this->syslogLevel( $syslogLevel ) if ( $syslogLevel > NOLOG ); + $this->fileLevel( $logfileLevel ) if ( $logfileLevel > NOLOG ); + $this->databaseLevel( $databaseLevel ) if ( $databaseLevel > NOLOG ); + $this->databaseLevel( $databaseLevel ) if ( $databaseLevel > NOLOG ); +} + +sub limit( $ ) +{ + my $this = shift; + my $level = shift; + return( DEBUG ) if ( $level > DEBUG ); + return( NOLOG ) if ( $level < NOLOG ); + return( $level ); +} + +sub getTargettedEnv( $ ) +{ + my $this = shift; + my $name = shift; + my $envName = $name."_".$this->{id}; + my $value; + $value = $ENV{$envName} if ( defined($ENV{$envName}) ); + if ( !defined($value) && $this->{id} ne $this->{idRoot} ) + { + $envName = $name."_".$this->{idRoot}; + $value = $ENV{$envName} if ( defined($ENV{$envName}) ); + } + if ( !defined($value) ) + { + $value = $ENV{$name} if ( defined($ENV{$name}) ); + } + if ( defined($value) ) + { + ( $value ) = $value =~ m/(.*)/; + } + return( $value ); +} + +sub fetch() +{ + if ( !$logger ) + { + $logger = ZoneMinder::Logger->new(); + $logger->initialise( 'syslogLevel'=>INFO, 'databaseLevel'=>INFO ); + } + return( $logger ); +} + +sub id( ;$ ) +{ + my $this = shift; + my $id = shift; + if ( defined($id) && $this->{id} ne $id ) + { + # Remove whitespace + $id =~ s/\S//g; + # Replace non-alphanum with underscore + $id =~ s/[^a-zA-Z_]/_/g; + + if ( $this->{id} ne $id ) + { + $this->{id} = $this->{idRoot} = $id; + if ( $id =~ /^([^_]+)_(.+)$/ ) + { + $this->{idRoot} = $1; + $this->{idArgs} = $2; + } + } + } + return( $this->{id} ); +} + +sub level( ;$ ) +{ + my $this = shift; + my $level = shift; + if ( defined($level) ) + { + $this->{level} = $this->limit( $level ); + $this->{effectiveLevel} = NOLOG; + $this->{effectiveLevel} = $this->{termLevel} if ( $this->{termLevel} > $this->{effectiveLevel} ); + $this->{effectiveLevel} = $this->{databaseLevel} if ( $this->{databaseLevel} > $this->{effectiveLevel} ); + $this->{effectiveLevel} = $this->{fileLevel} if ( $this->{fileLevel} > $this->{effectiveLevel} ); + $this->{effectiveLevel} = $this->{syslogLevel} if ( $this->{syslogLevel} > $this->{level} ); + $this->{effectiveLevel} = $this->{level} if ( $this->{effectiveLevel} > $this->{level} ); + } + return( $this->{level} ); +} + +sub debugOn() +{ + my $this = shift; + return( $this->{effectiveLevel} >= DEBUG ); +} + +sub trace( ;$ ) +{ + my $this = shift; + $this->{trace} = $_[0] if ( @_ ); + return( $this->{trace} ); +} + +sub termLevel( ;$ ) +{ + my $this = shift; + my $termLevel = shift; + if ( defined($termLevel) ) + { + $termLevel = NOLOG if ( !$this->{hasTerm} ); + $termLevel = $this->limit( $termLevel ); + if ( $this->{termLevel} != $termLevel ) + { + $this->{termLevel} = $termLevel; + } + } + return( $this->{termLevel} ); +} + +sub databaseLevel( ;$ ) +{ + my $this = shift; + my $databaseLevel = shift; + if ( defined($databaseLevel) ) + { + $databaseLevel = $this->limit( $databaseLevel ); + if ( $this->{databaseLevel} != $databaseLevel ) + { + if ( $databaseLevel > NOLOG && $this->{databaseLevel} <= NOLOG ) + { + if ( !$this->{dbh} ) + { + my ( $host, $port ) = ( ZM_DB_HOST =~ /^([^:]+)(?::(.+))?$/ ); + + if ( defined($port) ) + { + $this->{dbh} = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".$host.";port=".$port, ZM_DB_USER, ZM_DB_PASS ); + } + else + { + $this->{dbh} = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ); + } + if ( !$this->{dbh} ) + { + $databaseLevel = NOLOG; + Error( "Unable to write log entries to DB, can't connect to database '".ZM_DB_NAME."' on host '".ZM_DB_HOST."'" ); + } + else + { + $this->{dbh}->{AutoCommit} = 1; + Fatal( "Can't set AutoCommit on in database connection" ) unless( $this->{dbh}->{AutoCommit} ); + $this->{dbh}->{mysql_auto_reconnect} = 1; + Fatal( "Can't set mysql_auto_reconnect on in database connection" ) unless( $this->{dbh}->{mysql_auto_reconnect} ); + $this->{dbh}->trace( 0 ); + } + } + } + elsif ( $databaseLevel <= NOLOG && $this->{databaseLevel} > NOLOG ) + { + if ( $this->{dbh} ) + { + $this->{dbh}->disconnect(); + undef($this->{dbh}); + } + } + $this->{databaseLevel} = $databaseLevel; + } + } + return( $this->{databaseLevel} ); +} + +sub fileLevel( ;$ ) +{ + my $this = shift; + my $fileLevel = shift; + if ( defined($fileLevel) ) + { + $fileLevel = $this->limit($fileLevel); + if ( $this->{fileLevel} != $fileLevel ) + { + $this->closeFile() if ( $this->{fileLevel} > NOLOG ); + $this->{fileLevel} = $fileLevel; + $this->openFile() if ( $this->{fileLevel} > NOLOG ); + } + } + return( $this->{fileLevel} ); +} + +sub syslogLevel( ;$ ) +{ + my $this = shift; + my $syslogLevel = shift; + if ( defined($syslogLevel) ) + { + $syslogLevel = $this->limit($syslogLevel); + if ( $this->{syslogLevel} != $syslogLevel ) + { + $this->closeSyslog() if ( $syslogLevel <= NOLOG && $this->{syslogLevel} > NOLOG ); + $this->openSyslog() if ( $syslogLevel > NOLOG && $this->{syslogLevel} <= NOLOG ); + $this->{syslogLevel} = $syslogLevel; + } + } + return( $this->{syslogLevel} ); +} + +sub openSyslog() +{ + my $this = shift; + openlog( $this->{id}, "pid", "local1" ); +} + +sub closeSyslog() +{ + my $this = shift; + #closelog(); +} + +sub logFile( $ ) +{ + my $this = shift; + my $logFile = shift; + if ( $logFile =~ /^(.+)\+$/ ) + { + $this->{logFile} = $1.'.'.$$; + } + else + { + $this->{logFile} = $logFile; + } +} + +sub openFile() +{ + my $this = shift; + if ( open( LOGFILE, ">>".$this->{logFile} ) ) + { + LOGFILE->autoflush() if ( $this->{autoFlush} ); + + my $webUid = (getpwnam( ZM_WEB_USER ))[2]; + my $webGid = (getgrnam( ZM_WEB_GROUP ))[2]; + if ( $> == 0 ) + { + chown( $webUid, $webGid, $this->{logFile} ) or Fatal( "Can't change permissions on log file '".$this->{logFile}."': $!" ) + } + } + else + { + $this->fileLevel( NOLOG ); + Error( "Can't open log file '".$this->{logFile}."': $!" ); + } +} + +sub closeFile() +{ + my $this = shift; + close( LOGFILE ) if ( fileno(LOGFILE) ); +} + +sub logPrint( $;$ ) +{ + my $this = shift; + my $level = shift; + my $string = shift; + + if ( $level <= $this->{effectiveLevel} ) + { + $string =~ s/[\r\n]+$//g; + + my $code = $codes{$level}; + + my ($seconds, $microseconds) = gettimeofday(); + my $message = sprintf( "%s.%06d %s[%d].%s [%s]", strftime( "%x %H:%M:%S", localtime( $seconds ) ), $microseconds, $this->{id}, $$, $code, $string ); + if ( $this->{trace} ) + { + $message = Carp::shortmess( $message ); + } + else + { + $message = $message."\n"; + } + syslog( $priorities{$level}, $code." [%s]", $string ) if ( $level <= $this->{syslogLevel} ); + print( LOGFILE $message ) if ( $level <= $this->{fileLevel} ); + if ( $level <= $this->{databaseLevel} ) + { + my $sql = "insert into Logs ( TimeKey, Component, Pid, Level, Code, Message, File, Line ) values ( ?, ?, ?, ?, ?, ?, ?, NULL )"; + $this->{sth} = $this->{dbh}->prepare_cached( $sql ); + if ( !$this->{sth} ) + { + $this->{databaseLevel} = NOLOG; + Fatal( "Can't prepare log entry '$sql': ".$this->{dbh}->errstr() ); + } + my $res = $this->{sth}->execute( $seconds+($microseconds/1000000.0), $this->{id}, $$, $level, $code, $string, $this->{fileName} ); + if ( !$res ) + { + $this->{databaseLevel} = NOLOG; + Fatal( "Can't execute log entry '$sql': ".$this->{sth}->errstr() ); + } + } + print( STDERR $message ) if ( $level <= $this->{termLevel} ); + } +} + +sub logInit( ;@ ) +{ + my %options = @_ ? @_ : (); + $logger = ZoneMinder::Logger->new() if ( !$logger ); + $logger->initialise( %options ); +} + +sub logReinit() +{ + fetch()->reinitialise(); +} + +sub logTerm +{ + return unless ( $logger ); + $logger->terminate(); + $logger = undef; +} + +sub logHupHandler() +{ + my $savedErrno = $!; + return unless( $logger ); + fetch()->reinitialise(); + logSetSignal(); + $! = $savedErrno; +} + +sub logSetSignal() +{ + $SIG{HUP} = \&logHupHandler; +} + +sub logClearSignal() +{ + $SIG{HUP} = 'DEFAULT'; +} + +sub logLevel( ;$ ) +{ + return( fetch()->level( @_ ) ); +} + +sub logDebugging() +{ + return( fetch()->debugOn() ); +} + +sub logTermLevel( ;$ ) +{ + return( fetch()->termLevel( @_ ) ); +} + +sub logDatabaseLevel( ;$ ) +{ + return( fetch()->databaseLevel( @_ ) ); +} + +sub logFileLevel( ;$ ) +{ + return( fetch()->fileLevel( @_ ) ); +} + +sub logSyslogLevel( ;$ ) +{ + return( fetch()->syslogLevel( @_ ) ); +} + +sub Mark( ;$$ ) +{ + my $level = shift; + $level = DEBUG unless( defined($level) ); + my $tag = "Mark"; + fetch()->logPrint( $level, $tag ); +} + +sub Dump( \$;$ ) +{ + my $var = shift; + my $label = shift; + $label = "VAR" unless( defined($label) ); + fetch()->logPrint( DEBUG, Data::Dumper->Dump( [ $var ], [ $label ] ) ); +} + +sub Debug( @ ) +{ + fetch()->logPrint( DEBUG, @_ ); +} + +sub Info( @ ) +{ + fetch()->logPrint( INFO, @_ ); +} + +sub Warning( @ ) +{ + fetch()->logPrint( WARNING, @_ ); +} + +sub Error( @ ) +{ + fetch()->logPrint( ERROR, @_ ); +} + +sub Fatal( @ ) +{ + fetch()->logPrint( FATAL, @_ ); + exit( -1 ); +} + +sub Panic( @ ) +{ + fetch()->logPrint( PANIC, @_ ); + confess( $_[0] ); +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::Logger - ZoneMinder Logger module + +=head1 SYNOPSIS + + use ZoneMinder::Logger; + use ZoneMinder::Logger qw(:all); + + logInit( "myproc", DEBUG ); + + Debug( "This is what is happening" ); + Info( "Something interesting is happening" ); + Warning( "Something might be going wrong." ); + Error( "Something has gone wrong!!" ); + Fatal( "Something has gone badly wrong, gotta stop!!" ); + Panic( "Something fundamental has gone wrong, die with stack trace ); + +=head1 DESCRIPTION + +The ZoneMinder:Logger module contains the common debug and error reporting routines used by the ZoneMinder scripts. + +To use debug in your scripts you need to include this module, and call logInit. Thereafter you can sprinkle Debug or Error calls etc throughout the code safe in the knowledge that they will be reported to your error log, and possibly the syslogger, in a meaningful and consistent format. + +Debug is discussed in terms of levels where 1 and above (currently only 1 for scripts) is considered debug, 0 is considered as informational, -1 is a warning, -2 is an error and -3 is a fatal error or panic. Where levels are mentioned below as thresholds the value given and anything with a lower level (ie. more serious) will be included. + +=head1 METHODS + +=over 4 + +=item logInit ( $id, %options ); + +Initialises the debug and prepares the logging for forthcoming operations. If not called explicitly it will be called by the first debug call in your script, but with default (and probably meaningless) options. The only compulsory arguments are $id which must be a string that will identify debug coming from this script in mixed logs. Other options may be provided as below, + + Option Default Description + --------- --------- ----------- + level INFO The initial debug level which defines which statements are output and which are ignored + trace 0 Whether to use the Carp::shortmess format in debug statements to identify where the debug was emitted from + termLevel NOLOG At what level debug is written to terminal standard error, 0 is no, 1 is yes, 2 is write only if terminal + databaseLevel INFO At what level debug is written to the Log table in the database; + fileLevel NOLOG At what level debug is written to a log file of the format of .log in the standard log directory. + syslogLevel INFO At what level debug is written to syslog. + +To disable any of these action entirely set to NOLOG + +=item logTerm (); + +Used to end the debug session and close any logs etc. Not usually necessary. + +=item $id = logId ( [$id] ); + +=item $level = logLevel ( [$level] ); + +=item $trace = logTrace ( [$trace] ); + +=item $level = logLevel ( [$level] ); + +=item $termLevel = logTermLevel ( [$termLevel] ); + +=item $databaseLevel = logDatabaseLevel ( [$databaseLevel] ); + +=item $fileLevel = logFileLevel ( [$fileLevel] ); + +=item $syslogLevel = logSyslogLevel ( [$syslogLevel] ); + +These methods can be used to get and set the current settings as defined in logInit. + +=item Debug( $string ); + +This method will output a debug message if the current debug level permits it, otherwise does nothing. This message will be tagged with the DBG string in the logs. + +=item Info( $string ); + +This method will output an informational message if the current debug level permits it, otherwise does nothing. This message will be tagged with the INF string in the logs. + +=item Warning( $string ); + +This method will output a warning message if the current debug level permits it, otherwise does nothing. This message will be tagged with the WAR string in the logs. + +=item Error( $string ); + +This method will output an error message if the current debug level permits it, otherwise does nothing. This message will be tagged with the ERR string in the logs. + +=item Fatal( $string ); + +This method will output a fatal error message and then die if the current debug level permits it, otherwise does nothing. This message will be tagged with the FAT string in the logs. + +=item Panic( $string ); + +This method will output a panic error message and then die with a stack trace if the current debug level permits it, otherwise does nothing. This message will be tagged with the PNC string in the logs. + +=head2 EXPORT + +None by default. +The :constants tag will export the debug constants which define the various levels of debug +The :variables tag will export variables containing the current debug id and level +The :functions tag will export the debug functions. This or :all is what you would normally use. +The :all tag will export all above symbols. + + +=head1 SEE ALSO + +Carp +Sys::Syslog + +The ZoneMinder README file Troubleshooting section for an extended discussion on the use and configuration of syslog with ZoneMinder. + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Memory.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Memory.pm new file mode 100644 index 000000000..86037713d --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Memory.pm @@ -0,0 +1,873 @@ +# ========================================================================== +# +# ZoneMinder Memory Access Module, $Date: 2008-02-25 10:13:13 +0000 (Mon, 25 Feb 2008) $, $Revision: 2323 $ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::Memory; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'constants' => [ qw( + STATE_IDLE + STATE_PREALARM + STATE_ALARM + STATE_ALERT + STATE_TAPE + ACTION_GET + ACTION_SET + ACTION_RELOAD + ACTION_SUSPEND + ACTION_RESUME + TRIGGER_CANCEL + TRIGGER_ON + TRIGGER_OFF + ) ], + 'functions' => [ qw( + zmMemVerify + zmMemInvalidate + zmMemRead + zmMemWrite + zmMemTidy + zmGetMonitorState + zmGetAlarmLocation + zmIsAlarmed + zmInAlarm + zmHasAlarmed + zmGetLastEvent + zmGetLastWriteTime + zmGetLastReadTime + zmMonitorEnable + zmMonitorDisable + zmMonitorSuspend + zmMonitorResume + zmTriggerEventOn + zmTriggerEventOff + zmTriggerEventCancel + zmTriggerShowtext + ) ], +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Shared Memory Facilities +# +# ========================================================================== + +use ZoneMinder::Config qw(:all); +use ZoneMinder::Logger qw(:all); + +use constant STATE_IDLE => 0; +use constant STATE_PREALARM => 1; +use constant STATE_ALARM => 2; +use constant STATE_ALERT => 3; +use constant STATE_TAPE => 4; + +use constant ACTION_GET => 1; +use constant ACTION_SET => 2; +use constant ACTION_RELOAD => 4; +use constant ACTION_SUSPEND => 16; +use constant ACTION_RESUME => 32; + +use constant TRIGGER_CANCEL => 0; +use constant TRIGGER_ON => 1; +use constant TRIGGER_OFF => 2; + +use Storable qw( freeze thaw ); + +if ( "yes" eq 'yes' ) # 'yes' if memory is mmapped +{ + require ZoneMinder::Memory::Mapped; + ZoneMinder::Memory::Mapped->import(); +} +else +{ + require ZoneMinder::Memory::Shared; + ZoneMinder::Memory::Shared->import(); +} + +# Native architecture +our $arch = int(3.2*length(~0)); +our $native = $arch/8; +our $mem_seq = 0; + +our $mem_data = +{ + "shared_data" => { "type"=>"SharedData", "seq"=>$mem_seq++, "contents"=> { + "size" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_write_index" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_read_index" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "state" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_event" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "action" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "brightness" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "hue" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "colour" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "contrast" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "alarm_x" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "alarm_y" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "valid" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "active" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "signal" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "format" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "imagesize" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "epadding1" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "epadding2" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_write_time" => { "type"=>"time_t64", "seq"=>$mem_seq++ }, + "last_read_time" => { "type"=>"time_t64", "seq"=>$mem_seq++ }, + "control_state" => { "type"=>"uint8[256]", "seq"=>$mem_seq++ }, + } + }, + "trigger_data" => { "type"=>"TriggerData", "seq"=>$mem_seq++, "contents"=> { + "size" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "trigger_state" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "trigger_score" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "padding" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "trigger_cause" => { "type"=>"int8[32]", "seq"=>$mem_seq++ }, + "trigger_text" => { "type"=>"int8[256]", "seq"=>$mem_seq++ }, + "trigger_showtext" => { "type"=>"int8[256]", "seq"=>$mem_seq++ }, + } + }, + "end" => { "seq"=>$mem_seq++, "size"=> 0 } +}; + +our $mem_size = 0; +our $mem_verified = {}; + +sub zmMemInit +{ + my $offset = 0; + + foreach my $section_data ( sort { $a->{seq} <=> $b->{seq} } values( %$mem_data ) ) + { + $section_data->{offset} = $offset; + $section_data->{align} = 0; + + if ( $section_data->{align} > 1 ) + { + my $rem = $offset % $section_data->{align}; + if ( $rem > 0 ) + { + $offset += ($section_data->{align} - $rem); + } + } + foreach my $member_data ( sort { $a->{seq} <=> $b->{seq} } values( %{$section_data->{contents}} ) ) + { + if ( $member_data->{type} eq "long" || $member_data->{type} eq "ulong" || $member_data->{type} eq "size_t") + { + $member_data->{size} = $member_data->{align} = $native; + } + elsif( $member_data->{type} eq "int64" || $member_data->{type} eq "uint64" || $member_data->{type} eq "time_t64") + { + $member_data->{size} = $member_data->{align} = 8; + } + elsif ( $member_data->{type} eq "int32" || $member_data->{type} eq "uint32" || $member_data->{type} eq "bool4" ) + { + $member_data->{size} = $member_data->{align} = 4; + } + elsif ($member_data->{type} eq "int16" || $member_data->{type} eq "uint16") + { + $member_data->{size} = $member_data->{align} = 2; + } + elsif ( $member_data->{type} eq "int8" || $member_data->{type} eq "uint8" || $member_data->{type} eq "bool1" ) + { + $member_data->{size} = $member_data->{align} = 1; + } + elsif ( $member_data->{type} =~ /^u?int8\[(\d+)\]$/ ) + { + $member_data->{size} = $1; + $member_data->{align} = 1; + } + else + { + Fatal( "Unexpected type '".$member_data->{type}."' found in shared data definition." ); + } + + if ( $member_data->{align} > 1 && ($offset%$member_data->{align}) > 0 ) + { + $offset += ($member_data->{align} - ($offset%$member_data->{align})); + } + $member_data->{offset} = $offset; + $offset += $member_data->{size} + } + $section_data->{size} = $offset - $section_data->{offset}; + } + + $mem_size = $offset; +} + +&zmMemInit(); + +sub zmMemVerify( $ ) +{ + my $monitor = shift; + if ( !zmMemAttach( $monitor, $mem_size ) ) + { + return( undef ); + } + + my $mem_key = zmMemKey( $monitor ); + if ( !defined($mem_verified->{$mem_key}) ) + { + my $sd_size = zmMemRead( $monitor, "shared_data:size", 1 ); + if ( $sd_size != $mem_data->{shared_data}->{size} ) + { + if ( $sd_size ) + { + Error( "Shared data size conflict in shared_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{shared_data}->{size}.", got ".$sd_size ); + } + else + { + Debug( "Shared data size conflict in shared_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{shared_data}->{size}.", got ".$sd_size ); + } + return( undef ); + } + my $td_size = zmMemRead( $monitor, "trigger_data:size", 1 ); + if ( $td_size != $mem_data->{trigger_data}->{size} ) + { + if ( $td_size ) + { + Error( "Shared data size conflict in trigger_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{triggger_data}->{size}.", got ".$td_size ); + } + else + { + Debug( "Shared data size conflict in trigger_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{triggger_data}->{size}.", got ".$td_size ); + } + return( undef ); + } + $mem_verified->{$mem_key} = !undef; + } + return( !undef ); +} + +sub zmMemRead( $$;$ ) +{ + my $monitor = shift; + my $fields = shift; + my $nocheck = shift; + + if ( !($nocheck || zmMemVerify( $monitor )) ) + { + return( undef ); + } + + if ( !ref($fields) ) + { + $fields = [ $fields ]; + } + my @values; + foreach my $field ( @$fields ) + { + my ( $section, $element ) = split( /[\/:.]/, $field ); + Fatal( "Invalid shared data selector '$field'" ) if ( !$section || !$element ); + + my $offset = $mem_data->{$section}->{contents}->{$element}->{offset}; + my $type = $mem_data->{$section}->{contents}->{$element}->{type}; + my $size = $mem_data->{$section}->{contents}->{$element}->{size}; + + my $data = zmMemGet( $monitor, $offset, $size ); + if ( !defined($data) ) + { + Error( "Unable to read '$field' from memory for monitor ".$monitor->{Id} ); + zmMemInvalidate( $monitor ); + return( undef ); + } + my $value; + if ( $type eq "long" ) + { + ( $value ) = unpack( "l!", $data ); + } + elsif ( $type eq "ulong" || $type eq "size_t" ) + { + ( $value ) = unpack( "L!", $data ); + } + elsif ( $type eq "int64" || $type eq "time_t64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + ( $value ) = unpack( "l!", $data ); + } + elsif ( $type eq "uint64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + ( $value ) = unpack( "L!", $data ); + } + elsif ( $type eq "int32" ) + { + ( $value ) = unpack( "l", $data ); + } + elsif ( $type eq "uint32" || $type eq "bool4" ) + { + ( $value ) = unpack( "L", $data ); + } + elsif ( $type eq "int16" ) + { + ( $value ) = unpack( "s", $data ); + } + elsif ( $type eq "uint16" ) + { + ( $value ) = unpack( "S", $data ); + } + elsif ( $type eq "int8" ) + { + ( $value ) = unpack( "c", $data ); + } + elsif ( $type eq "uint8" || $type eq "bool1" ) + { + ( $value ) = unpack( "C", $data ); + } + elsif ( $type =~ /^int8\[\d+\]$/ ) + { + ( $value ) = unpack( "Z".$size, $data ); + } + elsif ( $type =~ /^uint8\[\d+\]$/ ) + { + ( $value ) = unpack( "C".$size, $data ); + } + else + { + Fatal( "Unexpected type '".$type."' found for '".$field."'" ); + } + push( @values, $value ); + } + if ( wantarray() ) + { + return( @values ) + } + return( $values[0] ); +} + +sub zmMemInvalidate( $ ) +{ + my $monitor = shift; + my $mem_key = zmMemKey($monitor); + if ( $mem_key ) + { + delete $mem_verified->{$mem_key}; + zmMemDetach( $monitor ); + } +} + +sub zmMemTidy() +{ + zmMemClean(); +} + +sub zmMemWrite( $$;$ ) +{ + my $monitor = shift; + my $field_values = shift; + my $nocheck = shift; + + if ( !($nocheck || zmMemVerify( $monitor )) ) + { + return( undef ); + } + + while ( my ( $field, $value ) = each( %$field_values ) ) + { + my ( $section, $element ) = split( /[\/:.]/, $field ); + Fatal( "Invalid shared data selector '$field'" ) if ( !$section || !$element ); + + my $offset = $mem_data->{$section}->{contents}->{$element}->{offset}; + my $type = $mem_data->{$section}->{contents}->{$element}->{type}; + my $size = $mem_data->{$section}->{contents}->{$element}->{size}; + + my $data; + if ( $type eq "long" ) + { + $data = pack( "l!", $value ); + } + elsif ( $type eq "ulong" || $type eq "size_t" ) + { + $data = pack( "L!", $value ); + } + elsif ( $type eq "int64" || $type eq "time_t64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + $data = pack( "l!", $value ); + } + elsif ( $type eq "uint64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + $data = pack( "L!", $value ); + } + elsif ( $type eq "int32" ) + { + $data = pack( "l", $value ); + } + elsif ( $type eq "uint32" || $type eq "bool4" ) + { + $data = pack( "L", $value ); + } + elsif ( $type eq "int16" ) + { + $data = pack( "s", $value ); + } + elsif ( $type eq "uint16" ) + { + $data = pack( "S", $value ); + } + elsif ( $type eq "int8" ) + { + $data = pack( "c", $value ); + } + elsif ( $type eq "uint8" || $type eq "bool1" ) + { + $data = pack( "C", $value ); + } + elsif ( $type =~ /^int8\[\d+\]$/ ) + { + $data = pack( "Z".$size, $value ); + } + elsif ( $type =~ /^uint8\[\d+\]$/ ) + { + $data = pack( "C".$size, $value ); + } + else + { + Fatal( "Unexpected type '".$type."' found for '".$field."'" ); + } + + if ( !zmMemPut( $monitor, $offset, $size, $data ) ) + { + Error( "Unable to write '$value' to '$field' in memory for monitor ".$monitor->{Id} ); + zmMemInvalidate( $monitor ); + return( undef ); + } + } + return( !undef ); +} + +sub zmGetMonitorState( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:state" ) ); +} + +sub zmGetAlarmLocation( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, [ "shared_data:alarm_x", "shared_data:alarm_y" ] ) ); +} + +sub zmSetControlState( $$ ) +{ + my $monitor = shift; + my $control_state = shift; + + zmMemWrite( $monitor, { "shared_data:control_state" => $control_state } ); +} + +sub zmGetControlState( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:control_state" ) ); +} + +sub zmSaveControlState( $$ ) +{ + my $monitor = shift; + my $control_state = shift; + + zmSetControlState( $monitor, freeze( $control_state ) ); +} + +sub zmRestoreControlState( $ ) +{ + my $monitor = shift; + + return( thaw( zmGetControlState( $monitor ) ) ); +} + +sub zmIsAlarmed( $ ) +{ + my $monitor = shift; + + my $state = zmGetMonitorState( $monitor ); + + return( $state == STATE_ALARM ); +} + +sub zmInAlarm( $ ) +{ + my $monitor = shift; + + my $state = zmGetMonitorState( $monitor ); + + return( $state == STATE_ALARM || $state == STATE_ALERT ); +} + +sub zmHasAlarmed( $$ ) +{ + my $monitor = shift; + my $last_event_id = shift; + + my ( $state, $last_event ) = zmMemRead( $monitor, [ "shared_data:state", "shared_data:last_event" ] ); + + if ( $state == STATE_ALARM || $state == STATE_ALERT ) + { + return( $last_event ); + } + elsif( $last_event != $last_event_id ) + { + return( $last_event ); + } + return( undef ); +} + +sub zmGetLastEvent( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:last_event" ) ); +} + +sub zmGetLastWriteTime( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:last_write_time" ) ); +} + +sub zmGetLastReadTime( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:last_read_time" ) ); +} + +sub zmGetMonitorActions( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:action" ) ); +} + +sub zmMonitorEnable( $ ) +{ + my $monitor = shift; + + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_SUSPEND; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); +} + +sub zmMonitorDisable( $ ) +{ + my $monitor = shift; + + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_RESUME; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); +} + +sub zmMonitorSuspend( $ ) +{ + my $monitor = shift; + + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_SUSPEND; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); +} + +sub zmMonitorResume( $ ) +{ + my $monitor = shift; + + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_RESUME; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); +} + +sub zmGetTriggerState( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "trigger_data:trigger_state" ) ); +} + +sub zmTriggerEventOn( $$$;$$ ) +{ + my $monitor = shift; + my $score = shift; + my $cause = shift; + my $text = shift; + my $showtext = shift; + + my $values = { + "trigger_data:trigger_score" => $score, + "trigger_data:trigger_cause" => $cause, + }; + $values->{"trigger_data:trigger_text"} = $text if ( defined($text) ); + $values->{"trigger_data:trigger_showtext"} = $showtext if ( defined($showtext) ); + $values->{"trigger_data:trigger_state"} = TRIGGER_ON; # Write state last so event not read incomplete + + zmMemWrite( $monitor, $values ); +} + +sub zmTriggerEventOff( $ ) +{ + my $monitor = shift; + + my $values = { + "trigger_data:trigger_state" => TRIGGER_OFF, + "trigger_data:trigger_score" => 0, + "trigger_data:trigger_cause" => "", + "trigger_data:trigger_text" => "", + "trigger_data:trigger_showtext" => "", + }; + + zmMemWrite( $monitor, $values ); +} + +sub zmTriggerEventCancel( $ ) +{ + my $monitor = shift; + + my $values = { + "trigger_data:trigger_state" => TRIGGER_CANCEL, + "trigger_data:trigger_score" => 0, + "trigger_data:trigger_cause" => "", + "trigger_data:trigger_text" => "", + "trigger_data:trigger_showtext" => "", + }; + + zmMemWrite( $monitor, $values ); +} + +sub zmTriggerShowtext( $$ ) +{ + my $monitor = shift; + my $showtext = shift; + + my $values = { + "trigger_data:trigger_showtext" => $showtext, + }; + + zmMemWrite( $monitor, $values ); +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::MappedMem - ZoneMinder Mapped Memory access module + +=head1 SYNOPSIS + + use ZoneMinder::MappedMem; + use ZoneMinder::MappedMem qw(:all); + + if ( zmMemVerify( $monitor ) ) + { + $state = zmGetMonitorState( $monitor ); + if ( $state == STATE_ALARM ) + { + ... + } + } + + ( $lri, $lwi ) = zmMemRead( $monitor, [ "shared_data:last_read_index", "shared_data:last_write_index" ] ); + zmMemWrite( $monitor, { "trigger_data:trigger_showtext" => "Some Text" } ); + +=head1 DESCRIPTION + +The ZoneMinder:MappedMem module contains methods for accessing and writing to mapped memory as well as helper methods for common operations. + +The core elements of ZoneMinder used mapped memory to allow multiple access to resources. Although ZoneMinder scripts have used this information before, up until now it was difficult to access and prone to errors. This module introduces a common API for mapped memory access (both reading and writing) making it a lot easier to customise scripts or even create your own. + +All the methods listed below require a 'monitor' parameter. This must be a reference to a hash with at least the 'Id' field set to the monitor id of the mapped memory you wish to access. Using database methods to select the monitor details will also return this kind of data. Some of the mapped memory methods will add and amend new fields to this hash. + +=over 4 + +=head1 METHODS + +=item zmMemVerify ( $monitor ); + +Verify that the mapped memory of the monitor given exists and is valid. It will return an undefined value if it is not valid. You should generally call this method first before using any of the other methods, but most of the remaining methods will also do so if the memory has not already been verified. + +=item zmMemInvalidate ( $monitor ); + +Following an error, reset the mapped memory ids and attempt to reverify on the next operation. This is mostly used when a mapped memory segment has gone away and been recreated with a different id. + +=item zmMemRead ( $monitor, $readspec ); + +This method is used to read data from mapped memory attached to the given monitor. The mapped memory will be verified if it has not already been. The 'readspec' must either be a string of the form "
:" or a reference to an array of strings of the same format. In the first case a single value is returned, in the latter case a list of values is return. Errors will cause undefined to be returned. The allowable sections and field names are described below. + +=item zmMemWrite ( $monitor, $writespec ); + +This method is used to write data to mapped memory attached to the given monitor. The mapped memory will be verified if it has not already been. The 'writespec' must be a reference to a hash with keys of the form "
:" and values as the data to be written. Errors will cause undefined to be returned, otherwise a non-undefined value will be returned. The allowable sections and field names are described below. + +=item $state = zmGetMonitorState ( $monitor ); + +Return the current state of the given monitor. This is an integer value and can be compared with the STATE constants given below. + +=item $event_id = zmGetLastEvent ( $monitor ); + +Return the event id of the last event that the monitor generated, or 0 if no event has been generated by the current monitor process. + +=item zmIsAlarmed ( $monitor ); + +Return 1 if the monitor given is currently in an alarm state, 0 otherwise. + +=item zmInAlarm ( $monitor ); + +Return 1 if the monitor given is currently in an alarm or alerted state, 0 otherwise. + +=item zmHasAlarmed ( $monitor ); + +Return 1 if the given monitor is in an alarm state, or has been in an alarm state since the last call to this method. + +=item ( $x, $y ) = zmGetAlarmLocation ( $monitor ); + +Return an x,y pair indicating the image co-ordinates of the centre of the last motion event generated by the given monitor. If no event has been generated by the current monitor process, or the alarm was not motion related, returns -1,-1. + +=item zmGetLastWriteTime ( $monitor ); + +Returns the time (in utc seconds) since the last image was captured by the given monitor and written to shared memory, or 0 otherwise. + +=item zmGetLastReadTime ( $monitor ); + +Returns the time (in utc seconds) since the last image was read from shared memory by the analysis daemon of the given monitor, or 0 otherwise or if the monitor is in monitor only mode. + +=item zmMonitorSuspend ( $monitor ); + +Suspend the given monitor from generating events caused by motion. This method can be used to prevent camera actions such as panning or zooming from causing events. If configured to do so, the monitor may automatically resume after a defined period. + +=item zmMonitorResume ( $monitor ); + +Allow the given monitor to resume generating events caused by motion. + +=item zmTriggerEventOn ( $monitor, $score, $cause [, $text, $showtext ] ); + +Trigger the given monitor to generate an event. You must supply an event score and a cause string indicating the reason for the event. You may also supply a text string containing further details about the event and a showtext string which may be included in the timestamp annotation on any images captured during the event, if configured to do so. + +=item zmTriggerEventOff ( $monitor ); + +Trigger the given monitor to not generate any events. This method does not cancel zmTriggerEventOn, but is exclusive to it. This method is intended to allow external triggers to prevent normal events being generated by monitors in the same way as zmMonitorSuspend but applies to all events and not just motion, and is intended for longer timescales than are appropriate for suspension. + +=item zmTriggerEventCancel ( $monitor ); + +Cancel any previous trigger on or off requests. This stops a triggered alarm if it exists from a previous 'on' and allows events to be generated once more following a previous 'off'. + +=item zmTriggerShowtext ( $monitor, $showtest ); + +Indicate that the given text should be displayed in the timestamp annotation on any images captured, if the format of the annotation string defined for the monitor permits. + +=head1 DATA + +The data fields in mapped memory that may be accessed are as follows. There are two main sections, shared_data which is general data and trigger_data which is used for event triggering. Whilst reading from these fields is harmless, extreme care must be taken when writing to mapped memory, especially in the shared_data section as this is normally written to only by monitor capture and analysis processes. + + shared_data The general mapped memory section + size The size, in bytes, of this section + valid Flag indicating whether this section has been initialised + active Flag indicating whether this monitor is active (enabled/disabled) + signal Flag indicating whether this monitor is reciving a valid signal + state The current monitor state, see the STATE constants below + last_write_index The last index, in the image buffer, that an image has been saved to + last_read_index The last index, in the image buffer, that an image has been analysed from + last_write_time The time (in utc seconds) when the last image was captured + last_read_time The time (in utc seconds) when the last image was analysed + last_event The id of the last event generated by the monitor analysis process, 0 if none + action The monitor actions bitmask, see the ACTION constants below + brightness Read/write location for the current monitor brightness + hue Read/write location for the current monitor hue + colour Read/write location for the current monitor colour + contrast Read/write location for the current monitor contrast + alarm_x Image x co-ordinate (from left) of the centre of the last motion event, -1 if none + alarm_y Image y co-ordinate (from top) of the centre of the last motion event, -1 if none + + trigger_data The triggered event mapped memory section + size The size, in bytes of this section + trigger_state The current trigger state, see the TRIGGER constants below + trigger_score The current triggered event score + trigger_cause The current triggered event cause string + trigger_text The current triggered event descriptive text string + trigger_showtext The triggered text that will be displayed on captured image timestamps + +=head1 CONSTANTS + +The following constants are used by the methods above, but can also be used by user scripts if required. + +=item STATE_IDLE STATE_PREALARM STATE_ALARM STATE_ALERT STATE_TAPE + +These constants define the state of the monitor with respect to alarms and events. They are used in the shared_data:state field. + +=item ACTION_GET ACTION_SET ACTION_RELOAD ACTION_SUSPEND ACTION_RESUME + +These constants defines the various values that can exist in the shared_data:action field. This is a bitmask which when non-zero defines an action that an executing monitor process should take. ACTION_GET requires that the current values of brightness, contrast, colour and hue are taken from the camera and written to the equivalent mapped memory fields. ACTION_SET implies the reverse, that the values in mapped memory should be written to the camera. ACTION_RELOAD signal that the monitor process should reload itself from the database in case any settings have changed there. ACTION_SUSPEND signals that a monitor should stop exaiming images for motion, though other alarms may still occur. ACTION_RESUME sigansl that a monitor should resume motion detectiom. + +=item TRIGGER_CANCEL TRIGGER_ON TRIGGER_OFF + +These constants are used in the definition of external triggers. TRIGGER_CANCEL is used to indicated that any previous trigger settings should be cancelled, TRIGGER_ON signals that an alarm should be created (or continued)) as a result of the current trigger and TRIGGER_OFF signals that the trigger should prevent any alarms from being generated. See the trigger methods above for further details. + +=head1 EXPORT + +None by default. +The :constants tag will export the mapped memory constants which mostly define enumerations for the variables held in memory +The :functions tag will export the mapped memory access functions. +The :all tag will export all above symbols. + + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Memory/Mapped.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Memory/Mapped.pm new file mode 100644 index 000000000..b8745d835 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Memory/Mapped.pm @@ -0,0 +1,169 @@ +# ========================================================================== +# +# ZoneMinder Mapped Memory Access Module, $Date: 2008-02-25 10:13:13 +0000 (Mon, 25 Feb 2008) $, $Revision: 2323 $ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the definitions and functions used when accessing mapped memory +# +package ZoneMinder::Memory::Mapped; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'functions' => [ qw( + zmMemKey + zmMemAttach + zmMemDetach + zmMemGet + zmMemPut + zmMemClean + ) ], +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = @EXPORT_OK; + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Mapped Memory Facilities +# +# ========================================================================== + +use ZoneMinder::Config qw(:all); +use ZoneMinder::Logger qw(:all); + +use Sys::Mmap; + +sub zmMemKey( $ ) +{ + my $monitor = shift; + return( defined($monitor->{MMapAddr})?$monitor->{MMapAddr}:undef ); +} + +sub zmMemAttach( $$ ) +{ + my $monitor = shift; + my $size = shift; + if ( !defined($monitor->{MMapAddr}) ) + { + my $mmap_file = ZM_PATH_MAP."/zm.mmap.".$monitor->{Id}; + if ( !open( MMAP, "+<".$mmap_file ) ) + { + Error( sprintf( "Can't open memory map file '%s': $!\n", $mmap_file ) ); + return( undef ); + } + my $mmap = undef; + my $mmap_addr = mmap( $mmap, $size, PROT_READ|PROT_WRITE, MAP_SHARED, \*MMAP ); + if ( !$mmap_addr || !$mmap ) + { + Error( sprintf( "Can't mmap to file '%s': $!\n", $mmap_file ) ); + return( undef ); + } + $monitor->{MMapHandle} = \*MMAP; + $monitor->{MMapAddr} = $mmap_addr; + $monitor->{MMap} = \$mmap; + } + return( !undef ); +} + +sub zmMemDetach( $ ) +{ + my $monitor = shift; + + if ( $monitor->{MMap} ) + { + munmap( ${$monitor->{MMap}} ); + delete $monitor->{MMap}; + } + if ( $monitor->{MMapAddr} ) + { + delete $monitor->{MMapAddr}; + } + if ( $monitor->{MMapHandle} ) + { + close( $monitor->{MMapHandle} ); + delete $monitor->{MMapHandle}; + } +} + +sub zmMemGet( $$$ ) +{ + my $monitor = shift; + my $offset = shift; + my $size = shift; + + my $mmap = $monitor->{MMap}; + if ( !$mmap || !$$mmap ) + { + Error( sprintf( "Can't read from mapped memory for monitor '%d', gone away?", $monitor->{Id} ) ); + return( undef ); + } + my $data = substr( $$mmap, $offset, $size ); + return( $data ); +} + +sub zmMemPut( $$$$ ) +{ + my $monitor = shift; + my $offset = shift; + my $size = shift; + my $data = shift; + + my $mmap = $monitor->{MMap}; + if ( !$mmap || !$$mmap ) + { + Error( sprintf( "Can't write mapped memory for monitor '%d', gone away?", $monitor->{Id} ) ); + return( undef ); + } + substr( $$mmap, $offset, $size ) = $data; + return( !undef ); +} + +sub zmMemClean +{ + Debug( "Removing memory map files\n" ); + my $mapPath = ZM_PATH_MAP."/zm.mmap.*"; + foreach my $mapFile( glob( $mapPath ) ) + { + ( $mapFile ) = $mapFile =~ /^(.+)$/; + Debug( "Removing memory map file '$mapFile'\n" ); + unlink( $mapFile ); + } +} + +1; +__END__ diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Memory/Shared.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Memory/Shared.pm new file mode 100644 index 000000000..c04e4f413 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Memory/Shared.pm @@ -0,0 +1,161 @@ +# ========================================================================== +# +# ZoneMinder Shared Memory Access Module, $Date: 2007-08-29 19:11:09 +0100 (Wed, 29 Aug 2007) $, $Revision: 2175 $ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::Memory::Shared; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'functions' => [ qw( + zmMemKey + zmMemAttach + zmMemDetach + zmMemGet + zmMemPut + zmMemClean + ) ], +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = @EXPORT_OK; + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Shared Memory Facilities +# +# ========================================================================== + +use ZoneMinder::Config qw(:all); +use ZoneMinder::Logger qw(:all); + +sub zmMemKey( $ ) +{ + my $monitor = shift; + return( defined($monitor->{ShmKey})?$monitor->{ShmKey}:undef ); +} + +sub zmMemAttach( $$ ) +{ + my $monitor = shift; + my $size = shift; + if ( !defined($monitor->{ShmId}) ) + { + my $shm_key = (hex(ZM_SHM_KEY)&0xffff0000)|$monitor->{Id}; + my $shm_id = shmget( $shm_key, $size, 0 ); + if ( !defined($shm_id) ) + { + Error( sprintf( "Can't get shared memory id '%x', %d: $!\n", $shm_key, $monitor->{Id} ) ); + return( undef ); + } + $monitor->{ShmKey} = $shm_key; + $monitor->{ShmId} = $shm_id; + } + return( !undef ); +} + +sub zmMemDetach( $ ) +{ + my $monitor = shift; + + delete $monitor->{ShmId}; +} + +sub zmMemGet( $$$ ) +{ + my $monitor = shift; + my $offset = shift; + my $size = shift; + + my $shm_key = $monitor->{ShmKey}; + my $shm_id = $monitor->{ShmId}; + + my $data; + if ( !shmread( $shm_id, $data, $offset, $size ) ) + { + Error( sprintf( "Can't read from shared memory '%x/%d': $!", $shm_key, $shm_id ) ); + return( undef ); + } + return( $data ); +} + +sub zmMemPut( $$$$ ) +{ + my $monitor = shift; + my $offset = shift; + my $size = shift; + my $data = shift; + + my $shm_key = $monitor->{ShmKey}; + my $shm_id = $monitor->{ShmId}; + + if ( !shmwrite( $shm_id, $data, $offset, $size ) ) + { + Error( sprintf( "Can't write to shared memory '%x/%d': $!", $shm_key, $shm_id ) ); + return( undef ); + } + return( !undef ); +} + +sub zmMemClean +{ + Debug( "Removing shared memory\n" ); + # Find ZoneMinder shared memory + my $command = "ipcs -m | grep '^".substr( sprintf( "0x%x", hex(ZM_SHM_KEY) ), 0, -2 )."'"; + Debug( "Checking for shared memory with '$command'\n" ); + open( CMD, "$command |" ) or Fatal( "Can't execute '$command': $!" ); + while( ) + { + chomp; + my ( $key, $id ) = split( /\s+/ ); + if ( $id =~ /^(\d+)/ ) + { + $id = $1; + $command = "ipcrm shm $id"; + Debug( "Removing shared memory with '$command'\n" ); + qx( $command ); + } + } + close( CMD ); +} + +1; +__END__ diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel.pm new file mode 100644 index 000000000..0344e6d94 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel.pm @@ -0,0 +1,166 @@ +# ========================================================================== +# +# ZoneMinder Trigger Channel Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the base class definition of the trigger channel +# class tree +# +package ZoneMinder::Trigger::Channel; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Database Access +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); + +use Carp; + +our $AUTOLOAD; + +sub new +{ + my $class = shift; + my $self = {}; + $self->{readable} = !undef; + $self->{writeable} = !undef; + $self->{selectable} = undef; + $self->{state} = 'closed'; + bless( $self, $class ); + return $self; +} + +sub clone +{ + my $self = shift; + my $clone = { %$self }; + bless $clone, ref $self; +} + +sub open() +{ + my $self = shift; + my $class = ref($self) or croak( "Can't get class for non object $self" ); + croak( "Abstract base class method called for object of class $class" ); +} + +sub close() +{ + my $self = shift; + my $class = ref($self) or croak( "Can't get class for non object $self" ); + croak( "Abstract base class method called for object of class $class" ); +} + +sub getState() +{ + my $self = shift; + return( $self->{state} ); +} + +sub isOpen() +{ + my $self = shift; + return( $self->{state} eq "open" ); +} + +sub isConnected() +{ + my $self = shift; + return( $self->{state} eq "connected" ); +} + +sub DESTROY +{ +} + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( !exists($self->{$name}) ) + { + croak( "Can't access $name member of object of class $class" ); + } + return( $self->{$name} ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/File.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/File.pm new file mode 100644 index 000000000..234dae3d7 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/File.pm @@ -0,0 +1,121 @@ +# ========================================================================== +# +# ZoneMinder Trigger Channel Handle Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the class definition of the simple file based trigger +# channel class +# +package ZoneMinder::Trigger::Channel::File; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Trigger::Channel::Handle; + +our @ISA = qw(ZoneMinder::Trigger::Channel::Handle); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Simple file based trigger channel +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); + +use Carp; +use Fcntl; + +sub new +{ + my $class = shift; + my %params = @_; + my $self = ZoneMinder::Trigger::Channel::Handle->new; + $self->{path} = $params{path}; + bless( $self, $class ); + return $self; +} + +sub open() +{ + my $self = shift; + local *sfh; + #sysopen( *sfh, $conn->{path}, O_NONBLOCK|O_RDONLY ) or croak( "Can't sysopen: $!" ); + #open( *sfh, "<".$conn->{path} ) or croak( "Can't open: $!" ); + open( *sfh, "+<".$self->{path} ) or croak( "Can't open: $!" ); + $self->{state} = 'open'; + $self->{handle} = *sfh; +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Handle.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Handle.pm new file mode 100644 index 000000000..356bb5aea --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Handle.pm @@ -0,0 +1,154 @@ +# ========================================================================== +# +# ZoneMinder Trigger Channel Handle Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the class definition of the handle based trigger channel +# class +# +package ZoneMinder::Trigger::Channel::Handle; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Trigger::Channel; + +our @ISA = qw(ZoneMinder::Trigger::Channel); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Base class for handle based trigger channels +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); +use POSIX; + +sub new +{ + my $class = shift; + my $port = shift; + my $self = ZoneMinder::Trigger::Channel->new(); + $self->{handle} = undef; + bless( $self, $class ); + return $self; +} + +sub spawns +{ + return( undef ); +} + +sub close() +{ + my $self = shift; + close( $self->{handle} ); + $self->{state} = 'closed'; + $self->{handle} = undef; +} + +sub read() +{ + my $self = shift; + my $buffer; + my $nbytes = sysread( $self->{handle}, $buffer, POSIX::BUFSIZ ); + if ( !$nbytes ) + { + return( undef ); + } + Debug( "Read '$buffer' ($nbytes bytes)\n" ); + return( $buffer ); +} + +sub write() +{ + my $self = shift; + my $buffer = shift; + my $nbytes = syswrite( $self->{handle}, $buffer ); + if ( !defined( $nbytes) || $nbytes < length($buffer) ) + { + Error( "Unable to write buffer '".$buffer.", expected ".length($buffer)." bytes, sent ".$nbytes.": $!\n" ); + return( undef ); + } + Debug( "Wrote '$buffer' ($nbytes bytes)\n" ); + return( !undef ); +} + +sub fileno() +{ + my $self = shift; + return( defined($self->{handle})?fileno($self->{handle}):-1 ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Inet.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Inet.pm new file mode 100644 index 000000000..68df0980f --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Inet.pm @@ -0,0 +1,142 @@ +# ========================================================================== +# +# ZoneMinder Trigger Channel Handle Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the class definition of the tcp socket based trigger +# channel class +# +package ZoneMinder::Trigger::Channel::Inet; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Trigger::Channel::Spawning; + +our @ISA = qw(ZoneMinder::Trigger::Channel::Spawning); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Internet (TCP) based trigger channel +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); + +use Carp; +use Socket; + +sub new +{ + my $class = shift; + my %params = @_; + my $self = ZoneMinder::Trigger::Channel::Spawning->new(); + $self->{selectable} = !undef; + $self->{port} = $params{port}; + bless( $self, $class ); + return $self; +} + +sub open() +{ + my $self = shift; + local *sfh; + my $saddr = sockaddr_in( $self->{port}, INADDR_ANY ); + socket( *sfh, PF_INET, SOCK_STREAM, getprotobyname('tcp') ) or croak( "Can't open socket: $!" ); + setsockopt( *sfh, SOL_SOCKET, SO_REUSEADDR, 1 ); + bind( *sfh, $saddr ) or croak( "Can't bind: $!" ); + listen( *sfh, SOMAXCONN ) or croak( "Can't listen: $!" ); + $self->{state} = 'open'; + $self->{handle} = *sfh; +} + +sub _spawn( $ ) +{ + my $self = shift; + my $new_handle = shift; + my $clone = $self->clone(); + $clone->{handle} = $new_handle; + $clone->{state} = 'connected'; + return( $clone ); +} + +sub accept() +{ + my $self = shift; + local *cfh; + my $paddr = accept( *cfh, $self->{handle} ); + return( $self->_spawn( *cfh ) ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Serial.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Serial.pm new file mode 100644 index 000000000..7e4ad4730 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Serial.pm @@ -0,0 +1,160 @@ +# ========================================================================== +# +# ZoneMinder Trigger Channel Handle Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the class definition of the serial port trigger channel +# class +# +package ZoneMinder::Trigger::Channel::Serial; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Trigger::Channel; + +our @ISA = qw(ZoneMinder::Trigger::Channel); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Serial access trigger channel +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); +use Device::SerialPort; + +sub new +{ + my $class = shift; + my %params = @_; + my $self = ZoneMinder::Trigger::Channel->new; + $self->{path} = $params{path}; + bless( $self, $class ); + return $self; +} + +sub open() +{ + my $self = shift; + my $device = new Device::SerialPort( $self->{path} ); + $device->baudrate(9600); + $device->databits(8); + $device->parity('none'); + $device->stopbits(1); + $device->handshake('none'); + + $device->read_const_time(50); + $device->read_char_time(10); + + $self->{device} = $device; + $self->{state} = 'open'; + $self->{state} = 'connected'; +} + +sub close() +{ + my $self = shift; + $self->{device}->close(); + $self->{state} = 'closed'; +} + +sub read() +{ + my $self = shift; + my $buffer = $self->{device}->lookfor(); + if ( !$buffer || !length($buffer) ) + { + return( undef ); + } + Debug( "Read '$buffer' (".length($buffer)." bytes)\n" ); + return( $buffer ); +} + +sub write() +{ + my $self = shift; + my $buffer = shift; + my $nbytes = $self->{device}->write( $buffer ); + $self->{device}->write_drain(); + if ( !defined( $nbytes) || $nbytes < length($buffer) ) + { + Error( "Unable to write buffer '".$buffer.", expected ".length($buffer)." bytes, sent ".$nbytes.": $!\n" ); + return( undef ); + } + Debug( "Wrote '$buffer' ($nbytes bytes)\n" ); + return( !undef ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Spawning.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Spawning.pm new file mode 100644 index 000000000..ff726ac38 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Spawning.pm @@ -0,0 +1,112 @@ +# ========================================================================== +# +# ZoneMinder Trigger Channel Handle Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the class definition of the handle based trigger channel +# classes that spawn new connections when connected. +# +package ZoneMinder::Trigger::Channel::Spawning; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Trigger::Channel::Handle; + +our @ISA = qw(ZoneMinder::Trigger::Channel::Handle); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Base class for handle based triggers that spawn new connections +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); + +sub new +{ + my $class = shift; + my $port = shift; + my $self = ZoneMinder::Trigger::Channel::Handle->new(); + $self->{spawns} = !undef; + bless( $self, $class ); + return $self; +} + +sub spawns +{ + return( !undef ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Unix.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Unix.pm new file mode 100644 index 000000000..a671ccd66 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Channel/Unix.pm @@ -0,0 +1,141 @@ +# ========================================================================== +# +# ZoneMinder Trigger Channel Handle Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the class definition of the unix socket based trigger +# channel class +# +package ZoneMinder::Trigger::Channel::Unix; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Trigger::Channel::Spawning; + +our @ISA = qw(ZoneMinder::Trigger::Channel::Spawning); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Unix socket based trigger channel +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); + +use Carp; +use Socket; + +sub new +{ + my $class = shift; + my %params = @_; + my $self = ZoneMinder::Trigger::Channel->new; + $self->{selectable} = !undef; + $self->{path} = $params{path}; + bless( $self, $class ); + return $self; +} + +sub open() +{ + my $self = shift; + local *sfh; + unlink( $self->{path} ); + my $saddr = sockaddr_un( $self->{path} ); + socket( *sfh, PF_UNIX, SOCK_STREAM, 0 ) or croak( "Can't open socket: $!" ); + bind( *sfh, $saddr ) or croak( "Can't bind: $!" ); + listen( *sfh, SOMAXCONN ) or croak( "Can't listen: $!" ); + $self->{handle} = *sfh; +} + +sub _spawn( $ ) +{ + my $self = shift; + my $new_handle = shift; + my $clone = $self->clone(); + $clone->{handle} = $new_handle; + $clone->{state} = 'connected'; + return( $clone ); +} + +sub accept() +{ + my $self = shift; + local *cfh; + my $paddr = accept( *cfh, $self->{handle} ); + return( $self->_spawn( *cfh ) ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Connection.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Connection.pm new file mode 100644 index 000000000..41b332d46 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Connection.pm @@ -0,0 +1,239 @@ +# ========================================================================== +# +# ZoneMinder Trigger Connection Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the base class definition of the trigger connection +# class tree +# +package ZoneMinder::Trigger::Connection; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Base connection class +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); + +use Carp; + +our $AUTOLOAD; + +sub new +{ + my $class = shift; + my %params = @_; + my $self = {}; + $self->{name} = $params{name}; + $self->{channel} = $params{channel}; + $self->{input} = $params{mode} =~ /r/i; + $self->{output} = $params{mode} =~ /w/i; + bless( $self, $class ); + return $self; +} + +sub clone +{ + my $self = shift; + my $clone = { %$self }; + bless $clone, ref $self; + return( $clone ); +} + +sub spawns +{ + my $self = shift; + return( $self->{channel}->spawns() ); +} + +sub _spawn( $ ) +{ + my $self = shift; + my $new_channel = shift; + my $clone = $self->clone(); + $clone->{channel} = $new_channel; + return( $clone ); +} + +sub accept() +{ + my $self = shift; + my $new_channel = $self->{channel}->accept(); + return( $self->_spawn( $new_channel ) ); +} + +sub open() +{ + my $self = shift; + return( $self->{channel}->open() ); +} + +sub close() +{ + my $self = shift; + return( $self->{channel}->close() ); +} + +sub fileno() +{ + my $self = shift; + return( $self->{channel}->fileno() ); +} + +sub isOpen() +{ + my $self = shift; + return( $self->{channel}->isOpen() ); +} + +sub isConnected() +{ + my $self = shift; + return( $self->{channel}->isConnected() ); +} + +sub canRead() +{ + my $self = shift; + return( $self->{input} && $self->isConnected() ); +} + +sub canWrite() +{ + my $self = shift; + return( $self->{output} && $self->isConnected() ); +} + +sub getMessages +{ + my $self = shift; + my $buffer = $self->{channel}->read(); + + return( undef ) if ( !defined($buffer) ); + + my @messages = split( /\r?\n/, $buffer ); + return( \@messages ); +} + +sub putMessages +{ + my $self = shift; + my $messages = shift; + + if ( @$messages ) + { + my $buffer = join( "\n", @$messages ); + $buffer .= "\n"; + if ( !$self->{channel}->write( $buffer ) ) + { + Error( "Unable to write buffer '".$buffer." to connection ".$self->{name}." (".$self->fileno().")\n" ); + } + } + return( undef ); +} + +sub timedActions +{ +} + +sub DESTROY +{ +} + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( exists($self->{$name}) ) + { + return( $self->{$name} ); + } + elsif ( defined($self->{channel}) ) + { + if ( exists($self->{channel}->{$name}) ) + { + return( $self->{channel}->{$name} ); + } + } + croak( "Can't access $name member of object of class $class" ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Connection/Example.pm b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Connection/Example.pm new file mode 100644 index 000000000..3bed2b351 --- /dev/null +++ b/scripts/ZoneMinder/blib/lib/ZoneMinder/Trigger/Connection/Example.pm @@ -0,0 +1,134 @@ +# ========================================================================== +# +# ZoneMinder Trigger Channel Handle Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains an example overriden trigger connection class +# +package ZoneMinder::Trigger::Connection::Example; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Trigger::Connection; + +our @ISA = qw(ZoneMinder::Trigger::Connection); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Example overridden connection class +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); + +sub new +{ + my $class = shift; + my $path = shift; + my $self = ZoneMinder::Trigger::Connection->new( @_ ); + bless( $self, $class ); + return $self; +} + +sub getMessages +{ + my $self = shift; + my $buffer = $self->{channel}->read(); + + return( undef ) if ( !defined($buffer) ); + + Debug( "Handling buffer '$buffer'\n" ); + my @messages = grep { s/-/|/g; 1; } split( /\r?\n/, $buffer ); + return( \@messages ); +} + +sub putMessages +{ + my $self = shift; + my $messages = shift; + + if ( @$messages ) + { + my $buffer = join( "\n", grep{ s/\|/-/; 1; } @$messages ); + $buffer .= "\n"; + if ( !$self->{channel}->write( $buffer ) ) + { + Error( "Unable to write buffer '".$buffer." to connection ".$self->{name}." (".$self->fileno().")\n" ); + } + } + return( undef ); +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 NAME + +ZoneMinder::Database - Perl extension for blah blah blah + +=head1 SYNOPSIS + + use ZoneMinder::Database; + blah blah blah + +=head1 DESCRIPTION + +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. + +Blah blah blah. + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in UNIX), or any relevant external documentation such as RFCs or +standards. + +If you have a mailing list set up for your module, mention it here. + +If you have a web site set up for your module, mention it here. + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/blib/lib/auto/ZoneMinder/.exists b/scripts/ZoneMinder/blib/lib/auto/ZoneMinder/.exists new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/ZoneMinder/blib/man1/.exists b/scripts/ZoneMinder/blib/man1/.exists new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/ZoneMinder/blib/man3/.exists b/scripts/ZoneMinder/blib/man3/.exists new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder.3pm new file mode 100644 index 000000000..166dbf786 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder.3pm @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder 3pm" +.TH ZoneMinder 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder \- Container module for common ZoneMinder modules +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& use ZoneMinder; +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This module is a convenience container module that uses the +ZoneMinder::Base, ZoneMinder::Common, ZoneMinder::Logger, +ZoneMinder::Database and ZoneMinder::Memory modules. It also +exports by default all symbols provided by the 'all' tag of +each of the modules. +.PP +Thus 'use'ing this module is equivalent to the following +.PP +.Vb 5 +\& use ZoneMinder::Base qw(:all); +\& use ZoneMinder::Config qw(:all); +\& use ZoneMinder::Logger qw(:all); +\& use ZoneMinder::Database qw(:all); +\& use ZoneMinder::Memory qw(:all); +.Ve +.PP +but is somewhat easier. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +All symbols exported by the 'all' tag of each of the included +modules. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +ZoneMinder::Base, ZoneMinder::Common, ZoneMinder::Logger, +ZoneMinder::Database, ZoneMinder::Memory +.PP +http://www.zoneminder.com +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2005 by Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Base.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Base.3pm new file mode 100644 index 000000000..060aca327 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Base.3pm @@ -0,0 +1,157 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Base 3pm" +.TH ZoneMinder::Base 3pm "2012-09-11" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Base \- Base perl module for ZoneMinder +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& use ZoneMinder::Base; +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This module is the base module for the rest of the ZoneMinder modules. It is included by each of the other modules but serves no purpose other than to propagate the perl module version amongst the other modules. You will never need to use this module directly but if you write new ZoneMinder modules they should include it. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +http://www.zoneminder.com +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Config.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Config.3pm new file mode 100644 index 000000000..cafbc873f --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Config.3pm @@ -0,0 +1,166 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Config 3pm" +.TH ZoneMinder::Config 3pm "2012-09-11" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Config \- ZoneMinder configuration module. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 1 +\& use ZoneMinder::Config qw(:all); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The ZoneMinder::Config module is used to import the ZoneMinder configuration from the database. It will do this at compile time in a \s-1BEGIN\s0 block and require access to the zm.conf file either in the current directory or in its defined location in order to determine database access details, configuration from this file will also be included. If the :all or :config tags are used then this configuration is exported into the namespace of the calling program or module. +.PP +Once the configuration has been imported then configuration variables are defined as constants and can be accessed directory by name, e.g. +.PP +.Vb 1 +\& $lang = ZM_LANG_DEFAULT; +.Ve +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +The :constants tag will export the \s-1ZM_PID\s0 constant which details the location of the zm.pid file +The :config tag will export all configuration from the database as well as any from the zm.conf file +The :all tag will export all above symbols. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +http://www.zoneminder.com +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::ConfigAdmin.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::ConfigAdmin.3pm new file mode 100644 index 000000000..9a29077ac --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::ConfigAdmin.3pm @@ -0,0 +1,180 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::ConfigAdmin 3pm" +.TH ZoneMinder::ConfigAdmin 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::ConfigAdmin \- ZoneMinder Configuration Administration module +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::ConfigAdmin; +\& use ZoneMinder::ConfigAdmin qw(:all); +\& +\& loadConfigFromDB(); +\& saveConfigToDB(); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The ZoneMinder:ConfigAdmin module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. +.PP +The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. +.SH "METHODS" +.IX Header "METHODS" +.IP "loadConfigFromDB ();" 4 +.IX Item "loadConfigFromDB ();" +Loads existing configuration from the database (if any) and merges it with the definitions held in this module. This results in the merging of any new configuration and the removal of any deprecated configuration while preserving the existing values of every else. +.IP "saveConfigToDB ();" 4 +.IX Item "saveConfigToDB ();" +Saves configuration held in memory to the database. The act of loading and saving configuration is a convenient way to ensure that the configuration held in the database corresponds with the most recent definitions and that all components are using the same set of configuration. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +The :data tag will export the various configuration data structures +The :functions tag will export the helper functions. +The :all tag will export all above symbols. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +http://www.zoneminder.com +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 188:" 4 +.IX Item "Around line 188:" +You forgot a '=back' before '=head2' diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::ConfigData.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::ConfigData.3pm new file mode 100644 index 000000000..38c7e4c2d --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::ConfigData.3pm @@ -0,0 +1,180 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::ConfigData 3pm" +.TH ZoneMinder::ConfigData 3pm "2012-09-11" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::ConfigData \- ZoneMinder Configuration Data module +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::ConfigData; +\& use ZoneMinder::ConfigData qw(:all); +\& +\& loadConfigFromDB(); +\& saveConfigToDB(); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The ZoneMinder:ConfigData module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. +.PP +The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. +.SH "METHODS" +.IX Header "METHODS" +.IP "loadConfigFromDB ();" 4 +.IX Item "loadConfigFromDB ();" +Loads existing configuration from the database (if any) and merges it with the definitions held in this module. This results in the merging of any new configuration and the removal of any deprecated configuration while preserving the existing values of every else. +.IP "saveConfigToDB ();" 4 +.IX Item "saveConfigToDB ();" +Saves configuration held in memory to the database. The act of loading and saving configuration is a convenient way to ensure that the configuration held in the database corresponds with the most recent definitions and that all components are using the same set of configuration. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +The :data tag will export the various configuration data structures +The :functions tag will export the helper functions. +The :all tag will export all above symbols. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +http://www.zoneminder.com +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 2031:" 4 +.IX Item "Around line 2031:" +You forgot a '=back' before '=head2' diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Control.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control.3pm new file mode 100644 index 000000000..d94097341 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Control 3pm" +.TH ZoneMinder::Control 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::AxisV2.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::AxisV2.3pm new file mode 100644 index 000000000..a4d4e2970 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::AxisV2.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Control::AxisV2 3pm" +.TH ZoneMinder::Control::AxisV2 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::Ncs370.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::Ncs370.3pm new file mode 100644 index 000000000..9d7f662c8 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::Ncs370.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Control::Ncs370 3pm" +.TH ZoneMinder::Control::Ncs370 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::PanasonicIP.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::PanasonicIP.3pm new file mode 100644 index 000000000..1e87ff0b2 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::PanasonicIP.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Control::PanasonicIP 3pm" +.TH ZoneMinder::Control::PanasonicIP 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::PelcoD.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::PelcoD.3pm new file mode 100644 index 000000000..29378242f --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::PelcoD.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Control::PelcoD 3pm" +.TH ZoneMinder::Control::PelcoD 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::Visca.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::Visca.3pm new file mode 100644 index 000000000..3a1950937 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::Visca.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Control::Visca 3pm" +.TH ZoneMinder::Control::Visca 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::mjpgStreamer.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::mjpgStreamer.3pm new file mode 100644 index 000000000..87abf286e --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Control::mjpgStreamer.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Control::mjpgStreamer 3pm" +.TH ZoneMinder::Control::mjpgStreamer 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2005 by Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Database.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Database.3pm new file mode 100644 index 000000000..72c7b141a --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Database.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Database 3pm" +.TH ZoneMinder::Database 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::General.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::General.3pm new file mode 100644 index 000000000..8040b6b33 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::General.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::General 3pm" +.TH ZoneMinder::General 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Logger.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Logger.3pm new file mode 100644 index 000000000..48aec4433 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Logger.3pm @@ -0,0 +1,259 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Logger 3pm" +.TH ZoneMinder::Logger 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Logger \- ZoneMinder Logger module +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Logger; +\& use ZoneMinder::Logger qw(:all); +\& +\& logInit( "myproc", DEBUG ); +\& +\& Debug( "This is what is happening" ); +\& Info( "Something interesting is happening" ); +\& Warning( "Something might be going wrong." ); +\& Error( "Something has gone wrong!!" ); +\& Fatal( "Something has gone badly wrong, gotta stop!!" ); +\& Panic( "Something fundamental has gone wrong, die with stack trace ); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The ZoneMinder:Logger module contains the common debug and error reporting routines used by the ZoneMinder scripts. +.PP +To use debug in your scripts you need to include this module, and call logInit. Thereafter you can sprinkle Debug or Error calls etc throughout the code safe in the knowledge that they will be reported to your error log, and possibly the syslogger, in a meaningful and consistent format. +.PP +Debug is discussed in terms of levels where 1 and above (currently only 1 for scripts) is considered debug, 0 is considered as informational, \-1 is a warning, \-2 is an error and \-3 is a fatal error or panic. Where levels are mentioned below as thresholds the value given and anything with a lower level (ie. more serious) will be included. +.SH "METHODS" +.IX Header "METHODS" +.ie n .IP "logInit ( $id, %options );" 4 +.el .IP "logInit ( \f(CW$id\fR, \f(CW%options\fR );" 4 +.IX Item "logInit ( $id, %options );" +Initialises the debug and prepares the logging for forthcoming operations. If not called explicitly it will be called by the first debug call in your script, but with default (and probably meaningless) options. The only compulsory arguments are \f(CW$id\fR which must be a string that will identify debug coming from this script in mixed logs. Other options may be provided as below, +.Sp +.Vb 8 +\& Option Default Description +\& \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\- +\& level INFO The initial debug level which defines which statements are output and which are ignored +\& trace 0 Whether to use the Carp::shortmess format in debug statements to identify where the debug was emitted from +\& termLevel NOLOG At what level debug is written to terminal standard error, 0 is no, 1 is yes, 2 is write only if terminal +\& databaseLevel INFO At what level debug is written to the Log table in the database; +\& fileLevel NOLOG At what level debug is written to a log file of the format of .log in the standard log directory. +\& syslogLevel INFO At what level debug is written to syslog. +.Ve +.Sp +To disable any of these action entirely set to \s-1NOLOG\s0 +.IP "logTerm ();" 4 +.IX Item "logTerm ();" +Used to end the debug session and close any logs etc. Not usually necessary. +.ie n .IP "$id = logId ( [$id] );" 4 +.el .IP "\f(CW$id\fR = logId ( [$id] );" 4 +.IX Item "$id = logId ( [$id] );" +.PD 0 +.ie n .IP "$level = logLevel ( [$level] );" 4 +.el .IP "\f(CW$level\fR = logLevel ( [$level] );" 4 +.IX Item "$level = logLevel ( [$level] );" +.ie n .IP "$trace = logTrace ( [$trace] );" 4 +.el .IP "\f(CW$trace\fR = logTrace ( [$trace] );" 4 +.IX Item "$trace = logTrace ( [$trace] );" +.ie n .IP "$level = logLevel ( [$level] );" 4 +.el .IP "\f(CW$level\fR = logLevel ( [$level] );" 4 +.IX Item "$level = logLevel ( [$level] );" +.ie n .IP "$termLevel = logTermLevel ( [$termLevel] );" 4 +.el .IP "\f(CW$termLevel\fR = logTermLevel ( [$termLevel] );" 4 +.IX Item "$termLevel = logTermLevel ( [$termLevel] );" +.ie n .IP "$databaseLevel = logDatabaseLevel ( [$databaseLevel] );" 4 +.el .IP "\f(CW$databaseLevel\fR = logDatabaseLevel ( [$databaseLevel] );" 4 +.IX Item "$databaseLevel = logDatabaseLevel ( [$databaseLevel] );" +.ie n .IP "$fileLevel = logFileLevel ( [$fileLevel] );" 4 +.el .IP "\f(CW$fileLevel\fR = logFileLevel ( [$fileLevel] );" 4 +.IX Item "$fileLevel = logFileLevel ( [$fileLevel] );" +.ie n .IP "$syslogLevel = logSyslogLevel ( [$syslogLevel] );" 4 +.el .IP "\f(CW$syslogLevel\fR = logSyslogLevel ( [$syslogLevel] );" 4 +.IX Item "$syslogLevel = logSyslogLevel ( [$syslogLevel] );" +.PD +These methods can be used to get and set the current settings as defined in logInit. +.ie n .IP "Debug( $string );" 4 +.el .IP "Debug( \f(CW$string\fR );" 4 +.IX Item "Debug( $string );" +This method will output a debug message if the current debug level permits it, otherwise does nothing. This message will be tagged with the \s-1DBG\s0 string in the logs. +.ie n .IP "Info( $string );" 4 +.el .IP "Info( \f(CW$string\fR );" 4 +.IX Item "Info( $string );" +This method will output an informational message if the current debug level permits it, otherwise does nothing. This message will be tagged with the \s-1INF\s0 string in the logs. +.ie n .IP "Warning( $string );" 4 +.el .IP "Warning( \f(CW$string\fR );" 4 +.IX Item "Warning( $string );" +This method will output a warning message if the current debug level permits it, otherwise does nothing. This message will be tagged with the \s-1WAR\s0 string in the logs. +.ie n .IP "Error( $string );" 4 +.el .IP "Error( \f(CW$string\fR );" 4 +.IX Item "Error( $string );" +This method will output an error message if the current debug level permits it, otherwise does nothing. This message will be tagged with the \s-1ERR\s0 string in the logs. +.ie n .IP "Fatal( $string );" 4 +.el .IP "Fatal( \f(CW$string\fR );" 4 +.IX Item "Fatal( $string );" +This method will output a fatal error message and then die if the current debug level permits it, otherwise does nothing. This message will be tagged with the \s-1FAT\s0 string in the logs. +.ie n .IP "Panic( $string );" 4 +.el .IP "Panic( \f(CW$string\fR );" 4 +.IX Item "Panic( $string );" +This method will output a panic error message and then die with a stack trace if the current debug level permits it, otherwise does nothing. This message will be tagged with the \s-1PNC\s0 string in the logs. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +The :constants tag will export the debug constants which define the various levels of debug +The :variables tag will export variables containing the current debug id and level +The :functions tag will export the debug functions. This or :all is what you would normally use. +The :all tag will export all above symbols. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Carp +Sys::Syslog +.PP +The ZoneMinder \s-1README\s0 file Troubleshooting section for an extended discussion on the use and configuration of syslog with ZoneMinder. +.PP +http://www.zoneminder.com +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 830:" 4 +.IX Item "Around line 830:" +You forgot a '=back' before '=head2' diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Memory.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Memory.3pm new file mode 100644 index 000000000..048b11fcd --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Memory.3pm @@ -0,0 +1,313 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Memory 3pm" +.TH ZoneMinder::Memory 3pm "2012-09-11" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::MappedMem \- ZoneMinder Mapped Memory access module +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::MappedMem; +\& use ZoneMinder::MappedMem qw(:all); +\& +\& if ( zmMemVerify( $monitor ) ) +\& { +\& $state = zmGetMonitorState( $monitor ); +\& if ( $state == STATE_ALARM ) +\& { +\& ... +\& } +\& } +\& +\& ( $lri, $lwi ) = zmMemRead( $monitor, [ "shared_data:last_read_index", "shared_data:last_write_index" ] ); +\& zmMemWrite( $monitor, { "trigger_data:trigger_showtext" => "Some Text" } ); +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The ZoneMinder:MappedMem module contains methods for accessing and writing to mapped memory as well as helper methods for common operations. +.PP +The core elements of ZoneMinder used mapped memory to allow multiple access to resources. Although ZoneMinder scripts have used this information before, up until now it was difficult to access and prone to errors. This module introduces a common \s-1API\s0 for mapped memory access (both reading and writing) making it a lot easier to customise scripts or even create your own. +.PP +All the methods listed below require a 'monitor' parameter. This must be a reference to a hash with at least the 'Id' field set to the monitor id of the mapped memory you wish to access. Using database methods to select the monitor details will also return this kind of data. Some of the mapped memory methods will add and amend new fields to this hash. +.SH "METHODS" +.IX Header "METHODS" +.ie n .IP "zmMemVerify ( $monitor );" 4 +.el .IP "zmMemVerify ( \f(CW$monitor\fR );" 4 +.IX Item "zmMemVerify ( $monitor );" +Verify that the mapped memory of the monitor given exists and is valid. It will return an undefined value if it is not valid. You should generally call this method first before using any of the other methods, but most of the remaining methods will also do so if the memory has not already been verified. +.ie n .IP "zmMemInvalidate ( $monitor );" 4 +.el .IP "zmMemInvalidate ( \f(CW$monitor\fR );" 4 +.IX Item "zmMemInvalidate ( $monitor );" +Following an error, reset the mapped memory ids and attempt to reverify on the next operation. This is mostly used when a mapped memory segment has gone away and been recreated with a different id. +.ie n .IP "zmMemRead ( $monitor, $readspec );" 4 +.el .IP "zmMemRead ( \f(CW$monitor\fR, \f(CW$readspec\fR );" 4 +.IX Item "zmMemRead ( $monitor, $readspec );" +This method is used to read data from mapped memory attached to the given monitor. The mapped memory will be verified if it has not already been. The 'readspec' must either be a string of the form \*(L"
:\*(R" or a reference to an array of strings of the same format. In the first case a single value is returned, in the latter case a list of values is return. Errors will cause undefined to be returned. The allowable sections and field names are described below. +.ie n .IP "zmMemWrite ( $monitor, $writespec );" 4 +.el .IP "zmMemWrite ( \f(CW$monitor\fR, \f(CW$writespec\fR );" 4 +.IX Item "zmMemWrite ( $monitor, $writespec );" +This method is used to write data to mapped memory attached to the given monitor. The mapped memory will be verified if it has not already been. The 'writespec' must be a reference to a hash with keys of the form \*(L"
:\*(R" and values as the data to be written. Errors will cause undefined to be returned, otherwise a non-undefined value will be returned. The allowable sections and field names are described below. +.ie n .IP "$state = zmGetMonitorState ( $monitor );" 4 +.el .IP "\f(CW$state\fR = zmGetMonitorState ( \f(CW$monitor\fR );" 4 +.IX Item "$state = zmGetMonitorState ( $monitor );" +Return the current state of the given monitor. This is an integer value and can be compared with the \s-1STATE\s0 constants given below. +.ie n .IP "$event_id = zmGetLastEvent ( $monitor );" 4 +.el .IP "\f(CW$event_id\fR = zmGetLastEvent ( \f(CW$monitor\fR );" 4 +.IX Item "$event_id = zmGetLastEvent ( $monitor );" +Return the event id of the last event that the monitor generated, or 0 if no event has been generated by the current monitor process. +.ie n .IP "zmIsAlarmed ( $monitor );" 4 +.el .IP "zmIsAlarmed ( \f(CW$monitor\fR );" 4 +.IX Item "zmIsAlarmed ( $monitor );" +Return 1 if the monitor given is currently in an alarm state, 0 otherwise. +.ie n .IP "zmInAlarm ( $monitor );" 4 +.el .IP "zmInAlarm ( \f(CW$monitor\fR );" 4 +.IX Item "zmInAlarm ( $monitor );" +Return 1 if the monitor given is currently in an alarm or alerted state, 0 otherwise. +.ie n .IP "zmHasAlarmed ( $monitor );" 4 +.el .IP "zmHasAlarmed ( \f(CW$monitor\fR );" 4 +.IX Item "zmHasAlarmed ( $monitor );" +Return 1 if the given monitor is in an alarm state, or has been in an alarm state since the last call to this method. +.ie n .IP "( $x, $y ) = zmGetAlarmLocation ( $monitor );" 4 +.el .IP "( \f(CW$x\fR, \f(CW$y\fR ) = zmGetAlarmLocation ( \f(CW$monitor\fR );" 4 +.IX Item "( $x, $y ) = zmGetAlarmLocation ( $monitor );" +Return an x,y pair indicating the image co-ordinates of the centre of the last motion event generated by the given monitor. If no event has been generated by the current monitor process, or the alarm was not motion related, returns \-1,\-1. +.ie n .IP "zmGetLastWriteTime ( $monitor );" 4 +.el .IP "zmGetLastWriteTime ( \f(CW$monitor\fR );" 4 +.IX Item "zmGetLastWriteTime ( $monitor );" +Returns the time (in utc seconds) since the last image was captured by the given monitor and written to shared memory, or 0 otherwise. +.ie n .IP "zmGetLastReadTime ( $monitor );" 4 +.el .IP "zmGetLastReadTime ( \f(CW$monitor\fR );" 4 +.IX Item "zmGetLastReadTime ( $monitor );" +Returns the time (in utc seconds) since the last image was read from shared memory by the analysis daemon of the given monitor, or 0 otherwise or if the monitor is in monitor only mode. +.ie n .IP "zmMonitorSuspend ( $monitor );" 4 +.el .IP "zmMonitorSuspend ( \f(CW$monitor\fR );" 4 +.IX Item "zmMonitorSuspend ( $monitor );" +Suspend the given monitor from generating events caused by motion. This method can be used to prevent camera actions such as panning or zooming from causing events. If configured to do so, the monitor may automatically resume after a defined period. +.ie n .IP "zmMonitorResume ( $monitor );" 4 +.el .IP "zmMonitorResume ( \f(CW$monitor\fR );" 4 +.IX Item "zmMonitorResume ( $monitor );" +Allow the given monitor to resume generating events caused by motion. +.ie n .IP "zmTriggerEventOn ( $monitor, $score, $cause [, $text, $showtext ] );" 4 +.el .IP "zmTriggerEventOn ( \f(CW$monitor\fR, \f(CW$score\fR, \f(CW$cause\fR [, \f(CW$text\fR, \f(CW$showtext\fR ] );" 4 +.IX Item "zmTriggerEventOn ( $monitor, $score, $cause [, $text, $showtext ] );" +Trigger the given monitor to generate an event. You must supply an event score and a cause string indicating the reason for the event. You may also supply a text string containing further details about the event and a showtext string which may be included in the timestamp annotation on any images captured during the event, if configured to do so. +.ie n .IP "zmTriggerEventOff ( $monitor );" 4 +.el .IP "zmTriggerEventOff ( \f(CW$monitor\fR );" 4 +.IX Item "zmTriggerEventOff ( $monitor );" +Trigger the given monitor to not generate any events. This method does not cancel zmTriggerEventOn, but is exclusive to it. This method is intended to allow external triggers to prevent normal events being generated by monitors in the same way as zmMonitorSuspend but applies to all events and not just motion, and is intended for longer timescales than are appropriate for suspension. +.ie n .IP "zmTriggerEventCancel ( $monitor );" 4 +.el .IP "zmTriggerEventCancel ( \f(CW$monitor\fR );" 4 +.IX Item "zmTriggerEventCancel ( $monitor );" +Cancel any previous trigger on or off requests. This stops a triggered alarm if it exists from a previous 'on' and allows events to be generated once more following a previous 'off'. +.ie n .IP "zmTriggerShowtext ( $monitor, $showtest );" 4 +.el .IP "zmTriggerShowtext ( \f(CW$monitor\fR, \f(CW$showtest\fR );" 4 +.IX Item "zmTriggerShowtext ( $monitor, $showtest );" +Indicate that the given text should be displayed in the timestamp annotation on any images captured, if the format of the annotation string defined for the monitor permits. +.SH "DATA" +.IX Header "DATA" +The data fields in mapped memory that may be accessed are as follows. There are two main sections, shared_data which is general data and trigger_data which is used for event triggering. Whilst reading from these fields is harmless, extreme care must be taken when writing to mapped memory, especially in the shared_data section as this is normally written to only by monitor capture and analysis processes. +.PP +.Vb 10 +\& shared_data The general mapped memory section +\& size The size, in bytes, of this section +\& valid Flag indicating whether this section has been initialised +\& active Flag indicating whether this monitor is active (enabled/disabled) +\& signal Flag indicating whether this monitor is reciving a valid signal +\& state The current monitor state, see the STATE constants below +\& last_write_index The last index, in the image buffer, that an image has been saved to +\& last_read_index The last index, in the image buffer, that an image has been analysed from +\& last_write_time The time (in utc seconds) when the last image was captured +\& last_read_time The time (in utc seconds) when the last image was analysed +\& last_event The id of the last event generated by the monitor analysis process, 0 if none +\& action The monitor actions bitmask, see the ACTION constants below +\& brightness Read/write location for the current monitor brightness +\& hue Read/write location for the current monitor hue +\& colour Read/write location for the current monitor colour +\& contrast Read/write location for the current monitor contrast +\& alarm_x Image x co\-ordinate (from left) of the centre of the last motion event, \-1 if none +\& alarm_y Image y co\-ordinate (from top) of the centre of the last motion event, \-1 if none +\& +\& trigger_data The triggered event mapped memory section +\& size The size, in bytes of this section +\& trigger_state The current trigger state, see the TRIGGER constants below +\& trigger_score The current triggered event score +\& trigger_cause The current triggered event cause string +\& trigger_text The current triggered event descriptive text string +\& trigger_showtext The triggered text that will be displayed on captured image timestamps +.Ve +.SH "CONSTANTS" +.IX Header "CONSTANTS" +The following constants are used by the methods above, but can also be used by user scripts if required. +.IP "\s-1STATE_IDLE\s0 \s-1STATE_PREALARM\s0 \s-1STATE_ALARM\s0 \s-1STATE_ALERT\s0 \s-1STATE_TAPE\s0" 4 +.IX Item "STATE_IDLE STATE_PREALARM STATE_ALARM STATE_ALERT STATE_TAPE" +These constants define the state of the monitor with respect to alarms and events. They are used in the shared_data:state field. +.IP "\s-1ACTION_GET\s0 \s-1ACTION_SET\s0 \s-1ACTION_RELOAD\s0 \s-1ACTION_SUSPEND\s0 \s-1ACTION_RESUME\s0" 4 +.IX Item "ACTION_GET ACTION_SET ACTION_RELOAD ACTION_SUSPEND ACTION_RESUME" +These constants defines the various values that can exist in the shared_data:action field. This is a bitmask which when non-zero defines an action that an executing monitor process should take. \s-1ACTION_GET\s0 requires that the current values of brightness, contrast, colour and hue are taken from the camera and written to the equivalent mapped memory fields. \s-1ACTION_SET\s0 implies the reverse, that the values in mapped memory should be written to the camera. \s-1ACTION_RELOAD\s0 signal that the monitor process should reload itself from the database in case any settings have changed there. \s-1ACTION_SUSPEND\s0 signals that a monitor should stop exaiming images for motion, though other alarms may still occur. \s-1ACTION_RESUME\s0 sigansl that a monitor should resume motion detectiom. +.IP "\s-1TRIGGER_CANCEL\s0 \s-1TRIGGER_ON\s0 \s-1TRIGGER_OFF\s0" 4 +.IX Item "TRIGGER_CANCEL TRIGGER_ON TRIGGER_OFF" +These constants are used in the definition of external triggers. \s-1TRIGGER_CANCEL\s0 is used to indicated that any previous trigger settings should be cancelled, \s-1TRIGGER_ON\s0 signals that an alarm should be created (or continued)) as a result of the current trigger and \s-1TRIGGER_OFF\s0 signals that the trigger should prevent any alarms from being generated. See the trigger methods above for further details. +.SH "EXPORT" +.IX Header "EXPORT" +None by default. +The :constants tag will export the mapped memory constants which mostly define enumerations for the variables held in memory +The :functions tag will export the mapped memory access functions. +The :all tag will export all above symbols. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +http://www.zoneminder.com +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 727:" 4 +.IX Item "Around line 727:" +You forgot a '=back' before '=head1' +.IP "Around line 729:" 4 +.IX Item "Around line 729:" +\&'=item' outside of any '=over' +.IP "Around line 801:" 4 +.IX Item "Around line 801:" +You forgot a '=back' before '=head1' +.IP "Around line 836:" 4 +.IX Item "Around line 836:" +\&'=item' outside of any '=over' +.IP "Around line 848:" 4 +.IX Item "Around line 848:" +You forgot a '=back' before '=head1' diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel.3pm new file mode 100644 index 000000000..02f6655b1 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Trigger::Channel 3pm" +.TH ZoneMinder::Trigger::Channel 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::File.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::File.3pm new file mode 100644 index 000000000..21489277f --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::File.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Trigger::Channel::File 3pm" +.TH ZoneMinder::Trigger::Channel::File 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Handle.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Handle.3pm new file mode 100644 index 000000000..b951b38cc --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Handle.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Trigger::Channel::Handle 3pm" +.TH ZoneMinder::Trigger::Channel::Handle 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Inet.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Inet.3pm new file mode 100644 index 000000000..8b0507d3a --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Inet.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Trigger::Channel::Inet 3pm" +.TH ZoneMinder::Trigger::Channel::Inet 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Serial.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Serial.3pm new file mode 100644 index 000000000..cdbfb2c1f --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Serial.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Trigger::Channel::Serial 3pm" +.TH ZoneMinder::Trigger::Channel::Serial 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Spawning.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Spawning.3pm new file mode 100644 index 000000000..413e5262b --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Spawning.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Trigger::Channel::Spawning 3pm" +.TH ZoneMinder::Trigger::Channel::Spawning 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Unix.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Unix.3pm new file mode 100644 index 000000000..de4bb999a --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Channel::Unix.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Trigger::Channel::Unix 3pm" +.TH ZoneMinder::Trigger::Channel::Unix 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Connection.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Connection.3pm new file mode 100644 index 000000000..019306786 --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Connection.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Trigger::Connection 3pm" +.TH ZoneMinder::Trigger::Connection 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Connection::Example.3pm b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Connection::Example.3pm new file mode 100644 index 000000000..49aaf4a4d --- /dev/null +++ b/scripts/ZoneMinder/blib/man3/ZoneMinder::Trigger::Connection::Example.3pm @@ -0,0 +1,169 @@ +.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "ZoneMinder::Trigger::Connection::Example 3pm" +.TH ZoneMinder::Trigger::Connection::Example 3pm "2012-07-17" "perl v5.14.2" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +ZoneMinder::Database \- Perl extension for blah blah blah +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +.Vb 2 +\& use ZoneMinder::Database; +\& blah blah blah +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +Stub documentation for ZoneMinder, created by h2xs. It looks like the +author of the extension was negligent enough to leave the stub +unedited. +.PP +Blah blah blah. +.SS "\s-1EXPORT\s0" +.IX Subsection "EXPORT" +None by default. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Mention other useful documentation such as the documentation of +related modules or operating system documentation (such as man pages +in \s-1UNIX\s0), or any relevant external documentation such as RFCs or +standards. +.PP +If you have a mailing list set up for your module, mention it here. +.PP +If you have a web site set up for your module, mention it here. +.SH "AUTHOR" +.IX Header "AUTHOR" +Philip Coombes, +.SH "COPYRIGHT AND LICENSE" +.IX Header "COPYRIGHT AND LICENSE" +Copyright (C) 2001\-2008 Philip Coombes +.PP +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. diff --git a/scripts/ZoneMinder/blib/script/.exists b/scripts/ZoneMinder/blib/script/.exists new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Base.pm b/scripts/ZoneMinder/lib/ZoneMinder/Base.pm new file mode 100644 index 000000000..095ddc37b --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/Base.pm @@ -0,0 +1,86 @@ +# ========================================================================== +# +# ZoneMinder Base Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::Base; + +use 5.006; +use strict; +use warnings; + +require Exporter; + +our @ISA = qw(Exporter); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( 'all' => [ qw() ] ); + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw(); + +our $VERSION = "1.25.0"; + +1; +__END__ + +=head1 NAME + +ZoneMinder::Base - Base perl module for ZoneMinder + +=head1 SYNOPSIS + + use ZoneMinder::Base; + +=head1 DESCRIPTION + +This module is the base module for the rest of the ZoneMinder modules. It is included by each of the other modules but serves no purpose other than to propagate the perl module version amongst the other modules. You will never need to use this module directly but if you write new ZoneMinder modules they should include it. + +=head2 EXPORT + +None by default. + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Config.pm b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm new file mode 100644 index 000000000..e447f86f9 --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm @@ -0,0 +1,145 @@ +# ========================================================================== +# +# ZoneMinder Config Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::Config; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our @EXPORT_CONFIG; # Get populated by BEGIN + +our %EXPORT_TAGS = ( + 'constants' => [ qw( + ZM_PID + ) ] +); +push( @{$EXPORT_TAGS{config}}, @EXPORT_CONFIG ); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +use constant ZM_PID => "/var/run/zm/zm.pid"; # Path to the ZoneMinder run pid file +use constant ZM_CONFIG => "/etc/zm/zm.conf"; # Path to the ZoneMinder config file + +use Carp; + +# Load the config from the database into the symbol table +BEGIN +{ + no strict 'refs'; + + my $config_file = ZM_CONFIG; + ( my $local_config_file = $config_file ) =~ s|^.*/|./|; + if ( -s $local_config_file && -r $local_config_file ) + { + print( STDERR "Warning, overriding installed $local_config_file file with local copy\n" ); + $config_file = $local_config_file; + } + open( CONFIG, "<".$config_file ) or croak( "Can't open config file '$config_file': $!" ); + foreach my $str ( ) + { + next if ( $str =~ /^\s*$/ ); + next if ( $str =~ /^\s*#/ ); + my ( $name, $value ) = $str =~ /^\s*([^=\s]+)\s*=\s*(.+?)\s*$/; + $name =~ tr/a-z/A-Z/; + *{$name} = sub { $value }; + push( @EXPORT_CONFIG, $name ); + } + close( CONFIG ); + + use DBI; + my $dbh = DBI->connect( "DBI:mysql:database=".&ZM_DB_NAME.";host=".&ZM_DB_HOST, &ZM_DB_USER, &ZM_DB_PASS ); + my $sql = "select * from Config"; + my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or croak( "Can't execute: ".$sth->errstr() ); + while( my $config = $sth->fetchrow_hashref() ) + { + *{$config->{Name}} = sub { $config->{Value} }; + push( @EXPORT_CONFIG, $config->{Name} ); + } + $sth->finish(); + $dbh->disconnect(); +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::Config - ZoneMinder configuration module. + +=head1 SYNOPSIS + + use ZoneMinder::Config qw(:all); + +=head1 DESCRIPTION + +The ZoneMinder::Config module is used to import the ZoneMinder configuration from the database. It will do this at compile time in a BEGIN block and require access to the zm.conf file either in the current directory or in its defined location in order to determine database access details, configuration from this file will also be included. If the :all or :config tags are used then this configuration is exported into the namespace of the calling program or module. + +Once the configuration has been imported then configuration variables are defined as constants and can be accessed directory by name, e.g. + + $lang = ZM_LANG_DEFAULT; + +=head2 EXPORT + +None by default. +The :constants tag will export the ZM_PID constant which details the location of the zm.pid file +The :config tag will export all configuration from the database as well as any from the zm.conf file +The :all tag will export all above symbols. + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm new file mode 100644 index 000000000..e108d8687 --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm @@ -0,0 +1,2056 @@ +# ========================================================================== +# +# ZoneMinder Config Data Module, $Date: 2011-01-20 18:49:42 +0000 (Thu, 20 Jan 2011) $, $Revision: 3230 $ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the debug definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::ConfigData; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'data' => [ qw( + %types + @options + %options_hash + ) ] +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'data'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Configuration Data +# +# ========================================================================== + +use Carp; + +our $configInitialised = 0; + +sub INIT +{ + initialiseConfig(); +} + +# Types +our %types = +( + string => { db_type=>"string", hint=>"string", pattern=>qr|^(.+)$|, format=>q( $1 ) }, + alphanum => { db_type=>"string", hint=>"alphanumeric", pattern=>qr|^([a-zA-Z0-9-_]+)$|, format=>q( $1 ) }, + text => { db_type=>"text", hint=>"free text", pattern=>qr|^(.+)$|, format=>q( $1 ) }, + boolean => { db_type=>"boolean", hint=>"yes|no", pattern=>qr|^([yn])|i, check=>q( $1 ), format=>q( ($1 =~ /^y/) ? "yes" : "no" ) }, + integer => { db_type=>"integer", hint=>"integer", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + decimal => { db_type=>"decimal", hint=>"decimal", pattern=>qr|^(\d+(?:\.\d+)?)$|, format=>q( $1 ) }, + hexadecimal => { db_type=>"hexadecimal", hint=>"hexadecimal", pattern=>qr|^(?:0x)?([0-9a-f]{1,8})$|, format=>q( "0x".$1 ) }, + tristate => { db_type=>"string", hint=>"auto|yes|no", pattern=>qr|^([ayn])|i, check=>q( $1 ), format=>q( ($1 =~ /^y/) ? "yes" : ($1 =~ /^n/ ? "no" : "auto" ) ) }, + abs_path => { db_type=>"string", hint=>"/absolute/path/to/somewhere", pattern=>qr|^((?:/[^/]*)+?)/?$|, format=>q( $1 ) }, + rel_path => { db_type=>"string", hint=>"relative/path/to/somewhere", pattern=>qr|^((?:[^/].*)?)/?$|, format=>q( $1 ) }, + directory => { db_type=>"string", hint=>"directory", pattern=>qr|^([a-zA-Z0-9-_.]+)$|, format=>q( $1 ) }, + file => { db_type=>"string", hint=>"filename", pattern=>qr|^([a-zA-Z0-9-_.]+)$|, format=>q( $1 ) }, + hostname => { db_type=>"string", hint=>"host.your.domain", pattern=>qr|^([a-zA-Z0-9_.-]+)$|, format=>q( $1 ) }, + url => { db_type=>"string", hint=>"http://host.your.domain/", pattern=>qr|^(?:http://)?(.+)$|, format=>q( "http://".$1 ) }, + email => { db_type=>"string", hint=>"your.name\@your.domain", pattern=>qr|^([a-zA-Z0-9_.-]+)\@([a-zA-Z0-9_.-]+)$|, format=>q( $1\@$2 ) }, +); + +our @options = +( + { + name => "ZM_LANG_DEFAULT", + default => "en_gb", + description => "Default language used by web interface", + help => "ZoneMinder allows the web interface to use languages other than English if the appropriate language file has been created and is present. This option allows you to change the default language that is used from the shipped language, British English, to another language", + type => $types{string}, + category => "system", + }, + { + name => "ZM_OPT_USE_AUTH", + default => "no", + description => "Authenticate user logins to ZoneMinder", + help => "ZoneMinder can run in two modes. The simplest is an entirely unauthenticated mode where anyone can access ZoneMinder and perform all tasks. This is most suitable for installations where the web server access is limited in other ways. The other mode enables user accounts with varying sets of permissions. Users must login or authenticate to access ZoneMinder and are limited by their defined permissions.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_AUTH_TYPE", + default => "builtin", + description => "What is used to authenticate ZoneMinder users", + help => "ZoneMinder can use two methods to authenticate users when running in authenticated mode. The first is a builtin method where ZoneMinder provides facilities for users to log in and maintains track of their identity. The second method allows interworking with other methods such as http basic authentication which passes an independently authentication 'remote' user via http. In this case ZoneMinder would use the supplied user without additional authentication provided such a user is configured ion ZoneMinder.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], + type => { db_type=>"string", hint=>"builtin|remote", pattern=>qr|^([br])|i, format=>q( $1 =~ /^b/ ? "builtin" : "remote" ) }, + category => "system", + }, + { + name => "ZM_AUTH_RELAY", + default => "hashed", + description => "Method used to relay authentication information", + help => "When ZoneMinder is running in authenticated mode it can pass user details between the web pages and the back end processes. There are two methods for doing this. This first is to use a time limited hashed string which contains no direct username or password details, the second method is to pass the username and passwords around in plaintext. This method is not recommend except where you do not have the md5 libraries available on your system or you have a completely isolated system with no external access. You can also switch off authentication relaying if your system is isolated in other ways.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], + type => { db_type=>"string", hint=>"hashed|plain|none", pattern=>qr|^([hpn])|i, format=>q( ($1 =~ /^h/) ? "hashed" : ($1 =~ /^p/ ? "plain" : "none" ) ) }, + category => "system", + }, + { + name => "ZM_AUTH_HASH_SECRET", + default => "...Change me to something unique...", + description => "Secret for encoding hashed authentication information", + help => "When ZoneMinder is running in hashed authenticated mode it is necessary to generate hashed strings containing encrypted sensitive information such as usernames and password. Although these string are reasonably secure the addition of a random secret increases security substantially.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], + type => $types{string}, + category => "system", + }, + { + name => "ZM_AUTH_HASH_IPS", + default => "yes", + description => "Include IP addresses in the authentication hash", + help => "When ZoneMinder is running in hashed authenticated mode it can optionally include the requesting IP address in the resultant hash. This adds an extra level of security as only requests from that address may use that authentication key. However in some circumstances, such as access over mobile networks, the requesting address can change for each request which will cause most requests to fail. This option allows you to control whether IP addresses are included in the authentication hash on your system. If you experience intermitent problems with authentication, switching this option off may help.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_AUTH_HASH_LOGINS", + default => "no", + description => "Allow login by authentication hash", + help => "The normal process for logging into ZoneMinder is via the login screen with username and password. In some circumstances it may be desirable to allow access directly to one or more pages, for instance from a third party application. If this option is enabled then adding an 'auth' parameter to any request will include a shortcut login bypassing the login screen, if not already logged in. As authentication hashes are time and, optionally, IP limited this can allow short-term access to ZoneMinder screens from other web pages etc. In order to use this the calling application will hae to generate the authentication hash itself and ensure it is valid. If you use this option you should ensure that you have modified the ZM_AUTH_HASH_SECRET to somethign unique to your system.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_DIR_EVENTS", + default => "events", + description => "Directory where events are stored", + help => "This is the path to the events directory where all the event images and other miscellaneous files are stored. It is normally given as a subdirectory of the web directory you have specified earlier however if disk space is tight it can reside on another partition in which case you should create a link from that area to the path you give here.", + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_USE_DEEP_STORAGE", + default => "yes", + description => "Use a deep filesystem hierarchy for events", + help => "Traditionally ZoneMinder stores all events for a monitor in one directory for that monitor. This is simple and efficient except when you have very large amounts of events. Some filesystems are unable to store more than 32k files in one directory and even without this limitation, large numbers of files in a directory can slow creation and deletion of files. This option allows you to select an alternate method of storing events by year/month/day/hour/min/second which has the effect of separating events out into more directories, resulting in less per directory, and also making it easier to manually navigate to any events that may have happened at a particular time or date.", + type => $types{boolean}, + category => "paths", + }, + { + name => "ZM_DIR_IMAGES", + default => "images", + description => "Directory where the images that the ZoneMinder client generates are stored", + help => "ZoneMinder generates a myriad of images, mosty of which are associated with events. For those that aren't this is where they go.", + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_DIR_SOUNDS", + default => "sounds", + description => "Directory to the sounds that the ZoneMinder client can use", + help => "ZoneMinder can optionally play a sound file when an alarm is detected. This indicates where (relative to the web root) to look for this file.", + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_PATH_ZMS", + default => "/cgi-bin/nph-zms", + description => "Web path to zms streaming server", + help => "The ZoneMinder streaming server is required to send streamed images to your browser. It will be installed into the cgi-bin path given at configuration time. This option determines what the web path to the server is rather than the local path on your machine. Ordinarily the streaming server runs in parser-header mode however if you experience problems with streaming you can change this to non-parsed-header (nph) mode by changing 'zms' to 'nph-zms'.", + type => $types{rel_path}, + category => "paths", + }, + { + name => "ZM_COLOUR_JPEG_FILES", + default => "yes", + description => "Colourise greyscale JPEG files", + help => "Cameras that capture in greyscale can write their captured images to jpeg files with a corresponding greyscale colour space. This saves a small amount of disk space over colour ones. However some tools such as ffmpeg either fail to work with this colour space or have to convert it beforehand. Setting this option to yes uses up a little more space but makes creation of MPEG files much faster.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_ADD_JPEG_COMMENTS", + default => "no", + description => "Add jpeg timestamp annotations as file header comments", + help => "JPEG files may have a number of extra fields added to the file header. The comment field may have any kind of text added. This options allows you to have the same text that is used to annotate the image additionally included as a file header comment. If you archive event images to other locations this may help you locate images for particular events or times if you use software that can read comment headers.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_JPEG_FILE_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the saved event files (1-100)", + help => "When ZoneMinder detects an event it will save the images associated with that event to files. These files are in the JPEG format and can be viewed or streamed later. This option specifies what image quality should be used to save these files. A higher number means better quality but less compression so will take up more disk space and take longer to view over a slow connection. By contrast a low number means smaller, quicker to view, files but at the price of lower quality images. This setting applies to all images written except if the capture image has caused an alarm and the alarm file quality option is set at a higher value when that is used instead.", + type => $types{integer}, + category => "images", + }, + { + name => "ZM_JPEG_ALARM_FILE_QUALITY", + default => "0", + description => "Set the JPEG quality setting for the saved event files during an alarm (1-100)", + help => "This value is equivalent to the regular jpeg file quality setting above except that it only applies to images saved while in an alarm state and then only if this value is set to a higher quality setting than the ordinary file setting. If set to a lower value then it is ignored. Thus leaving it at the default of 0 effectively means to use the regular file quality setting for all saved images. This is to prevent acccidentally saving important images at a worse quality setting.", + type => $types{integer}, + category => "images", + }, + # Deprecated, now stream quality + { + name => "ZM_JPEG_IMAGE_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", + help => "When viewing a 'live' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.", + type => $types{integer}, + category => "hidden", + }, + { + name => "ZM_JPEG_STREAM_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", + help => "When viewing a 'live' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.", + type => $types{integer}, + category => "images", + }, + { + name => "ZM_MPEG_TIMED_FRAMES", + default => "yes", + description => "Tag video frames with a timestamp for more realistic streaming", + help => "When using streamed MPEG based video, either for live monitor streams or events, ZoneMinder can send the streams in two ways. If this option is selected then the timestamp for each frame, taken from it's capture time, is included in the stream. This means that where the frame rate varies, for instance around an alarm, the stream will still maintain it's 'real' timing. If this option is not selected then an approximate frame rate is calculated and that is used to schedule frames instead. This option should be selected unless you encounter problems with your preferred streaming method.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_MPEG_LIVE_FORMAT", + default => "swf", + description => "What format 'live' video streams are played in", + help => "When using MPEG mode ZoneMinder can output live video. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of 'asf' works well under Windows with Windows Media Player but I'm currently not sure what, if anything, works on a Linux platform. If you find out please let me know! If this option is left blank then live streams will revert to being in motion jpeg format", + type => $types{string}, + category => "images", + }, + { + name => "ZM_MPEG_REPLAY_FORMAT", + default => "swf", + description => "What format 'replay' video streams are played in", + help => "When using MPEG mode ZoneMinder can replay events in encoded video format. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of 'asf' works well under Windows with Windows Media Player and 'mpg', or 'avi' etc should work under Linux. If you know any more then please let me know! If this option is left blank then live streams will revert to being in motion jpeg format", + type => $types{string}, + category => "images", + }, + { + name => "ZM_RAND_STREAM", + default => "yes", + description => "Add a random string to prevent caching of streams", + help => "Some browsers can cache the streams used by ZoneMinder. In order to prevent his a harmless random string can be appended to the url to make each invocation of the stream appear unique.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_OPT_CAMBOZOLA", + default => "no", + description => "Is the (optional) cambozola java streaming client installed", + help => "Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don't natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_PATH_CAMBOZOLA", + default => "cambozola.jar", + description => "Web path to (optional) cambozola java streaming client", + help => "Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don't natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed. Leave this as 'cambozola.jar' if cambozola is installed in the same directory as the ZoneMinder web client files.", + requires => [ { name=>"ZM_OPT_CAMBOZOLA", value=>"yes" } ], + type => $types{rel_path}, + category => "images", + }, + { + name => "ZM_RELOAD_CAMBOZOLA", + default => "0", + description => "After how many seconds should Cambozola be reloaded in live view", + help => "Cambozola allows for the viewing of streaming MJPEG however it caches the entire stream into cache space on the computer, setting this to a number > 0 will cause it to automatically reload after that many seconds to avoid filling up a hard drive.", + type => $types{integer}, + category => "images", + }, + { + name => "ZM_TIMESTAMP_ON_CAPTURE", + default => "yes", + description => "Timestamp images as soon as they are captured", + help => "ZoneMinder can add a timestamp to images in two ways. The default method, when this option is set, is that each image is timestamped immediately when captured and so the image held in memory is marked right away. The second method does not timestamp the images until they are either saved as part of an event or accessed over the web. The timestamp used in both methods will contain the same time as this is preserved along with the image. The first method ensures that an image is timestamped regardless of any other circumstances but will result in all images being timestamped even those never saved or viewed. The second method necessitates that saved images are copied before being saved otherwise two timestamps perhaps at different scales may be applied. This has the (perhaps) desirable side effect that the timestamp is always applied at the same resolution so an image that has scaling applied will still have a legible and correctly scaled timestamp.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_CPU_EXTENSIONS", + default => "yes", + description => "Use advanced CPU extensions to increase performance", + help => "When advanced processor extensions such as SSE2 or SSSE3 are available, ZoneMinder can use them, which should increase performance and reduce system load. Enabling this option on processors that do not support the advanced processors extensions used by ZoneMinder is harmless and will have no effect.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_FAST_IMAGE_BLENDS", + default => "yes", + description => "Use a fast algorithm to blend the reference image", + help => "To detect alarms ZoneMinder needs to blend the captured image with the stored reference image to update it for comparison with the next image. The reference blend percentage specified for the monitor controls how much the new image affects the reference image. There are two methods that are available for this. If this option is set then fast calculation which does not use any multiplication or division is used. This calculation is extremely fast, however it limits the possible blend percentages to 50%, 25%, 12.5%, 6.25%, 3.25% and 1.5%. Any other blend percentage will be rounded to the nearest possible one. The alternative is to switch this option off and use standard blending instead, which is slower.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_OPT_ADAPTIVE_SKIP", + default => "yes", + description => "Should frame analysis try and be efficient in skipping frames", + help => "In previous versions of ZoneMinder the analysis daemon would attempt to keep up with the capture daemon by processing the last captured frame on each pass. This would sometimes have the undesirable side-effect of missing a chunk of the initial activity that caused the alarm because the pre-alarm frames would all have to be written to disk and the database before processing the next frame, leading to some delay between the first and second event frames. Setting this option enables a newer adaptive algorithm where the analysis daemon attempts to process as many captured frames as possible, only skipping frames when in danger of the capture daemon overwriting yet to be processed frames. This skip is variable depending on the size of the ring buffer and the amount of space left in it. Enabling this option will give you much better coverage of the beginning of alarms whilst biasing out any skipped frames towards the middle or end of the event. However you should be aware that this will have the effect of making the analysis daemon run somewhat behind the capture daemon during events and for particularly fast rates of capture it is possible for the adaptive algorithm to be overwhelmed and not have time to react to a rapid build up of pending frames and thus for a buffer overrun condition to occur.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_BLEND_ALARMED_IMAGES", + default => "yes", + description => "Blend alarmed images to update the reference image", + help => "To detect alarms ZoneMinder compares an image with a reference image which is formed from a composite of the previous images. This option determines whether images that cause events are included in this process. Doing so may increase the precision of the alarmed region but can cause problems if wholescale lighting changes cause alarms as this would not get fed back into the image and an alarm may persist indefinately. A better way to achive the same effect in most cases is to lower substantially the reference blend percentage in specific monitors.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_MAX_SUSPEND_TIME", + default => "30", + description => "Maximum time that a monitor may have motion detection suspended", + help => "ZoneMinder allows monitors to have motion detection to be suspended, for instance while panning a camera. Ordinarily this relies on the operator resuming motion detection afterwards as failure to do so can leave a monitor in a permanently suspended state. This setting allows you to set a maximum time which a camera may be suspended for before it automatically resumes motion detection. This time can be extended by subsequent suspend indications after the first so continuous camera movement will also occur while the monitor is suspended.", + type => $types{integer}, + category => "config", + }, + # Deprecated, really no longer necessary + { + name => "ZM_OPT_REMOTE_CAMERAS", + default => "no", + description => "Are you going to use remote/networked cameras", + help => "ZoneMinder can work with both local cameras, ie. those attached physically to your computer and remote or network cameras. If you will be using networked cameras select this option.", + type => $types{boolean}, + category => "hidden", + }, + # Deprecated, now set on a per monitor basis using the Method field + { + name => "ZM_NETCAM_REGEXPS", + default => "yes", + description => "Use regular expression matching with network cameras", + help => "Traditionally ZoneMinder has used complex regular regular expressions to handle the multitude of formats that network cameras produce. In versions from 1.21.1 the default is to use a simpler and faster built in pattern matching methodology. This works well with most networks cameras but if you have problems you can try the older, but more flexible, regular expression based method by selecting this option. Note, to use this method you must have libpcre installed on your system.", + requires => [ { name => "ZM_OPT_REMOTE_CAMERAS", value => "yes" } ], + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_HTTP_VERSION", + default => "1.1", + description => "The version of HTTP that ZoneMinder will use to connect", + help => "ZoneMinder can communicate with network cameras using either of the HTTP/1.1 or HTTP/1.0 standard. A server will normally fall back to the version it supports iwht no problem so this should usually by left at the default. However it can be changed to HTTP/1.0 if necessary to resolve particular issues.", + type => { db_type=>"string", hint=>"1.1|1.0", pattern=>qr|^(1\.[01])$|, format=>q( $1?$1:"" ) }, + category => "network", + }, + { + name => "ZM_HTTP_UA", + default => "ZoneMinder", + description => "The user agent that ZoneMinder uses to identify itself", + help => "When ZoneMinder communicates with remote cameras it will identify itself using this string and it's version number. This is normally sufficient, however if a particular cameras expects only to communicate with certain browsers then this can be changed to a different string identifying ZoneMinder as Internet Explorer or Netscape etc.", + type => $types{string}, + category => "network", + }, + { + name => "ZM_HTTP_TIMEOUT", + default => "2500", + description => "How long ZoneMinder waits before giving up on images (milliseconds)", + help => "When retrieving remote images ZoneMinder will wait for this length of time before deciding that an image is not going to arrive and taking steps to retry. This timeout is in milliseconds (1000 per second) and will apply to each part of an image if it is not sent in one whole chunk.", + type => $types{integer}, + category => "network", + }, + { + name => "ZM_MIN_RTP_PORT", + default => "40200", + description => "Minimum port that ZoneMinder will listen for RTP traffic on", + help => "When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the minimum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting.", + type => $types{integer}, + category => "network", + }, + { + name => "ZM_MAX_RTP_PORT", + default => "40499", + description => "Maximum port that ZoneMinder will listen for RTP traffic on", + help => "When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the maximum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting. You should also ensure that you have opened up at least two ports for each monitor that will be connecting to unicasting network cameras.", + type => $types{integer}, + category => "network", + }, + { + name => "ZM_OPT_FFMPEG", + default => "yes", + description => "Is the ffmpeg video encoder/decoder installed", + help => "ZoneMinder can optionally encode a series of video images into an MPEG encoded movie file for viewing, downloading or storage. This option allows you to specify whether you have the ffmpeg tools installed. Note that creating MPEG files can be fairly CPU and disk intensive and is not a required option as events can still be reviewed as video streams without it.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_PATH_FFMPEG", + default => "/usr/bin/ffmpeg", + description => "Path to (optional) ffmpeg mpeg encoder", + help => "This path should point to where ffmpeg has been installed.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{abs_path}, + category => "images", + }, + { + name => "ZM_FFMPEG_INPUT_OPTIONS", + default => "", + description => "Additional input options to ffmpeg", + help => "Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the input to ffmpeg (options that are given before the -i option). Check the ffmpeg documentation for a full list of options which may be used here.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_FFMPEG_OUTPUT_OPTIONS", + default => "-r 25", + description => "Additional output options to ffmpeg", + help => "Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the output from ffmpeg (options that are given after the -i option). Check the ffmpeg documentation for a full list of options which may be used here. The most common one will often be to force an output frame rate supported by the video encoder.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_FFMPEG_FORMATS", + default => "mpg mpeg wmv asf avi* mov swf 3gp**", + description => "Formats to allow for ffmpeg video generation", + help => "Ffmpeg can generate video in many different formats. This option allows you to list the ones you want to be able to select. As new formats are supported by ffmpeg you can add them here and be able to use them immediately. Adding a '*' after a format indicates that this will be the default format used for web video, adding '**' defines the default format for phone video.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_LOG_LEVEL_SYSLOG", + default => "0", + description => "Save logging output to the system log", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to the system log. ZoneMinder binaries have always logged to the system log but now scripts and web logging is also included. To preserve the previous behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_FILE", + default => "-5", + description => "Save logging output to component files", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to individual log files written by specific components. This is how logging worked previously and although useful for tracking down issues in specific components it also resulted in many disparate log files. To preserve this behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance though file output has less impact than the other options. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_WEBLOG", + default => "-5", + description => "Save logging output to the weblog", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output from the web interface that goes to the httpd error log. Note that only web logging from PHP and JavaScript files is included and so this option is really only useful for investigating specific issues with those components. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_DATABASE", + default => "0", + description => "Save logging output to the database", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that is written to the database. This is a new option which can make viewing logging output easier and more intuitive and also makes it easier to get an overall impression of how the system is performing. If you have a large or very busy system then it is possible that use of this option may slow your system down if the table becomes very large. Ensure you use the LOG_DATABASE_LIMIT option to keep the table to a manageable size. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_DATABASE_LIMIT", + default => "7 day", + description => "Maximum number of log entries to retain", + help => "If you are using database logging then it is possible to quickly build up a large number of entries in the Logs table. This option allows you to specify how many of these entries are kept. If you set this option to a number greater than zero then that number is used to determine the maximum number of rows, less than or equal to zero indicates no limit and is not recommended. You can also set this value to time values such as ' day' which will limit the log entries to those newer than that time. You can specify 'hour', 'day', 'week', 'month' and 'year', note that the values should be singular (no 's' at the end). The Logs table is pruned periodically so it is possible for more than the expected number of rows to be present briefly in the meantime.", + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG", + default => "no", + description => "Switch debugging on", + help => "ZoneMinder components usually support debug logging available to help with diagnosing problems. Binary components have several levels of debug whereas more other components have only one. Normally this is disabled to minimise performance penalties and avoid filling logs too quickly. This option lets you switch on other options that allow you to configure additional debug information to be output. Components will pick up this instruction when they are restarted.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_TARGET", + default => "", + description => "What components should have extra debug enabled", + help => "There are three scopes of debug available. Leaving this option blank means that all components will use extra debug (not recommended). Setting this option to '_', e.g. _zmc, will limit extra debug to that component only. Setting this option to '__', e.g. '_zmc_m1' will limit extra debug to that instance of the component only. This is ordinarily what you probably want to do. To debug scripts use their names without the .pl extension, e.g. '_zmvideo' and to debug issues with the web interface use '_web'. You can specify multiple targets by separating them with '|' characters.", + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_LEVEL", + default => 1, + description => "What level of extra debug should be enabled", + help => "There are 9 levels of debug available, with higher numbers being more debug and level 0 being no debug. However not all levels are used by all components. Also if there is debug at a high level it is usually likely to be output at such a volume that it may obstruct normal operation. For this reason you should set the level carefully and cautiously until the degree of debug you wish to see is present. Scripts and the web interface only have one level so this is an on/off type option for them.", + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => { db_type=>"integer", hint=>"1|2|3|4|5|6|7|8|9", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_FILE", + default => "/tmp/zm/zm_debug.log+", + description => "Where extra debug is output to", + help => "This option allows you to specify a different target for debug output. All components have a default log file which will norally be in /tmp or /var/log and this is where debug will be written to if this value is empty. Adding a path here will temporarily redirect debug, and other logging output, to this file. This option is a simple filename and you are debugging several components then they will all try and write to the same file with undesirable consequences. Appending a '+' to the filename will cause the file to be created with a '.' suffix containing your process id. In this way debug from each run of a component is kept separate. This is the recommended setting as it will also prevent subsequent runs from overwriting the same log. You should ensure that permissions are set up to allow writing to the file and directory specified here.", + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_CHECK_PERIOD", + default => "900", + description => "Time period used when calculating overall system health", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to indicate what period of historical events are used in this calculation. This value is expressed in seconds and is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_WAR_COUNT", + default => "1", + description => "Number of warnings indicating system alert state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alert state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_ERR_COUNT", + default => "1", + description => "Number of errors indicating system alert state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alert state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_FAT_COUNT", + default => "0", + description => "Number of fatal error indicating system alert state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alert state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_WAR_COUNT", + default => "100", + description => "Number of warnings indicating system alarm state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alarm state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_ERR_COUNT", + default => "10", + description => "Number of errors indicating system alarm state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alarm state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_FAT_COUNT", + default => "1", + description => "Number of fatal error indicating system alarm state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alarm state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_RECORD_EVENT_STATS", + default => "yes", + description => "Record event statistical information, switch off if too slow", + help => "This version of ZoneMinder records detailed information about events in the Stats table. This can help in profiling what the optimum settings are for Zones though this is tricky at present. However in future releases this will be done more easily and intuitively, especially with a large sample of events. The default option of 'yes' allows this information to be collected now in readiness for this but if you are concerned about performance you can switch this off in which case no Stats information will be saved.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_RECORD_DIAG_IMAGES", + default => "no", + description => "Record intermediate alarm diagnostic images, can be very slow", + help => "In addition to recording event statistics you can also record the intermediate diagnostic images that display the results of the various checks and processing that occur when trying to determine if an alarm event has taken place. There are several of these images generated for each frame and zone for each alarm or alert frame so this can have a massive impact on performance. Only switch this setting on for debug or analysis purposes and remember to switch it off again once no longer required.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_DUMP_CORES", + default => "no", + description => "Create core files on unexpected process failure.", + help => "When an unrecoverable error occurs in a ZoneMinder binary process is has traditionally been trapped and the details written to logs to aid in remote analysis. However in some cases it is easier to diagnose the error if a core file, which is a memory dump of the process at the time of the error, is created. This can be interactively analysed in the debugger and may reveal more or better information than that available from the logs. This option is recommended for advanced users only otherwise leave at the default. Note using this option to trigger core files will mean that there will be no indication in the binary logs that a process has died, they will just stop, however the zmdc log will still contain an entry. Also note that you may have to explicitly enable core file creation on your system via the 'ulimit -c' command or other means otherwise no file will be created regardless of the value of this option.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_PATH_MAP", + default => "/dev/shm", + description => "Path to the mapped memory files that that ZoneMinder can use", + help => "ZoneMinder has historically used IPC shared memory for shared data between processes. This has it's advantages and limitations. This version of ZoneMinder can use an alternate method, mapped memory, instead with can be enabled with the --enable--mmap directive to configure. This requires less system configuration and is generally more flexible. However it requires each shared data segment to map onto a filesystem file. This option indicates where those mapped files go. You should ensure that this location has sufficient space for these files and for the best performance it should be a tmpfs file system or ramdisk otherwise disk access may render this method slower than the regular shared memory one.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_SOCKS", + default => "/tmp/zm", + description => "Path to the various Unix domain socket files that ZoneMinder uses", + help => "ZoneMinder generally uses Unix domain sockets where possible. This reduces the need for port assignments and prevents external applications from possibly compromising the daemons. However each Unix socket requires a .sock file to be created. This option indicates where those socket files go.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_LOGS", + default => "/var/log/zm", + description => "Path to the various logs that the ZoneMinder daemons generate", + help => "There are various daemons that are used by ZoneMinder to perform various tasks. Most generate helpful log files and this is where they go. They can be deleted if not required for debugging.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_SWAP", + default => "/tmp/zm", + description => "Path to location for temporary swap images used in streaming", + help => "Buffered playback requires temporary swap images to be stored for each instance of the streaming daemons. This option determines where these images will be stored. The images will actually be stored in sub directories beneath this location and will be automatically cleaned up after a period of time.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_WEB_TITLE_PREFIX", + default => "ZM", + description => "The title prefix displayed on each window", + help => "If you have more than one installation of ZoneMinder it can be helpful to display different titles for each one. Changing this option allows you to customise the window titles to include further information to aid identification.", + type => $types{string}, + category => "web", + }, + { + name => "ZM_WEB_RESIZE_CONSOLE", + default => "yes", + description => "Should the console window resize itself to fit", + help => "Traditionally the main ZoneMinder web console window has resized itself to shrink to a size small enough to list only the monitors that are actually present. This is intended to make the window more unobtrusize but may not be to everyones tastes, especially if opened in a tab in browsers which support this kind if layout. Switch this option off to have the console window size left to the users preference", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_POPUP_ON_ALARM", + default => "yes", + description => "Should the monitor window jump to the top if an alarm occurs", + help => "When viewing a live monitor stream you can specify whether you want the window to pop to the front if an alarm occurs when the window is minimised or behind another window. This is most useful if your monitors are over doors for example when they can pop up if someone comes to the doorway.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_OPT_X10", + default => "no", + description => "Support interfacing with X10 devices", + help => "If you have an X10 Home Automation setup in your home you can use ZoneMinder to initiate or react to X10 signals if your computer has the appropriate interface controller. This option indicates whether X10 options will be available in the browser client.", + type => $types{boolean}, + category => "x10", + }, + { + name => "ZM_X10_DEVICE", + default => "/dev/ttyS0", + description => "What device is your X10 controller connected on", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => "If you have an X10 controller device (e.g. XM10U) connected to your computer this option details which port it is conected on, the default of /dev/ttyS0 maps to serial or com port 1.", + type => $types{abs_path}, + category => "x10", + }, + { + name => "ZM_X10_HOUSE_CODE", + default => "A", + description => "What X10 house code should be used", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => "X10 devices are grouped together by identifying them as all belonging to one House Code. This option details what that is. It should be a single letter between A and P.", + type => { db_type=>"string", hint=>"A-P", pattern=>qr|^([A-P])|i, format=>q( uc($1) ) }, + category => "x10", + }, + { + name => "ZM_X10_DB_RELOAD_INTERVAL", + default => "60", + description => "How often (in seconds) the X10 daemon reloads the monitors from the database", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => "The zmx10 daemon periodically checks the database to find out what X10 events trigger, or result from, alarms. This option determines how frequently this check occurs, unless you change this area frequently this can be a fairly large value.", + type => $types{integer}, + category => "x10", + }, + { + name => "ZM_WEB_SOUND_ON_ALARM", + default => "no", + description => "Should the monitor window play a sound if an alarm occurs", + help => "When viewing a live monitor stream you can specify whether you want the window to play a sound to alert you if an alarm occurs.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_ALARM_SOUND", + default => "", + description => "The sound to play on alarm, put this in the sounds directory", + help => "You can specify a sound file to play if an alarm occurs whilst you are watching a live monitor stream. So long as your browser understands the format it does not need to be any particular type. This file should be placed in the sounds directory defined earlier.", + type => $types{file}, + requires => [ { name => "ZM_WEB_SOUND_ON_ALARM", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_COMPACT_MONTAGE", + default => "no", + description => "Compact the montage view by removing extra detail", + help => "The montage view shows the output of all of your active monitors in one window. This include a small menu and status information for each one. This can increase the web traffic and make the window larger than may be desired. Setting this option on removes all this extraneous information and just displays the images.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_OPT_FAST_DELETE", + default => "yes", + description => "Delete only event database records for speed", + help => "Normally an event created as the result of an alarm consists of entries in one or more database tables plus the various files associated with it. When deleting events in the browser it can take a long time to remove all of this if your are trying to do a lot of events at once. It is recommended that you set this option which means that the browser client only deletes the key entries in the events table, which means the events will no longer appear in the listing, and leaves the zmaudit daemon to clear up the rest later.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_STRICT_VIDEO_CONFIG", + default => "yes", + description => "Allow errors in setting video config to be fatal", + help => "With some video devices errors can be reported in setting the various video attributes when in fact the operation was successful. Switching this option off will still allow these errors to be reported but will not cause them to kill the video capture daemon. Note however that doing this will cause all errors to be ignored including those which are genuine and which may cause the video capture to not function correctly. Use this option with caution.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_SIGNAL_CHECK_POINTS", + default => "10", + description => "How many points in a captured image to check for signal loss", + help => "For locally attached video cameras ZoneMinder can check for signal loss by looking at a number of random points on each captured image. If all of these points are set to the same fixed colour then the camera is assumed to have lost signal. When this happens any open events are closed and a short one frame signal loss event is generated, as is another when the signal returns. This option defines how many points on each image to check. Note that this is a maximum, any points found to not have the check colour will abort any further checks so in most cases on a couple of points will actually be checked. Network and file based cameras are never checked.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_V4L_MULTI_BUFFER", + default => "yes", + description => "Use more than one buffer for Video 4 Linux devices", + help => "Performance when using Video 4 Linux devices is usually best if multiple buffers are used allowing the next image to be captured while the previous one is being processed. If you have multiple devices on a card sharing one input that requires switching then this approach can sometimes cause frames from one source to be mixed up with frames from another. Switching this option off prevents multi buffering resulting in slower but more stable image capture. This option is ignored for non-local cameras or if only one input is present on a capture chip. This option addresses a similar problem to the ZM_CAPTURES_PER_FRAME option and you should normally change the value of only one of the options at a time.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_CAPTURES_PER_FRAME", + default => "1", + description => "How many images are captured per returned frame, for shared local cameras", + help => "If you are using cameras attached to a video capture card which forces multiple inputs to share one capture chip, it can sometimes produce images with interlaced frames reversed resulting in poor image quality and a distinctive comb edge appearance. Increasing this setting allows you to force additional image captures before one is selected as the captured frame. This allows the capture hardware to 'settle down' and produce better quality images at the price of lesser capture rates. This option has no effect on (a) network cameras, or (b) where multiple inputs do not share a capture chip. This option addresses a similar problem to the ZM_V4L_MULTI_BUFFER option and you should normally change the value of only one of the options at a time.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_FILTER_RELOAD_DELAY", + default => "300", + description => "How often (in seconds) filters are reloaded in zmfilter", + help => "ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are reloaded from the database to get the latest versions or new filters. If you don't change filters very often this value can be set to a large value.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_FILTER_EXECUTE_INTERVAL", + default => "60", + description => "How often (in seconds) to run automatic saved filters", + help => "ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are executed on the saved event in the database. If you want a rapid response to new events this should be a smaller value, however this may increase the overall load on the system and affect performance of other elements.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_OPT_UPLOAD", + default => "no", + description => "Should ZoneMinder support uploading events from filters", + help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should be uploaded to a remote server for archiving. This option specifies whether this functionality should be available", + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_FORMAT", + default => "tar", + description => "What format the uploaded events should be created in.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => "Uploaded events may be stored in either .tar or .zip format, this option specifies which. Note that to use this you will need to have the Archive::Tar and/or Archive::Zip perl modules installed.", + type => { db_type=>"string", hint=>"tar|zip", pattern=>qr|^([tz])|i, format=>q( $1 =~ /^t/ ? "tar" : "zip" ) }, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_COMPRESS", + default => "no", + description => "Should archive files be compressed", + help => "When the archive files are created they can be compressed. However in general since the images are compressed already this saves only a minimal amount of space versus utilising more CPU in their creation. Only enable if you have CPU to waste and are limited in disk space on your remote server or bandwidth.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_ANALYSE", + default => "no", + description => "Include the analysis files in the archive", + help => "When the archive files are created they can contain either just the captured frames or both the captured frames and, for frames that caused an alarm, the analysed image with the changed area highlighted. This option controls files are included. Only include analysed frames if you have a high bandwidth connection to the remote server or if you need help in figuring out what caused an alarm in the first place as archives with these files in can be considerably larger.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_PROTOCOL", + default => "ftp", + description => "What protocol to use to upload events", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => "ZoneMinder can upload events to a remote server using either FTP or SFTP. Regular FTP is widely supported but not necessarily very secure whereas SFTP (Secure FTP) runs over an ssh connection and so is encrypted and uses regular ssh ports. Note that to use this you will need to have the appropriate perl module, either Net::FTP or Net::SFTP installed depending on your choice.", + type => { db_type=>"string", hint=>"ftp|sftp", pattern=>qr|^([tz])|i, format=>q( $1 =~ /^f/ ? "ftp" : "sftp" ) }, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_HOST", + default => "", + description => "The remote server to upload to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the name, or ip address, of the server to use.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{hostname}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_HOST", + default => "", + description => "The remote server to upload events to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the name, or ip address, of the server to use.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{hostname}, + category => "upload", + }, + { + name => "ZM_UPLOAD_PORT", + default => "", + description => "The port on the remote upload server, if not the default (SFTP only)", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. If you are using the SFTP protocol then this option allows you to specify a particular port to use for connection. If this option is left blank then the default, port 22, is used. This option is ignored for FTP uploads.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_USER", + default => "", + description => "Your ftp username", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the username that ZoneMinder should use to log in for ftp transfer.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{alphanum}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_USER", + default => "", + description => "Remote server username", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the username that ZoneMinder should use to log in for transfer.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{alphanum}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_PASS", + default => "", + description => "Your ftp password", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the password that ZoneMinder should use to log in for ftp transfer.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{string}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_PASS", + default => "", + description => "Remote server password", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the password that ZoneMinder should use to log in for transfer. If you are using certicate based logins for SFTP servers you can leave this option blank.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{string}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_LOC_DIR", + default => "/tmp/zm", + description => "The local directory in which to create upload files", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{abs_path}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_LOC_DIR", + default => "/tmp/zm", + description => "The local directory in which to create upload files", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{abs_path}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_REM_DIR", + default => "", + description => "The remote directory to upload to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the remote directory that ZoneMinder should use to upload event files to.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{rel_path}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_REM_DIR", + default => "", + description => "The remote directory to upload to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the remote directory that ZoneMinder should use to upload event files to.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{rel_path}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_TIMEOUT", + default => "120", + description => "How long to allow the transfer to take for each file", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the maximum ftp inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_TIMEOUT", + default => "120", + description => "How long to allow the transfer to take for each file", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the maximum inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_PASSIVE", + default => "yes", + description => "Use passive ftp when uploading", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates that ftp transfers should be done in passive mode. This uses a single connection for all ftp activity and, whilst slower than active transfers, is more robust and likely to work from behind filewalls. This option is ignored for SFTP transfers.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => "If your computer is behind a firewall or proxy you may need to set FTP to passive mode. In fact for simple transfers it makes little sense to do otherwise anyway but you can set this to 'No' if you wish.", + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_DEBUG", + default => "no", + description => "Switch ftp debugging on", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. If you are having (or expecting) troubles with uploading events then setting this to 'yes' permits additional information to be included in the zmfilter log file.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_DEBUG", + default => "no", + description => "Switch upload debugging on", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. If you are having (or expecting) troubles with uploading events then setting this to 'yes' permits additional information to be generated by the underlying transfer modules and included in the logs.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_OPT_EMAIL", + default => "no", + description => "Should ZoneMinder email you details of events that match corresponding filters", + help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details emailed to you at a designated email address. This will allow you to be notified of events as soon as they occur and also to quickly view the events directly. This option specifies whether this functionality should be available. The email created with this option can be any size and is intended to be sent to a regular email reader rather than a mobile device.", + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_EMAIL_ADDRESS", + default => "", + description => "The email address to send matching event details to", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the email address that any events that match the appropriate filters will be sent to.", + type => $types{email}, + category => "mail", + }, + { + name => "ZM_EMAIL_TEXT", + default => 'subject = "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)" +body = " +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder"', + description => "The text of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the content of the email that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "hidden", + }, + { + name => "ZM_EMAIL_SUBJECT", + default => "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)", + description => "The subject of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the subject of the email that is sent for any events that match the appropriate filters.", + type => $types{string}, + category => "mail", + }, + { + name => "ZM_EMAIL_BODY", + default => " +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder", + description => "The body of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the content of the email that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "mail", + }, + { + name => "ZM_OPT_MESSAGE", + default => "no", + description => "Should ZoneMinder message you with details of events that match corresponding filters", + help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details sent to you at a designated short message email address. This will allow you to be notified of events as soon as they occur. This option specifies whether this functionality should be available. The email created by this option will be brief and is intended to be sent to an SMS gateway or a minimal mail reader such as a mobile device or phone rather than a regular email reader.", + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_MESSAGE_ADDRESS", + default => "", + description => "The email address to send matching event details to", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the short message email address that any events that match the appropriate filters will be sent to.", + type => $types{email}, + category => "mail", + }, + { + name => "ZM_MESSAGE_TEXT", + default => 'subject = "ZoneMinder: Alarm - %MN%-%EI%" +body = "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score."', + description => "The text of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the content of the message that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "hidden", + }, + { + name => "ZM_MESSAGE_SUBJECT", + default => "ZoneMinder: Alarm - %MN%-%EI%", + description => "The subject of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the subject of the message that is sent for any events that match the appropriate filters.", + type => $types{string}, + category => "mail", + }, + { + name => "ZM_MESSAGE_BODY", + default => "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.", + description => "The body of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the content of the message that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "mail", + }, + { + name => "ZM_NEW_MAIL_MODULES", + default => "no", + description => "Use a newer perl method to send emails", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "Traditionally ZoneMinder has used the MIME::Entity perl module to construct and send notification emails and messages. Some people have reported problems with this module not being present at all or flexible enough for their needs. If you are one of those people this option allows you to select a new mailing method using MIME::Lite and Net::SMTP instead. This method was contributed by Ross Melin and should work for everyone but has not been extensively tested so currently is not selected by default.", + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_EMAIL_HOST", + default => "localhost", + description => "The host address of your SMTP mail server", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "If you have chosen SMTP as the method by which to send notification emails or messages then this option allows you to choose which SMTP server to use to send them. The default of localhost may work if you have the sendmail, exim or a similar daemon running however you may wish to enter your ISP's SMTP mail server here.", + type => $types{hostname}, + category => "mail", + }, + { + name => "ZM_FROM_EMAIL", + default => "", + description => "The email address you wish your event notifications to originate from", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "The emails or messages that will be sent to you informing you of events can appear to come from a designated email address to help you with mail filtering etc. An address of something like ZoneMinder\@your.domain is recommended.", + type => $types{email}, + category => "mail", + }, + { + name => "ZM_URL", + default => "", + description => "The URL of your ZoneMinder installation", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "The emails or messages that will be sent to you informing you of events can include a link to the events themselves for easy viewing. If you intend to use this feature then set this option to the url of your installation as it would appear from where you read your email, e.g. http://host.your.domain/zm.php.", + type => $types{url}, + category => "mail", + }, + { + name => "ZM_MAX_RESTART_DELAY", + default => "600", + description => "Maximum delay (in seconds) for daemon restart attempts.", + help => "The zmdc (zm daemon control) process controls when processeses are started or stopped and will attempt to restart any that fail. If a daemon fails frequently then a delay is introduced between each restart attempt. If the daemon stills fails then this delay is increased to prevent extra load being placed on the system by continual restarts. This option controls what this maximum delay is.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_WATCH_CHECK_INTERVAL", + default => "10", + description => "How often to check the capture daemons have not locked up", + help => "The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines how often the daemons are checked.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_WATCH_MAX_DELAY", + default => "5", + description => "The maximum delay allowed since the last captured image", + help => "The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines the maximum delay to allow since the last captured frame. The daemon will be restarted if it has not captured any images after this period though the actual restart may take slightly longer in conjunction with the check interval value above.", + type => $types{decimal}, + category => "system", + }, + { + + name => "ZM_RUN_AUDIT", + default => "yes", + description => "Run zmaudit to check data consistency", + help => "The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using 'fast deletes' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. This option controls whether zmaudit is run in the background and performs these checks and fixes continuously. This is recommended for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to not have zmaudit running unconditionally and schedule occasional checks at other, more convenient, times.", + type => $types{boolean}, + category => "system", + }, + { + + name => "ZM_AUDIT_CHECK_INTERVAL", + default => "900", + description => "How often to check database and filesystem consistency", + help => "The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using 'fast deletes' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. The default check interval of 900 seconds (15 minutes) is fine for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to make this interval much larger to reduce the impact on your system. This option determines how often these checks are performed.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_FORCED_ALARM_SCORE", + default => "255", + description => "Score to give forced alarms", + help => "The 'zmu' utility can be used to force an alarm on a monitor rather than rely on the motion detection algorithms. This option determines what score to give these alarms to distinguish them from regular ones. It must be 255 or less.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_BULK_FRAME_INTERVAL", + default => "100", + description => "How often a bulk frame should be written to the database", + help => "Traditionally ZoneMinder writes an entry into the Frames database table for each frame that is captured and saved. This works well in motion detection scenarios but when in a DVR situation ('Record' or 'Mocord' mode) this results in a huge number of frame writes and a lot of database and disk bandwidth for very little additional information. Setting this to a non-zero value will enabled ZoneMinder to group these non-alarm frames into one 'bulk' frame entry which saves a lot of bandwidth and space. The only disadvantage of this is that timing information for individual frames is lost but in constant frame rate situations this is usually not significant. This setting is ignored in Modect mode and individual frames are still written if an alarm occurs in Mocord mode also.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_EVENT_CLOSE_MODE", + default => "idle", + description => "When continuous events are closed.", + help => "When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section. This option controls what happens when an alarm occurs in Mocord mode. The 'time' setting means that the event will be closed at the end of the section regardless of alarm activity. The 'idle' setting means that the event will be closed at the end of the section if there is no alarm activity occuring at the time otherwise it will be closed once the alarm is over meaning the event may end up being longer than the normal section length. The 'alarm' setting means that if an alarm occurs during the event, the event will be closed once the alarm is over regardless of when this occurs. This has the effect of limiting the number of alarms to one per event and the events will be shorter than the section length if an alarm has occurred.", + type => $types{boolean}, + type => { db_type=>"string", hint=>"time|idle|alarm", pattern=>qr|^([tia])|i, format=>q( ($1 =~ /^t/) ? "time" : ($1 =~ /^i/ ? "idle" : "time" ) ) }, + category => "config", + }, + # Deprecated, superseded by event close mode + { + name => "ZM_FORCE_CLOSE_EVENTS", + default => "no", + description => "Close events at section ends.", + help => "When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section and ordinarily this will prevent the event being closed until the motion has ceased. Switching this option on will force the event closed at the specified time regardless of any motion activity.", + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_CREATE_ANALYSIS_IMAGES", + default => "yes", + description => "Create analysed alarm images with motion outlined", + help => "By default during an alarm ZoneMinder records both the raw captured image and one that has been analysed and had areas where motion was detected outlined. This can be very useful during zone configuration or in analysing why events occured. However it also incurs some overhead and in a stable system may no longer be necessary. This parameter allows you to switch the generation of these images off.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_WEIGHTED_ALARM_CENTRES", + default => "no", + description => "Use a weighted algorithm to calculate the centre of an alarm", + help => "ZoneMinder will always calculate the centre point of an alarm in a zone to give some indication of where on the screen it is. This can be used by the experimental motion tracking feature or your own custom extensions. In the alarmed or filtered pixels mode this is a simple midpoint between the extents of the detected pxiesl. However in the blob method this can instead be calculated using weighted pixel locations to give more accurate positioning for irregularly shaped blobs. This method, while more precise is also slower and so is turned off by default.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_EVENT_IMAGE_DIGITS", + default => "3", + description => "How many significant digits are used in event image numbering", + help => "As event images are captured they are stored to the filesystem with a numerical index. By default this index has three digits so the numbers start 001, 002 etc. This works works for most scenarios as events with more than 999 frames are rarely captured. However if you have extremely long events and use external applications then you may wish to increase this to ensure correct sorting of images in listings etc. Warning, increasing this value on a live system may render existing events unviewable as the event will have been saved with the previous scheme. Decreasing this value should have no ill effects.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_DEFAULT_ASPECT_RATIO", + default => "4:3", + description => "The default width:height aspect ratio used in monitors", + help => "When specifying the dimensions of monitors you can click a checkbox to ensure that the width stays in the correct ratio to the height, or vice versa. This setting allows you to indicate what the ratio of these settings should be. This should be specified in the format : and the default of 4:3 normally be acceptable but 11:9 is another common setting. If the checkbox is not clicked when specifying monitor dimensions this setting has no effect.", + type => $types{string}, + category => "config", + }, + { + name => "ZM_USER_SELF_EDIT", + default => "no", + description => "Allow unprivileged users to change their details", + help => "Ordinarily only users with system edit privilege are able to change users details. Switching this option on allows ordinary users to change their passwords and their language settings", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_OPT_FRAME_SERVER", + default => "no", + description => "Should analysis farm out the writing of images to disk", + #requires => [ { name => "ZM_OPT_ADAPTIVE_SKIP", value => "yes" } ], + help => "In some circumstances it is possible for a slow disk to take so long writing images to disk that it causes the analysis daemon to fall behind especially during high frame rate events. Setting this option to yes enables a frame server daemon (zmf) which will be sent the images from the analysis daemon and will do the actual writing of images itself freeing up the analysis daemon to get on with other things. Should this transmission fail or other permanent or transient error occur, this function will fall back to the analysis daemon.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_FRAME_SOCKET_SIZE", + default => "0", + description => "Specify the frame server socket buffer size if non-standard", + requires => [ { name => "ZM_OPT_FRAME_SERVER", value => "yes" } ], + help => "For large captured images it is possible for the writes from the analysis daemon to the frame server to fail as the amount to be written exceeds the default buffer size. While the images are then written by the analysis daemon so no data is lost, it defeats the object of the frame server daemon in the first place. You can use this option to indicate that a larger buffer size should be used. Note that you may have to change the existing maximum socket buffer size on your system via sysctl (or in /proc/sys/net/core/wmem_max) to allow this new size to be set. Alternatively you can change the default buffer size on your system in the same way in which case that will be used with no change necessary in this option", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_OPT_CONTROL", + default => "no", + description => "Support controllable (e.g. PTZ) cameras", + help => "ZoneMinder includes limited support for controllable cameras. A number of sample protocols are included and others can easily be added. If you wish to control your cameras via ZoneMinder then select this option otherwise if you only have static cameras or use other control methods then leave this option off.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_OPT_TRIGGERS", + default => "no", + description => "Interface external event triggers via socket or device files", + help => "ZoneMinder can interact with external systems which prompt or cancel alarms. This is done via the zmtrigger.pl script. This option indicates whether you want to use these external triggers. Most people will say no here.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_CHECK_FOR_UPDATES", + default => "yes", + description => "Check with zoneminder.com for updated versions", + help => "From ZoneMinder version 1.17.0 onwards new versions are expected to be more frequent. To save checking manually for each new version ZoneMinder can check with the zoneminder.com website to determine the most recent release. These checks are infrequent, about once per week, and no personal or system information is transmitted other than your current version number. If you do not wish these checks to take place or your ZoneMinder system has no internet access you can switch these check off with this configuration variable", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_UPDATE_CHECK_PROXY", + default => "", + description => "Proxy url if required to access zoneminder.com", + help => "If you use a proxy to access the internet then ZoneMinder needs to know so it can access zoneminder.com to check for updates. If you do use a proxy enter the full proxy url here in the form of http://:/", + type => $types{string}, + category => "system", + }, + { + name => "ZM_SHM_KEY", + default => "0x7a6d0000", + description => "Shared memory root key to use", + help => "ZoneMinder uses shared memory to speed up communication between modules. To identify the right area to use shared memory keys are used. This option controls what the base key is, each monitor will have it's Id or'ed with this to get the actual key used. You will not normally need to change this value unless it clashes with another instance of ZoneMinder on the same machine. Only the first four hex digits are used, the lower four will be masked out and ignored.", + type => $types{hexadecimal}, + category => "system", + }, + # Deprecated, really no longer necessary + { + name => "ZM_WEB_REFRESH_METHOD", + default => "javascript", + description => "What method windows should use to refresh themselves", + help => "Many windows in Javascript need to refresh themselves to keep their information current. This option determines what method they should use to do this. Choosing 'javascript' means that each window will have a short JavaScript statement in with a timer to prompt the refresh. This is the most compatible method. Choosing 'http' means the refresh instruction is put in the HTTP header. This is a cleaner method but refreshes are interrupted or cancelled when a link in the window is clicked meaning that the window will no longer refresh and this would have to be done manually.", + type => { db_type=>"string", hint=>"javascript|http", pattern=>qr|^([jh])|i, format=>q( $1 =~ /^j/ ? "javascript" : "http" ) }, + category => "hidden", + }, + { + name => "ZM_WEB_EVENT_SORT_FIELD", + default => "DateTime", + description => "Default field the event lists are sorted by", + help => "Events in lists can be initially ordered in any way you want. This option controls what field is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the 'Prev' and 'Next' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.", + type => { db_type=>"string", hint=>"Id|Name|Cause|MonitorName|DateTime|Length|Frames|AlarmFrames|TotScore|AvgScore|MaxScore", pattern=>qr|.|, format=>q( $1 ) }, + category => "web", + }, + { + name => "ZM_WEB_EVENT_SORT_ORDER", + default => "asc", + description => "Default order the event lists are sorted by", + help => "Events in lists can be initially ordered in any way you want. This option controls what order (ascending or descending) is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the 'Prev' and 'Next' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.", + type => { db_type=>"string", hint=>"asc|desc", pattern=>qr|^([ad])|i, format=>q( $1 =~ /^a/i ? "asc" : "desc" ) }, + category => "web", + }, + { + name => "ZM_WEB_EVENTS_PER_PAGE", + default => "25", + description => "How many events to list per page in paged mode", + help => "In the event list view you can either list all events or just a page at a time. This option controls how many events are listed per page in paged mode and how often to repeat the column headers in non-paged mode.", + type => $types{integer}, + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMBS", + default => "no", + description => "Display mini-thumbnails of event images in event lists", + help => "Ordinarily the event lists just display text details of the events to save space and time. By switching this option on you can also display small thumbnails to help you identify events of interest. The size of these thumbnails is controlled by the following two options.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMB_WIDTH", + default => "48", + description => "The width of the thumbnails that appear in the event lists", + help => "This options controls the width of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a height instead in the next option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.", + type => $types{integer}, + requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMB_HEIGHT", + default => "0", + description => "The height of the thumbnails that appear in the event lists", + help => "This options controls the height of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a width instead in the previous option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.", + type => $types{integer}, + requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_USE_OBJECT_TAGS", + default => "yes", + description => "Wrap embed in object tags for media content", + help => "There are two methods of including media content in web pages. The most common way is use the EMBED tag which is able to give some indication of the type of content. However this is not a standard part of HTML. The official method is to use OBJECT tags which are able to give more information allowing the correct media viewers etc to be loaded. However these are less widely supported and content may be specifically tailored to a particular platform or player. This option controls whether media content is enclosed in EMBED tags only or whether, where appropriate, it is additionally wrapped in OBJECT tags. Currently OBJECT tags are only used in a limited number of circumstances but they may become more widespread in the future. It is suggested that you leave this option on unless you encounter problems playing some content.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_H_REFRESH_MAIN", + default => "300", + introduction => "There are now a number of options that are grouped into bandwidth categories, this allows you to configure the ZoneMinder client to work optimally over the various access methods you might to access the client.\n\nThe next few options control what happens when the client is running in 'high' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a local network or high speed link. In most cases the default values will be suitable as a starting point.", + description => "How often (in seconds) the main console window should refresh itself", + help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_CYCLE", + default => "10", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_IMAGE", + default => "5", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_STATUS", + default => "3", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_EVENTS", + default => "30", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "highband", + }, + { + name => "ZM_WEB_H_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_VIDEO_BITRATE", + default => "150000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_VIDEO_MAXFPS", + default => "15", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_SCALE_THUMBS", + default => "no", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "highband", + }, + { + name => "ZM_WEB_H_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", + type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_SHOW_PROGRESS", + default => "yes", + description => "Show the progress of replay in event view.", + help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", + type => $types{boolean}, + category => "highband", + }, + { + name => "ZM_WEB_H_AJAX_TIMEOUT", + default => "3000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_M_REFRESH_MAIN", + default => "300", + description => "How often (in seconds) the main console window should refresh itself", + help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", + type => $types{integer}, + introduction => "The next few options control what happens when the client is running in 'medium' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a slower cable or DSL link. In most cases the default values will be suitable as a starting point.", + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_CYCLE", + default => "20", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_IMAGE", + default => "10", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_STATUS", + default => "5", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_EVENTS", + default => "60", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "medband", + }, + { + name => "ZM_WEB_M_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_VIDEO_BITRATE", + default => "75000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_VIDEO_MAXFPS", + default => "10", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "medband", + }, + { + name => "ZM_WEB_M_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", + type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_SHOW_PROGRESS", + default => "yes", + description => "Show the progress of replay in event view.", + help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", + type => $types{boolean}, + category => "medband", + }, + { + name => "ZM_WEB_M_AJAX_TIMEOUT", + default => "5000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_L_REFRESH_MAIN", + default => "300", + description => "How often (in seconds) the main console window should refresh itself", + introduction => "The next few options control what happens when the client is running in 'low' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a modem or slow link. In most cases the default values will be suitable as a starting point.", + help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_CYCLE", + default => "30", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_IMAGE", + default => "15", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_STATUS", + default => "10", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_EVENTS", + default => "180", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "lowband", + }, + { + name => "ZM_WEB_L_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_VIDEO_BITRATE", + default => "25000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_VIDEO_MAXFPS", + default => "5", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "lowband", + }, + { + name => "ZM_WEB_L_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", + type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_SHOW_PROGRESS", + default => "no", + description => "Show the progress of replay in event view.", + help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", + type => $types{boolean}, + category => "lowband", + }, + { + name => "ZM_WEB_L_AJAX_TIMEOUT", + default => "10000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_P_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_VIDEO_BITRATE", + default => "8000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_VIDEO_MAXFPS", + default => "5", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_AJAX_TIMEOUT", + default => "10000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_DYN_LAST_VERSION", + default => "", + description => "What the last version of ZoneMinder recorded from zoneminder.com is", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_CURR_VERSION", + default => "1.25.0", + description => "What the effective current version of ZoneMinder is, might be different from actual if versions ignored", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_DB_VERSION", + default => "1.25.0", + description => "What the version of the database is, from zmupdate", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_LAST_CHECK", + default => "", + description => "When the last check for version from zoneminder.com was", + help => "", + type => $types{integer}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_NEXT_REMINDER", + default => "", + description => "When the earliest time to remind about versions will be", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_DONATE_REMINDER_TIME", + default => 0, + description => "When the earliest time to remind about donations will be", + help => "", + type => $types{integer}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_SHOW_DONATE_REMINDER", + default => "yes", + description => "Remind about donations or not", + help => "", + type => $types{boolean}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_EYEZM_DEBUG", + default => "no", + description => "Switch additional debugging on for eyeZm Plugin", + help => "Enable or Disable extra debugging from the eyeZm Plugin. Extra debugging information will be displayed in it's own file (EYEZM_LOG_TO_FILE is set), or your Apache error log", + type => $types{boolean}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_LOG_TO_FILE", + default => "yes", + description => "When eyeZm Debugging is enabled, enabling this logs output to it's own file", + help => "When EYEZM_DEBUG is on and EYEZM_LOG_TO_FILE is on, output generated from the eyeZm Plugin will go to it's own file. Otherwise it will go to the apache error log.", + type => $types{boolean}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_LOG_FILE", + default => "/var/log/zm/zm_xml.log", + description => "Default filename to use when logging eyeZm Output and EYEZM_LOG_TO_FILE is enabled", + help => "This file will contain it's own output from the eyeZm Plugin when EYEZM_LOG_TO_FILE and EYEZM_DEBUG are both enabled", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_EVENT_VCODEC", + default => "mpeg4", + description => "Default video-codec to use for encoding events", + help => "The eyeZm Plugin calls FFMPEG externally to encode the captured images. If your FFMPEG is not built with support for H264, change this to MPEG-4. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+).", + type => { db_type=>"string", hint=>"mpeg4|h264", pattern=>qr|^([mh])|i, format=>q( $1 =~ /^m/ ? "mpeg4" : "h264" ) }, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_FEED_VCODEC", + default => "mjpeg", + description => "Default video-codec to use for streaming the live feed", + help => "Determines whether the live stream is generated using native MJPEG streaming with ZoneMinder, or H264 using FFMPEG and HTML-5 streaming. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+). This is just a default parameter, and can be overridden with eyeZm.", + type => { db_type=>"string", hint=>"mjpeg|h264", pattern=>qr|^([mh])|i, format=>q( $1 =~ /^m/ ? "mjpeg" : "h264" ) }, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_DEFAULT_BR", + default => "96k", + description => "Default bit-rate to use with FFMPEG for H264 streaming", + help => "When using the eyeZm Plugin to stream H264 data, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_DEFAULT_EVBR", + default => "128k", + description => "Default bit-rate to use with FFMPEG for H264 event viewing", + help => "When using the eyeZm Plugin to view events in H264, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_TIMEOUT", + default => "20", + description => "Timeout (sec) to wait for H264 stream to start before terminating", + help => "The eyeZm Plugin will attempt to spawn an H264 stream when requested, and require that it complete within the timeout specified. If you have a slow system or find through the logs that the H264 stream is not starting because the timeout is expiring, even though FFMPEG is running, try increasing this value. If you have a fast system, decreasing this value can improve the responsiveness when there are issues starting H264 streams", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_SEG_DURATION", + default => "3", + description => "Segment duration used for streaming using HTTP-5 Streaming protocol", + help => "The HTTP-5 Live Streaming Protocol segments the input video stream into small chunks of a duration specified by this parameter. Increasing the segment duration will help with choppy connections on the other end, but will increase the latency in starting a stream.", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_PATH_PLUGINS", + default => "/usr/share/zm", + description => "Path to the plugin folder", + help => "3d-party plugins have to be placed here.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PLUGIN_EXTENSION", + default => ".zmpl", + description => "Default extension of plugins to found.", + help => "Default extension of plugins to found.", + type => $types{rel_path}, + category => "paths", + }, + { + name => "ZM_PLUGINS_CONFIG_PATH", + default => "/usr/share/zm/plugins.conf", + description => "Path to the config file for plugins.", + help => "Path to the config file for plugins.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_LOAD_PLUGINS", + default => "no", + description => "Load and use 3d-party plugins", + help => "3d-party plugins will be loaded and used for analysing.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_TURNOFF_NATIVE_ANALYSIS", + default => "no", + description => "Turn native ZM\'s image analysis possibility off", + help => "Image analysis with ZM\'s motion detected function will be turned off. Only detection functions from loaded plugins will be used. Note, that if no plugins have be loaded, no detection will be done.", + type => $types{boolean}, + category => "config", + }, + +); + +our %options_hash = map { ( $_->{name}, $_ ) } @options; + +# This function should never need to be called explicitly, except if +# this module is 'require'd rather than 'use'd. See zmconfgen.pl. +sub initialiseConfig +{ + return if ( $configInitialised ); + + # Do some initial data munging to finish the data structures + # Create option ids + my $option_id = 0; + foreach my $option ( @options ) + { + if ( defined($option->{default}) ) + { + $option->{value} = $option->{default} + } + else + { + $option->{value} = ''; + } + #next if ( $option->{category} eq 'hidden' ); + $option->{id} = $option_id++; + } + $configInitialised = 1; +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::ConfigData - ZoneMinder Configuration Data module + +=head1 SYNOPSIS + + use ZoneMinder::ConfigData; + use ZoneMinder::ConfigData qw(:all); + + loadConfigFromDB(); + saveConfigToDB(); + +=head1 DESCRIPTION + +The ZoneMinder:ConfigData module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. + +The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. + +=head1 METHODS + +=over 4 + +=item loadConfigFromDB (); + +Loads existing configuration from the database (if any) and merges it with the definitions held in this module. This results in the merging of any new configuration and the removal of any deprecated configuration while preserving the existing values of every else. + +=item saveConfigToDB (); + +Saves configuration held in memory to the database. The act of loading and saving configuration is a convenient way to ensure that the configuration held in the database corresponds with the most recent definitions and that all components are using the same set of configuration. + +=head2 EXPORT + +None by default. +The :data tag will export the various configuration data structures +The :functions tag will export the helper functions. +The :all tag will export all above symbols. + + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 55c0ec302..c835626c6 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -1925,6 +1925,47 @@ body = "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% s type => $types{string}, category => "eyeZm", }, + { + name => "ZM_PATH_PLUGINS", + default => "/usr/share/zm", + description => "Path to the plugin folder", + help => "3d-party plugins have to be placed here.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PLUGIN_EXTENSION", + default => ".zmpl", + description => "Default extension of plugins to found.", + help => "Default extension of plugins to found.", + type => $types{rel_path}, + category => "paths", + }, + { + name => "ZM_PLUGINS_CONFIG_PATH", + default => "/usr/share/zm/plugins.conf", + description => "Path to the config file for plugins.", + help => "Path to the config file for plugins.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_LOAD_PLUGINS", + default => "no", + description => "Load and use 3d-party plugins", + help => "3d-party plugins will be loaded and used for analysing.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_TURNOFF_NATIVE_ANALYSIS", + default => "no", + description => "Turn native ZM\'s image analysis possibility off", + help => "Image analysis with ZM\'s motion detected function will be turned off. Only detection functions from loaded plugins will be used. Note, that if no plugins have be loaded, no detection will be done.", + type => $types{boolean}, + category => "config", + }, + ); our %options_hash = map { ( $_->{name}, $_ ) } @options; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in.orig b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in.orig new file mode 100644 index 000000000..55c0ec302 --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in.orig @@ -0,0 +1,2015 @@ +# ========================================================================== +# +# ZoneMinder Config Data Module, $Date: 2011-01-20 18:49:42 +0000 (Thu, 20 Jan 2011) $, $Revision: 3230 $ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the debug definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::ConfigData; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'data' => [ qw( + %types + @options + %options_hash + ) ] +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'data'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Configuration Data +# +# ========================================================================== + +use Carp; + +our $configInitialised = 0; + +sub INIT +{ + initialiseConfig(); +} + +# Types +our %types = +( + string => { db_type=>"string", hint=>"string", pattern=>qr|^(.+)$|, format=>q( $1 ) }, + alphanum => { db_type=>"string", hint=>"alphanumeric", pattern=>qr|^([a-zA-Z0-9-_]+)$|, format=>q( $1 ) }, + text => { db_type=>"text", hint=>"free text", pattern=>qr|^(.+)$|, format=>q( $1 ) }, + boolean => { db_type=>"boolean", hint=>"yes|no", pattern=>qr|^([yn])|i, check=>q( $1 ), format=>q( ($1 =~ /^y/) ? "yes" : "no" ) }, + integer => { db_type=>"integer", hint=>"integer", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + decimal => { db_type=>"decimal", hint=>"decimal", pattern=>qr|^(\d+(?:\.\d+)?)$|, format=>q( $1 ) }, + hexadecimal => { db_type=>"hexadecimal", hint=>"hexadecimal", pattern=>qr|^(?:0x)?([0-9a-f]{1,8})$|, format=>q( "0x".$1 ) }, + tristate => { db_type=>"string", hint=>"auto|yes|no", pattern=>qr|^([ayn])|i, check=>q( $1 ), format=>q( ($1 =~ /^y/) ? "yes" : ($1 =~ /^n/ ? "no" : "auto" ) ) }, + abs_path => { db_type=>"string", hint=>"/absolute/path/to/somewhere", pattern=>qr|^((?:/[^/]*)+?)/?$|, format=>q( $1 ) }, + rel_path => { db_type=>"string", hint=>"relative/path/to/somewhere", pattern=>qr|^((?:[^/].*)?)/?$|, format=>q( $1 ) }, + directory => { db_type=>"string", hint=>"directory", pattern=>qr|^([a-zA-Z0-9-_.]+)$|, format=>q( $1 ) }, + file => { db_type=>"string", hint=>"filename", pattern=>qr|^([a-zA-Z0-9-_.]+)$|, format=>q( $1 ) }, + hostname => { db_type=>"string", hint=>"host.your.domain", pattern=>qr|^([a-zA-Z0-9_.-]+)$|, format=>q( $1 ) }, + url => { db_type=>"string", hint=>"http://host.your.domain/", pattern=>qr|^(?:http://)?(.+)$|, format=>q( "http://".$1 ) }, + email => { db_type=>"string", hint=>"your.name\@your.domain", pattern=>qr|^([a-zA-Z0-9_.-]+)\@([a-zA-Z0-9_.-]+)$|, format=>q( $1\@$2 ) }, +); + +our @options = +( + { + name => "ZM_LANG_DEFAULT", + default => "en_gb", + description => "Default language used by web interface", + help => "ZoneMinder allows the web interface to use languages other than English if the appropriate language file has been created and is present. This option allows you to change the default language that is used from the shipped language, British English, to another language", + type => $types{string}, + category => "system", + }, + { + name => "ZM_OPT_USE_AUTH", + default => "no", + description => "Authenticate user logins to ZoneMinder", + help => "ZoneMinder can run in two modes. The simplest is an entirely unauthenticated mode where anyone can access ZoneMinder and perform all tasks. This is most suitable for installations where the web server access is limited in other ways. The other mode enables user accounts with varying sets of permissions. Users must login or authenticate to access ZoneMinder and are limited by their defined permissions.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_AUTH_TYPE", + default => "builtin", + description => "What is used to authenticate ZoneMinder users", + help => "ZoneMinder can use two methods to authenticate users when running in authenticated mode. The first is a builtin method where ZoneMinder provides facilities for users to log in and maintains track of their identity. The second method allows interworking with other methods such as http basic authentication which passes an independently authentication 'remote' user via http. In this case ZoneMinder would use the supplied user without additional authentication provided such a user is configured ion ZoneMinder.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], + type => { db_type=>"string", hint=>"builtin|remote", pattern=>qr|^([br])|i, format=>q( $1 =~ /^b/ ? "builtin" : "remote" ) }, + category => "system", + }, + { + name => "ZM_AUTH_RELAY", + default => "hashed", + description => "Method used to relay authentication information", + help => "When ZoneMinder is running in authenticated mode it can pass user details between the web pages and the back end processes. There are two methods for doing this. This first is to use a time limited hashed string which contains no direct username or password details, the second method is to pass the username and passwords around in plaintext. This method is not recommend except where you do not have the md5 libraries available on your system or you have a completely isolated system with no external access. You can also switch off authentication relaying if your system is isolated in other ways.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], + type => { db_type=>"string", hint=>"hashed|plain|none", pattern=>qr|^([hpn])|i, format=>q( ($1 =~ /^h/) ? "hashed" : ($1 =~ /^p/ ? "plain" : "none" ) ) }, + category => "system", + }, + { + name => "ZM_AUTH_HASH_SECRET", + default => "...Change me to something unique...", + description => "Secret for encoding hashed authentication information", + help => "When ZoneMinder is running in hashed authenticated mode it is necessary to generate hashed strings containing encrypted sensitive information such as usernames and password. Although these string are reasonably secure the addition of a random secret increases security substantially.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], + type => $types{string}, + category => "system", + }, + { + name => "ZM_AUTH_HASH_IPS", + default => "yes", + description => "Include IP addresses in the authentication hash", + help => "When ZoneMinder is running in hashed authenticated mode it can optionally include the requesting IP address in the resultant hash. This adds an extra level of security as only requests from that address may use that authentication key. However in some circumstances, such as access over mobile networks, the requesting address can change for each request which will cause most requests to fail. This option allows you to control whether IP addresses are included in the authentication hash on your system. If you experience intermitent problems with authentication, switching this option off may help.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_AUTH_HASH_LOGINS", + default => "no", + description => "Allow login by authentication hash", + help => "The normal process for logging into ZoneMinder is via the login screen with username and password. In some circumstances it may be desirable to allow access directly to one or more pages, for instance from a third party application. If this option is enabled then adding an 'auth' parameter to any request will include a shortcut login bypassing the login screen, if not already logged in. As authentication hashes are time and, optionally, IP limited this can allow short-term access to ZoneMinder screens from other web pages etc. In order to use this the calling application will hae to generate the authentication hash itself and ensure it is valid. If you use this option you should ensure that you have modified the ZM_AUTH_HASH_SECRET to somethign unique to your system.", + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_DIR_EVENTS", + default => "events", + description => "Directory where events are stored", + help => "This is the path to the events directory where all the event images and other miscellaneous files are stored. It is normally given as a subdirectory of the web directory you have specified earlier however if disk space is tight it can reside on another partition in which case you should create a link from that area to the path you give here.", + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_USE_DEEP_STORAGE", + default => "yes", + description => "Use a deep filesystem hierarchy for events", + help => "Traditionally ZoneMinder stores all events for a monitor in one directory for that monitor. This is simple and efficient except when you have very large amounts of events. Some filesystems are unable to store more than 32k files in one directory and even without this limitation, large numbers of files in a directory can slow creation and deletion of files. This option allows you to select an alternate method of storing events by year/month/day/hour/min/second which has the effect of separating events out into more directories, resulting in less per directory, and also making it easier to manually navigate to any events that may have happened at a particular time or date.", + type => $types{boolean}, + category => "paths", + }, + { + name => "ZM_DIR_IMAGES", + default => "images", + description => "Directory where the images that the ZoneMinder client generates are stored", + help => "ZoneMinder generates a myriad of images, mosty of which are associated with events. For those that aren't this is where they go.", + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_DIR_SOUNDS", + default => "sounds", + description => "Directory to the sounds that the ZoneMinder client can use", + help => "ZoneMinder can optionally play a sound file when an alarm is detected. This indicates where (relative to the web root) to look for this file.", + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_PATH_ZMS", + default => "/cgi-bin/nph-zms", + description => "Web path to zms streaming server", + help => "The ZoneMinder streaming server is required to send streamed images to your browser. It will be installed into the cgi-bin path given at configuration time. This option determines what the web path to the server is rather than the local path on your machine. Ordinarily the streaming server runs in parser-header mode however if you experience problems with streaming you can change this to non-parsed-header (nph) mode by changing 'zms' to 'nph-zms'.", + type => $types{rel_path}, + category => "paths", + }, + { + name => "ZM_COLOUR_JPEG_FILES", + default => "yes", + description => "Colourise greyscale JPEG files", + help => "Cameras that capture in greyscale can write their captured images to jpeg files with a corresponding greyscale colour space. This saves a small amount of disk space over colour ones. However some tools such as ffmpeg either fail to work with this colour space or have to convert it beforehand. Setting this option to yes uses up a little more space but makes creation of MPEG files much faster.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_ADD_JPEG_COMMENTS", + default => "no", + description => "Add jpeg timestamp annotations as file header comments", + help => "JPEG files may have a number of extra fields added to the file header. The comment field may have any kind of text added. This options allows you to have the same text that is used to annotate the image additionally included as a file header comment. If you archive event images to other locations this may help you locate images for particular events or times if you use software that can read comment headers.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_JPEG_FILE_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the saved event files (1-100)", + help => "When ZoneMinder detects an event it will save the images associated with that event to files. These files are in the JPEG format and can be viewed or streamed later. This option specifies what image quality should be used to save these files. A higher number means better quality but less compression so will take up more disk space and take longer to view over a slow connection. By contrast a low number means smaller, quicker to view, files but at the price of lower quality images. This setting applies to all images written except if the capture image has caused an alarm and the alarm file quality option is set at a higher value when that is used instead.", + type => $types{integer}, + category => "images", + }, + { + name => "ZM_JPEG_ALARM_FILE_QUALITY", + default => "0", + description => "Set the JPEG quality setting for the saved event files during an alarm (1-100)", + help => "This value is equivalent to the regular jpeg file quality setting above except that it only applies to images saved while in an alarm state and then only if this value is set to a higher quality setting than the ordinary file setting. If set to a lower value then it is ignored. Thus leaving it at the default of 0 effectively means to use the regular file quality setting for all saved images. This is to prevent acccidentally saving important images at a worse quality setting.", + type => $types{integer}, + category => "images", + }, + # Deprecated, now stream quality + { + name => "ZM_JPEG_IMAGE_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", + help => "When viewing a 'live' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.", + type => $types{integer}, + category => "hidden", + }, + { + name => "ZM_JPEG_STREAM_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", + help => "When viewing a 'live' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.", + type => $types{integer}, + category => "images", + }, + { + name => "ZM_MPEG_TIMED_FRAMES", + default => "yes", + description => "Tag video frames with a timestamp for more realistic streaming", + help => "When using streamed MPEG based video, either for live monitor streams or events, ZoneMinder can send the streams in two ways. If this option is selected then the timestamp for each frame, taken from it's capture time, is included in the stream. This means that where the frame rate varies, for instance around an alarm, the stream will still maintain it's 'real' timing. If this option is not selected then an approximate frame rate is calculated and that is used to schedule frames instead. This option should be selected unless you encounter problems with your preferred streaming method.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_MPEG_LIVE_FORMAT", + default => "swf", + description => "What format 'live' video streams are played in", + help => "When using MPEG mode ZoneMinder can output live video. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of 'asf' works well under Windows with Windows Media Player but I'm currently not sure what, if anything, works on a Linux platform. If you find out please let me know! If this option is left blank then live streams will revert to being in motion jpeg format", + type => $types{string}, + category => "images", + }, + { + name => "ZM_MPEG_REPLAY_FORMAT", + default => "swf", + description => "What format 'replay' video streams are played in", + help => "When using MPEG mode ZoneMinder can replay events in encoded video format. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of 'asf' works well under Windows with Windows Media Player and 'mpg', or 'avi' etc should work under Linux. If you know any more then please let me know! If this option is left blank then live streams will revert to being in motion jpeg format", + type => $types{string}, + category => "images", + }, + { + name => "ZM_RAND_STREAM", + default => "yes", + description => "Add a random string to prevent caching of streams", + help => "Some browsers can cache the streams used by ZoneMinder. In order to prevent his a harmless random string can be appended to the url to make each invocation of the stream appear unique.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_OPT_CAMBOZOLA", + default => "no", + description => "Is the (optional) cambozola java streaming client installed", + help => "Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don't natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_PATH_CAMBOZOLA", + default => "cambozola.jar", + description => "Web path to (optional) cambozola java streaming client", + help => "Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don't natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed. Leave this as 'cambozola.jar' if cambozola is installed in the same directory as the ZoneMinder web client files.", + requires => [ { name=>"ZM_OPT_CAMBOZOLA", value=>"yes" } ], + type => $types{rel_path}, + category => "images", + }, + { + name => "ZM_RELOAD_CAMBOZOLA", + default => "0", + description => "After how many seconds should Cambozola be reloaded in live view", + help => "Cambozola allows for the viewing of streaming MJPEG however it caches the entire stream into cache space on the computer, setting this to a number > 0 will cause it to automatically reload after that many seconds to avoid filling up a hard drive.", + type => $types{integer}, + category => "images", + }, + { + name => "ZM_TIMESTAMP_ON_CAPTURE", + default => "yes", + description => "Timestamp images as soon as they are captured", + help => "ZoneMinder can add a timestamp to images in two ways. The default method, when this option is set, is that each image is timestamped immediately when captured and so the image held in memory is marked right away. The second method does not timestamp the images until they are either saved as part of an event or accessed over the web. The timestamp used in both methods will contain the same time as this is preserved along with the image. The first method ensures that an image is timestamped regardless of any other circumstances but will result in all images being timestamped even those never saved or viewed. The second method necessitates that saved images are copied before being saved otherwise two timestamps perhaps at different scales may be applied. This has the (perhaps) desirable side effect that the timestamp is always applied at the same resolution so an image that has scaling applied will still have a legible and correctly scaled timestamp.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_CPU_EXTENSIONS", + default => "yes", + description => "Use advanced CPU extensions to increase performance", + help => "When advanced processor extensions such as SSE2 or SSSE3 are available, ZoneMinder can use them, which should increase performance and reduce system load. Enabling this option on processors that do not support the advanced processors extensions used by ZoneMinder is harmless and will have no effect.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_FAST_IMAGE_BLENDS", + default => "yes", + description => "Use a fast algorithm to blend the reference image", + help => "To detect alarms ZoneMinder needs to blend the captured image with the stored reference image to update it for comparison with the next image. The reference blend percentage specified for the monitor controls how much the new image affects the reference image. There are two methods that are available for this. If this option is set then fast calculation which does not use any multiplication or division is used. This calculation is extremely fast, however it limits the possible blend percentages to 50%, 25%, 12.5%, 6.25%, 3.25% and 1.5%. Any other blend percentage will be rounded to the nearest possible one. The alternative is to switch this option off and use standard blending instead, which is slower.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_OPT_ADAPTIVE_SKIP", + default => "yes", + description => "Should frame analysis try and be efficient in skipping frames", + help => "In previous versions of ZoneMinder the analysis daemon would attempt to keep up with the capture daemon by processing the last captured frame on each pass. This would sometimes have the undesirable side-effect of missing a chunk of the initial activity that caused the alarm because the pre-alarm frames would all have to be written to disk and the database before processing the next frame, leading to some delay between the first and second event frames. Setting this option enables a newer adaptive algorithm where the analysis daemon attempts to process as many captured frames as possible, only skipping frames when in danger of the capture daemon overwriting yet to be processed frames. This skip is variable depending on the size of the ring buffer and the amount of space left in it. Enabling this option will give you much better coverage of the beginning of alarms whilst biasing out any skipped frames towards the middle or end of the event. However you should be aware that this will have the effect of making the analysis daemon run somewhat behind the capture daemon during events and for particularly fast rates of capture it is possible for the adaptive algorithm to be overwhelmed and not have time to react to a rapid build up of pending frames and thus for a buffer overrun condition to occur.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_BLEND_ALARMED_IMAGES", + default => "yes", + description => "Blend alarmed images to update the reference image", + help => "To detect alarms ZoneMinder compares an image with a reference image which is formed from a composite of the previous images. This option determines whether images that cause events are included in this process. Doing so may increase the precision of the alarmed region but can cause problems if wholescale lighting changes cause alarms as this would not get fed back into the image and an alarm may persist indefinately. A better way to achive the same effect in most cases is to lower substantially the reference blend percentage in specific monitors.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_MAX_SUSPEND_TIME", + default => "30", + description => "Maximum time that a monitor may have motion detection suspended", + help => "ZoneMinder allows monitors to have motion detection to be suspended, for instance while panning a camera. Ordinarily this relies on the operator resuming motion detection afterwards as failure to do so can leave a monitor in a permanently suspended state. This setting allows you to set a maximum time which a camera may be suspended for before it automatically resumes motion detection. This time can be extended by subsequent suspend indications after the first so continuous camera movement will also occur while the monitor is suspended.", + type => $types{integer}, + category => "config", + }, + # Deprecated, really no longer necessary + { + name => "ZM_OPT_REMOTE_CAMERAS", + default => "no", + description => "Are you going to use remote/networked cameras", + help => "ZoneMinder can work with both local cameras, ie. those attached physically to your computer and remote or network cameras. If you will be using networked cameras select this option.", + type => $types{boolean}, + category => "hidden", + }, + # Deprecated, now set on a per monitor basis using the Method field + { + name => "ZM_NETCAM_REGEXPS", + default => "yes", + description => "Use regular expression matching with network cameras", + help => "Traditionally ZoneMinder has used complex regular regular expressions to handle the multitude of formats that network cameras produce. In versions from 1.21.1 the default is to use a simpler and faster built in pattern matching methodology. This works well with most networks cameras but if you have problems you can try the older, but more flexible, regular expression based method by selecting this option. Note, to use this method you must have libpcre installed on your system.", + requires => [ { name => "ZM_OPT_REMOTE_CAMERAS", value => "yes" } ], + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_HTTP_VERSION", + default => "1.1", + description => "The version of HTTP that ZoneMinder will use to connect", + help => "ZoneMinder can communicate with network cameras using either of the HTTP/1.1 or HTTP/1.0 standard. A server will normally fall back to the version it supports iwht no problem so this should usually by left at the default. However it can be changed to HTTP/1.0 if necessary to resolve particular issues.", + type => { db_type=>"string", hint=>"1.1|1.0", pattern=>qr|^(1\.[01])$|, format=>q( $1?$1:"" ) }, + category => "network", + }, + { + name => "ZM_HTTP_UA", + default => "ZoneMinder", + description => "The user agent that ZoneMinder uses to identify itself", + help => "When ZoneMinder communicates with remote cameras it will identify itself using this string and it's version number. This is normally sufficient, however if a particular cameras expects only to communicate with certain browsers then this can be changed to a different string identifying ZoneMinder as Internet Explorer or Netscape etc.", + type => $types{string}, + category => "network", + }, + { + name => "ZM_HTTP_TIMEOUT", + default => "2500", + description => "How long ZoneMinder waits before giving up on images (milliseconds)", + help => "When retrieving remote images ZoneMinder will wait for this length of time before deciding that an image is not going to arrive and taking steps to retry. This timeout is in milliseconds (1000 per second) and will apply to each part of an image if it is not sent in one whole chunk.", + type => $types{integer}, + category => "network", + }, + { + name => "ZM_MIN_RTP_PORT", + default => "40200", + description => "Minimum port that ZoneMinder will listen for RTP traffic on", + help => "When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the minimum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting.", + type => $types{integer}, + category => "network", + }, + { + name => "ZM_MAX_RTP_PORT", + default => "40499", + description => "Maximum port that ZoneMinder will listen for RTP traffic on", + help => "When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the maximum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting. You should also ensure that you have opened up at least two ports for each monitor that will be connecting to unicasting network cameras.", + type => $types{integer}, + category => "network", + }, + { + name => "ZM_OPT_FFMPEG", + default => "@OPT_FFMPEG@", + description => "Is the ffmpeg video encoder/decoder installed", + help => "ZoneMinder can optionally encode a series of video images into an MPEG encoded movie file for viewing, downloading or storage. This option allows you to specify whether you have the ffmpeg tools installed. Note that creating MPEG files can be fairly CPU and disk intensive and is not a required option as events can still be reviewed as video streams without it.", + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_PATH_FFMPEG", + default => "@PATH_FFMPEG@", + description => "Path to (optional) ffmpeg mpeg encoder", + help => "This path should point to where ffmpeg has been installed.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{abs_path}, + category => "images", + }, + { + name => "ZM_FFMPEG_INPUT_OPTIONS", + default => "", + description => "Additional input options to ffmpeg", + help => "Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the input to ffmpeg (options that are given before the -i option). Check the ffmpeg documentation for a full list of options which may be used here.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_FFMPEG_OUTPUT_OPTIONS", + default => "-r 25", + description => "Additional output options to ffmpeg", + help => "Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the output from ffmpeg (options that are given after the -i option). Check the ffmpeg documentation for a full list of options which may be used here. The most common one will often be to force an output frame rate supported by the video encoder.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_FFMPEG_FORMATS", + default => "mpg mpeg wmv asf avi* mov swf 3gp**", + description => "Formats to allow for ffmpeg video generation", + help => "Ffmpeg can generate video in many different formats. This option allows you to list the ones you want to be able to select. As new formats are supported by ffmpeg you can add them here and be able to use them immediately. Adding a '*' after a format indicates that this will be the default format used for web video, adding '**' defines the default format for phone video.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_LOG_LEVEL_SYSLOG", + default => "0", + description => "Save logging output to the system log", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to the system log. ZoneMinder binaries have always logged to the system log but now scripts and web logging is also included. To preserve the previous behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_FILE", + default => "-5", + description => "Save logging output to component files", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to individual log files written by specific components. This is how logging worked previously and although useful for tracking down issues in specific components it also resulted in many disparate log files. To preserve this behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance though file output has less impact than the other options. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_WEBLOG", + default => "-5", + description => "Save logging output to the weblog", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output from the web interface that goes to the httpd error log. Note that only web logging from PHP and JavaScript files is included and so this option is really only useful for investigating specific issues with those components. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_DATABASE", + default => "0", + description => "Save logging output to the database", + help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that is written to the database. This is a new option which can make viewing logging output easier and more intuitive and also makes it easier to get an overall impression of how the system is performing. If you have a large or very busy system then it is possible that use of this option may slow your system down if the table becomes very large. Ensure you use the LOG_DATABASE_LIMIT option to keep the table to a manageable size. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", + type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_DATABASE_LIMIT", + default => "7 day", + description => "Maximum number of log entries to retain", + help => "If you are using database logging then it is possible to quickly build up a large number of entries in the Logs table. This option allows you to specify how many of these entries are kept. If you set this option to a number greater than zero then that number is used to determine the maximum number of rows, less than or equal to zero indicates no limit and is not recommended. You can also set this value to time values such as ' day' which will limit the log entries to those newer than that time. You can specify 'hour', 'day', 'week', 'month' and 'year', note that the values should be singular (no 's' at the end). The Logs table is pruned periodically so it is possible for more than the expected number of rows to be present briefly in the meantime.", + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG", + default => "no", + description => "Switch debugging on", + help => "ZoneMinder components usually support debug logging available to help with diagnosing problems. Binary components have several levels of debug whereas more other components have only one. Normally this is disabled to minimise performance penalties and avoid filling logs too quickly. This option lets you switch on other options that allow you to configure additional debug information to be output. Components will pick up this instruction when they are restarted.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_TARGET", + default => "", + description => "What components should have extra debug enabled", + help => "There are three scopes of debug available. Leaving this option blank means that all components will use extra debug (not recommended). Setting this option to '_', e.g. _zmc, will limit extra debug to that component only. Setting this option to '__', e.g. '_zmc_m1' will limit extra debug to that instance of the component only. This is ordinarily what you probably want to do. To debug scripts use their names without the .pl extension, e.g. '_zmvideo' and to debug issues with the web interface use '_web'. You can specify multiple targets by separating them with '|' characters.", + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_LEVEL", + default => 1, + description => "What level of extra debug should be enabled", + help => "There are 9 levels of debug available, with higher numbers being more debug and level 0 being no debug. However not all levels are used by all components. Also if there is debug at a high level it is usually likely to be output at such a volume that it may obstruct normal operation. For this reason you should set the level carefully and cautiously until the degree of debug you wish to see is present. Scripts and the web interface only have one level so this is an on/off type option for them.", + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => { db_type=>"integer", hint=>"1|2|3|4|5|6|7|8|9", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_FILE", + default => "@ZM_TMPDIR@/zm_debug.log+", + description => "Where extra debug is output to", + help => "This option allows you to specify a different target for debug output. All components have a default log file which will norally be in /tmp or /var/log and this is where debug will be written to if this value is empty. Adding a path here will temporarily redirect debug, and other logging output, to this file. This option is a simple filename and you are debugging several components then they will all try and write to the same file with undesirable consequences. Appending a '+' to the filename will cause the file to be created with a '.' suffix containing your process id. In this way debug from each run of a component is kept separate. This is the recommended setting as it will also prevent subsequent runs from overwriting the same log. You should ensure that permissions are set up to allow writing to the file and directory specified here.", + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_CHECK_PERIOD", + default => "900", + description => "Time period used when calculating overall system health", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to indicate what period of historical events are used in this calculation. This value is expressed in seconds and is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_WAR_COUNT", + default => "1", + description => "Number of warnings indicating system alert state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alert state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_ERR_COUNT", + default => "1", + description => "Number of errors indicating system alert state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alert state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_FAT_COUNT", + default => "0", + description => "Number of fatal error indicating system alert state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alert state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_WAR_COUNT", + default => "100", + description => "Number of warnings indicating system alarm state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alarm state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_ERR_COUNT", + default => "10", + description => "Number of errors indicating system alarm state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alarm state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_FAT_COUNT", + default => "1", + description => "Number of fatal error indicating system alarm state", + help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alarm state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_RECORD_EVENT_STATS", + default => "yes", + description => "Record event statistical information, switch off if too slow", + help => "This version of ZoneMinder records detailed information about events in the Stats table. This can help in profiling what the optimum settings are for Zones though this is tricky at present. However in future releases this will be done more easily and intuitively, especially with a large sample of events. The default option of 'yes' allows this information to be collected now in readiness for this but if you are concerned about performance you can switch this off in which case no Stats information will be saved.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_RECORD_DIAG_IMAGES", + default => "no", + description => "Record intermediate alarm diagnostic images, can be very slow", + help => "In addition to recording event statistics you can also record the intermediate diagnostic images that display the results of the various checks and processing that occur when trying to determine if an alarm event has taken place. There are several of these images generated for each frame and zone for each alarm or alert frame so this can have a massive impact on performance. Only switch this setting on for debug or analysis purposes and remember to switch it off again once no longer required.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_DUMP_CORES", + default => "no", + description => "Create core files on unexpected process failure.", + help => "When an unrecoverable error occurs in a ZoneMinder binary process is has traditionally been trapped and the details written to logs to aid in remote analysis. However in some cases it is easier to diagnose the error if a core file, which is a memory dump of the process at the time of the error, is created. This can be interactively analysed in the debugger and may reveal more or better information than that available from the logs. This option is recommended for advanced users only otherwise leave at the default. Note using this option to trigger core files will mean that there will be no indication in the binary logs that a process has died, they will just stop, however the zmdc log will still contain an entry. Also note that you may have to explicitly enable core file creation on your system via the 'ulimit -c' command or other means otherwise no file will be created regardless of the value of this option.", + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_PATH_MAP", + default => "/dev/shm", + description => "Path to the mapped memory files that that ZoneMinder can use", + help => "ZoneMinder has historically used IPC shared memory for shared data between processes. This has it's advantages and limitations. This version of ZoneMinder can use an alternate method, mapped memory, instead with can be enabled with the --enable--mmap directive to configure. This requires less system configuration and is generally more flexible. However it requires each shared data segment to map onto a filesystem file. This option indicates where those mapped files go. You should ensure that this location has sufficient space for these files and for the best performance it should be a tmpfs file system or ramdisk otherwise disk access may render this method slower than the regular shared memory one.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_SOCKS", + default => "@ZM_TMPDIR@", + description => "Path to the various Unix domain socket files that ZoneMinder uses", + help => "ZoneMinder generally uses Unix domain sockets where possible. This reduces the need for port assignments and prevents external applications from possibly compromising the daemons. However each Unix socket requires a .sock file to be created. This option indicates where those socket files go.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_LOGS", + default => "@ZM_LOGDIR@", + description => "Path to the various logs that the ZoneMinder daemons generate", + help => "There are various daemons that are used by ZoneMinder to perform various tasks. Most generate helpful log files and this is where they go. They can be deleted if not required for debugging.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_SWAP", + default => "@ZM_TMPDIR@", + description => "Path to location for temporary swap images used in streaming", + help => "Buffered playback requires temporary swap images to be stored for each instance of the streaming daemons. This option determines where these images will be stored. The images will actually be stored in sub directories beneath this location and will be automatically cleaned up after a period of time.", + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_WEB_TITLE_PREFIX", + default => "ZM", + description => "The title prefix displayed on each window", + help => "If you have more than one installation of ZoneMinder it can be helpful to display different titles for each one. Changing this option allows you to customise the window titles to include further information to aid identification.", + type => $types{string}, + category => "web", + }, + { + name => "ZM_WEB_RESIZE_CONSOLE", + default => "yes", + description => "Should the console window resize itself to fit", + help => "Traditionally the main ZoneMinder web console window has resized itself to shrink to a size small enough to list only the monitors that are actually present. This is intended to make the window more unobtrusize but may not be to everyones tastes, especially if opened in a tab in browsers which support this kind if layout. Switch this option off to have the console window size left to the users preference", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_POPUP_ON_ALARM", + default => "yes", + description => "Should the monitor window jump to the top if an alarm occurs", + help => "When viewing a live monitor stream you can specify whether you want the window to pop to the front if an alarm occurs when the window is minimised or behind another window. This is most useful if your monitors are over doors for example when they can pop up if someone comes to the doorway.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_OPT_X10", + default => "no", + description => "Support interfacing with X10 devices", + help => "If you have an X10 Home Automation setup in your home you can use ZoneMinder to initiate or react to X10 signals if your computer has the appropriate interface controller. This option indicates whether X10 options will be available in the browser client.", + type => $types{boolean}, + category => "x10", + }, + { + name => "ZM_X10_DEVICE", + default => "/dev/ttyS0", + description => "What device is your X10 controller connected on", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => "If you have an X10 controller device (e.g. XM10U) connected to your computer this option details which port it is conected on, the default of /dev/ttyS0 maps to serial or com port 1.", + type => $types{abs_path}, + category => "x10", + }, + { + name => "ZM_X10_HOUSE_CODE", + default => "A", + description => "What X10 house code should be used", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => "X10 devices are grouped together by identifying them as all belonging to one House Code. This option details what that is. It should be a single letter between A and P.", + type => { db_type=>"string", hint=>"A-P", pattern=>qr|^([A-P])|i, format=>q( uc($1) ) }, + category => "x10", + }, + { + name => "ZM_X10_DB_RELOAD_INTERVAL", + default => "60", + description => "How often (in seconds) the X10 daemon reloads the monitors from the database", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => "The zmx10 daemon periodically checks the database to find out what X10 events trigger, or result from, alarms. This option determines how frequently this check occurs, unless you change this area frequently this can be a fairly large value.", + type => $types{integer}, + category => "x10", + }, + { + name => "ZM_WEB_SOUND_ON_ALARM", + default => "no", + description => "Should the monitor window play a sound if an alarm occurs", + help => "When viewing a live monitor stream you can specify whether you want the window to play a sound to alert you if an alarm occurs.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_ALARM_SOUND", + default => "", + description => "The sound to play on alarm, put this in the sounds directory", + help => "You can specify a sound file to play if an alarm occurs whilst you are watching a live monitor stream. So long as your browser understands the format it does not need to be any particular type. This file should be placed in the sounds directory defined earlier.", + type => $types{file}, + requires => [ { name => "ZM_WEB_SOUND_ON_ALARM", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_COMPACT_MONTAGE", + default => "no", + description => "Compact the montage view by removing extra detail", + help => "The montage view shows the output of all of your active monitors in one window. This include a small menu and status information for each one. This can increase the web traffic and make the window larger than may be desired. Setting this option on removes all this extraneous information and just displays the images.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_OPT_FAST_DELETE", + default => "yes", + description => "Delete only event database records for speed", + help => "Normally an event created as the result of an alarm consists of entries in one or more database tables plus the various files associated with it. When deleting events in the browser it can take a long time to remove all of this if your are trying to do a lot of events at once. It is recommended that you set this option which means that the browser client only deletes the key entries in the events table, which means the events will no longer appear in the listing, and leaves the zmaudit daemon to clear up the rest later.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_STRICT_VIDEO_CONFIG", + default => "yes", + description => "Allow errors in setting video config to be fatal", + help => "With some video devices errors can be reported in setting the various video attributes when in fact the operation was successful. Switching this option off will still allow these errors to be reported but will not cause them to kill the video capture daemon. Note however that doing this will cause all errors to be ignored including those which are genuine and which may cause the video capture to not function correctly. Use this option with caution.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_SIGNAL_CHECK_POINTS", + default => "10", + description => "How many points in a captured image to check for signal loss", + help => "For locally attached video cameras ZoneMinder can check for signal loss by looking at a number of random points on each captured image. If all of these points are set to the same fixed colour then the camera is assumed to have lost signal. When this happens any open events are closed and a short one frame signal loss event is generated, as is another when the signal returns. This option defines how many points on each image to check. Note that this is a maximum, any points found to not have the check colour will abort any further checks so in most cases on a couple of points will actually be checked. Network and file based cameras are never checked.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_V4L_MULTI_BUFFER", + default => "yes", + description => "Use more than one buffer for Video 4 Linux devices", + help => "Performance when using Video 4 Linux devices is usually best if multiple buffers are used allowing the next image to be captured while the previous one is being processed. If you have multiple devices on a card sharing one input that requires switching then this approach can sometimes cause frames from one source to be mixed up with frames from another. Switching this option off prevents multi buffering resulting in slower but more stable image capture. This option is ignored for non-local cameras or if only one input is present on a capture chip. This option addresses a similar problem to the ZM_CAPTURES_PER_FRAME option and you should normally change the value of only one of the options at a time.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_CAPTURES_PER_FRAME", + default => "1", + description => "How many images are captured per returned frame, for shared local cameras", + help => "If you are using cameras attached to a video capture card which forces multiple inputs to share one capture chip, it can sometimes produce images with interlaced frames reversed resulting in poor image quality and a distinctive comb edge appearance. Increasing this setting allows you to force additional image captures before one is selected as the captured frame. This allows the capture hardware to 'settle down' and produce better quality images at the price of lesser capture rates. This option has no effect on (a) network cameras, or (b) where multiple inputs do not share a capture chip. This option addresses a similar problem to the ZM_V4L_MULTI_BUFFER option and you should normally change the value of only one of the options at a time.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_FILTER_RELOAD_DELAY", + default => "300", + description => "How often (in seconds) filters are reloaded in zmfilter", + help => "ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are reloaded from the database to get the latest versions or new filters. If you don't change filters very often this value can be set to a large value.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_FILTER_EXECUTE_INTERVAL", + default => "60", + description => "How often (in seconds) to run automatic saved filters", + help => "ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are executed on the saved event in the database. If you want a rapid response to new events this should be a smaller value, however this may increase the overall load on the system and affect performance of other elements.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_OPT_UPLOAD", + default => "no", + description => "Should ZoneMinder support uploading events from filters", + help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should be uploaded to a remote server for archiving. This option specifies whether this functionality should be available", + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_FORMAT", + default => "tar", + description => "What format the uploaded events should be created in.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => "Uploaded events may be stored in either .tar or .zip format, this option specifies which. Note that to use this you will need to have the Archive::Tar and/or Archive::Zip perl modules installed.", + type => { db_type=>"string", hint=>"tar|zip", pattern=>qr|^([tz])|i, format=>q( $1 =~ /^t/ ? "tar" : "zip" ) }, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_COMPRESS", + default => "no", + description => "Should archive files be compressed", + help => "When the archive files are created they can be compressed. However in general since the images are compressed already this saves only a minimal amount of space versus utilising more CPU in their creation. Only enable if you have CPU to waste and are limited in disk space on your remote server or bandwidth.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_ANALYSE", + default => "no", + description => "Include the analysis files in the archive", + help => "When the archive files are created they can contain either just the captured frames or both the captured frames and, for frames that caused an alarm, the analysed image with the changed area highlighted. This option controls files are included. Only include analysed frames if you have a high bandwidth connection to the remote server or if you need help in figuring out what caused an alarm in the first place as archives with these files in can be considerably larger.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_PROTOCOL", + default => "ftp", + description => "What protocol to use to upload events", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => "ZoneMinder can upload events to a remote server using either FTP or SFTP. Regular FTP is widely supported but not necessarily very secure whereas SFTP (Secure FTP) runs over an ssh connection and so is encrypted and uses regular ssh ports. Note that to use this you will need to have the appropriate perl module, either Net::FTP or Net::SFTP installed depending on your choice.", + type => { db_type=>"string", hint=>"ftp|sftp", pattern=>qr|^([tz])|i, format=>q( $1 =~ /^f/ ? "ftp" : "sftp" ) }, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_HOST", + default => "", + description => "The remote server to upload to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the name, or ip address, of the server to use.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{hostname}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_HOST", + default => "", + description => "The remote server to upload events to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the name, or ip address, of the server to use.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{hostname}, + category => "upload", + }, + { + name => "ZM_UPLOAD_PORT", + default => "", + description => "The port on the remote upload server, if not the default (SFTP only)", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. If you are using the SFTP protocol then this option allows you to specify a particular port to use for connection. If this option is left blank then the default, port 22, is used. This option is ignored for FTP uploads.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_USER", + default => "", + description => "Your ftp username", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the username that ZoneMinder should use to log in for ftp transfer.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{alphanum}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_USER", + default => "", + description => "Remote server username", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the username that ZoneMinder should use to log in for transfer.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{alphanum}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_PASS", + default => "", + description => "Your ftp password", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the password that ZoneMinder should use to log in for ftp transfer.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{string}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_PASS", + default => "", + description => "Remote server password", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the password that ZoneMinder should use to log in for transfer. If you are using certicate based logins for SFTP servers you can leave this option blank.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{string}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_LOC_DIR", + default => "@ZM_TMPDIR@", + description => "The local directory in which to create upload files", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{abs_path}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_LOC_DIR", + default => "@ZM_TMPDIR@", + description => "The local directory in which to create upload files", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{abs_path}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_REM_DIR", + default => "", + description => "The remote directory to upload to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the remote directory that ZoneMinder should use to upload event files to.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{rel_path}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_REM_DIR", + default => "", + description => "The remote directory to upload to", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the remote directory that ZoneMinder should use to upload event files to.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{rel_path}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_TIMEOUT", + default => "120", + description => "How long to allow the transfer to take for each file", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the maximum ftp inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_TIMEOUT", + default => "120", + description => "How long to allow the transfer to take for each file", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the maximum inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_PASSIVE", + default => "yes", + description => "Use passive ftp when uploading", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates that ftp transfers should be done in passive mode. This uses a single connection for all ftp activity and, whilst slower than active transfers, is more robust and likely to work from behind filewalls. This option is ignored for SFTP transfers.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => "If your computer is behind a firewall or proxy you may need to set FTP to passive mode. In fact for simple transfers it makes little sense to do otherwise anyway but you can set this to 'No' if you wish.", + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_DEBUG", + default => "no", + description => "Switch ftp debugging on", + help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. If you are having (or expecting) troubles with uploading events then setting this to 'yes' permits additional information to be included in the zmfilter log file.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_DEBUG", + default => "no", + description => "Switch upload debugging on", + help => "You can use filters to instruct ZoneMinder to upload events to a remote server. If you are having (or expecting) troubles with uploading events then setting this to 'yes' permits additional information to be generated by the underlying transfer modules and included in the logs.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_OPT_EMAIL", + default => "no", + description => "Should ZoneMinder email you details of events that match corresponding filters", + help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details emailed to you at a designated email address. This will allow you to be notified of events as soon as they occur and also to quickly view the events directly. This option specifies whether this functionality should be available. The email created with this option can be any size and is intended to be sent to a regular email reader rather than a mobile device.", + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_EMAIL_ADDRESS", + default => "", + description => "The email address to send matching event details to", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the email address that any events that match the appropriate filters will be sent to.", + type => $types{email}, + category => "mail", + }, + { + name => "ZM_EMAIL_TEXT", + default => 'subject = "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)" +body = " +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder"', + description => "The text of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the content of the email that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "hidden", + }, + { + name => "ZM_EMAIL_SUBJECT", + default => "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)", + description => "The subject of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the subject of the email that is sent for any events that match the appropriate filters.", + type => $types{string}, + category => "mail", + }, + { + name => "ZM_EMAIL_BODY", + default => " +Hello, + +An alarm has been detected on your installation of the ZoneMinder. + +The details are as follows :- + + Monitor : %MN% + Event Id : %EI% + Length : %EL% + Frames : %EF% (%EFA%) + Scores : t%EST% m%ESM% a%ESA% + +This alarm was matched by the %FN% filter and can be viewed at %EPS% + +ZoneMinder", + description => "The body of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => "This option is used to define the content of the email that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "mail", + }, + { + name => "ZM_OPT_MESSAGE", + default => "no", + description => "Should ZoneMinder message you with details of events that match corresponding filters", + help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details sent to you at a designated short message email address. This will allow you to be notified of events as soon as they occur. This option specifies whether this functionality should be available. The email created by this option will be brief and is intended to be sent to an SMS gateway or a minimal mail reader such as a mobile device or phone rather than a regular email reader.", + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_MESSAGE_ADDRESS", + default => "", + description => "The email address to send matching event details to", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the short message email address that any events that match the appropriate filters will be sent to.", + type => $types{email}, + category => "mail", + }, + { + name => "ZM_MESSAGE_TEXT", + default => 'subject = "ZoneMinder: Alarm - %MN%-%EI%" +body = "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score."', + description => "The text of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the content of the message that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "hidden", + }, + { + name => "ZM_MESSAGE_SUBJECT", + default => "ZoneMinder: Alarm - %MN%-%EI%", + description => "The subject of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the subject of the message that is sent for any events that match the appropriate filters.", + type => $types{string}, + category => "mail", + }, + { + name => "ZM_MESSAGE_BODY", + default => "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.", + description => "The body of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "This option is used to define the content of the message that is sent for any events that match the appropriate filters.", + type => $types{text}, + category => "mail", + }, + { + name => "ZM_NEW_MAIL_MODULES", + default => "no", + description => "Use a newer perl method to send emails", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "Traditionally ZoneMinder has used the MIME::Entity perl module to construct and send notification emails and messages. Some people have reported problems with this module not being present at all or flexible enough for their needs. If you are one of those people this option allows you to select a new mailing method using MIME::Lite and Net::SMTP instead. This method was contributed by Ross Melin and should work for everyone but has not been extensively tested so currently is not selected by default.", + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_EMAIL_HOST", + default => "localhost", + description => "The host address of your SMTP mail server", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "If you have chosen SMTP as the method by which to send notification emails or messages then this option allows you to choose which SMTP server to use to send them. The default of localhost may work if you have the sendmail, exim or a similar daemon running however you may wish to enter your ISP's SMTP mail server here.", + type => $types{hostname}, + category => "mail", + }, + { + name => "ZM_FROM_EMAIL", + default => "", + description => "The email address you wish your event notifications to originate from", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "The emails or messages that will be sent to you informing you of events can appear to come from a designated email address to help you with mail filtering etc. An address of something like ZoneMinder\@your.domain is recommended.", + type => $types{email}, + category => "mail", + }, + { + name => "ZM_URL", + default => "", + description => "The URL of your ZoneMinder installation", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => "The emails or messages that will be sent to you informing you of events can include a link to the events themselves for easy viewing. If you intend to use this feature then set this option to the url of your installation as it would appear from where you read your email, e.g. http://host.your.domain/zm.php.", + type => $types{url}, + category => "mail", + }, + { + name => "ZM_MAX_RESTART_DELAY", + default => "600", + description => "Maximum delay (in seconds) for daemon restart attempts.", + help => "The zmdc (zm daemon control) process controls when processeses are started or stopped and will attempt to restart any that fail. If a daemon fails frequently then a delay is introduced between each restart attempt. If the daemon stills fails then this delay is increased to prevent extra load being placed on the system by continual restarts. This option controls what this maximum delay is.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_WATCH_CHECK_INTERVAL", + default => "10", + description => "How often to check the capture daemons have not locked up", + help => "The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines how often the daemons are checked.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_WATCH_MAX_DELAY", + default => "5", + description => "The maximum delay allowed since the last captured image", + help => "The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines the maximum delay to allow since the last captured frame. The daemon will be restarted if it has not captured any images after this period though the actual restart may take slightly longer in conjunction with the check interval value above.", + type => $types{decimal}, + category => "system", + }, + { + + name => "ZM_RUN_AUDIT", + default => "yes", + description => "Run zmaudit to check data consistency", + help => "The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using 'fast deletes' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. This option controls whether zmaudit is run in the background and performs these checks and fixes continuously. This is recommended for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to not have zmaudit running unconditionally and schedule occasional checks at other, more convenient, times.", + type => $types{boolean}, + category => "system", + }, + { + + name => "ZM_AUDIT_CHECK_INTERVAL", + default => "900", + description => "How often to check database and filesystem consistency", + help => "The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using 'fast deletes' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. The default check interval of 900 seconds (15 minutes) is fine for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to make this interval much larger to reduce the impact on your system. This option determines how often these checks are performed.", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_FORCED_ALARM_SCORE", + default => "255", + description => "Score to give forced alarms", + help => "The 'zmu' utility can be used to force an alarm on a monitor rather than rely on the motion detection algorithms. This option determines what score to give these alarms to distinguish them from regular ones. It must be 255 or less.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_BULK_FRAME_INTERVAL", + default => "100", + description => "How often a bulk frame should be written to the database", + help => "Traditionally ZoneMinder writes an entry into the Frames database table for each frame that is captured and saved. This works well in motion detection scenarios but when in a DVR situation ('Record' or 'Mocord' mode) this results in a huge number of frame writes and a lot of database and disk bandwidth for very little additional information. Setting this to a non-zero value will enabled ZoneMinder to group these non-alarm frames into one 'bulk' frame entry which saves a lot of bandwidth and space. The only disadvantage of this is that timing information for individual frames is lost but in constant frame rate situations this is usually not significant. This setting is ignored in Modect mode and individual frames are still written if an alarm occurs in Mocord mode also.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_EVENT_CLOSE_MODE", + default => "idle", + description => "When continuous events are closed.", + help => "When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section. This option controls what happens when an alarm occurs in Mocord mode. The 'time' setting means that the event will be closed at the end of the section regardless of alarm activity. The 'idle' setting means that the event will be closed at the end of the section if there is no alarm activity occuring at the time otherwise it will be closed once the alarm is over meaning the event may end up being longer than the normal section length. The 'alarm' setting means that if an alarm occurs during the event, the event will be closed once the alarm is over regardless of when this occurs. This has the effect of limiting the number of alarms to one per event and the events will be shorter than the section length if an alarm has occurred.", + type => $types{boolean}, + type => { db_type=>"string", hint=>"time|idle|alarm", pattern=>qr|^([tia])|i, format=>q( ($1 =~ /^t/) ? "time" : ($1 =~ /^i/ ? "idle" : "time" ) ) }, + category => "config", + }, + # Deprecated, superseded by event close mode + { + name => "ZM_FORCE_CLOSE_EVENTS", + default => "no", + description => "Close events at section ends.", + help => "When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section and ordinarily this will prevent the event being closed until the motion has ceased. Switching this option on will force the event closed at the specified time regardless of any motion activity.", + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_CREATE_ANALYSIS_IMAGES", + default => "yes", + description => "Create analysed alarm images with motion outlined", + help => "By default during an alarm ZoneMinder records both the raw captured image and one that has been analysed and had areas where motion was detected outlined. This can be very useful during zone configuration or in analysing why events occured. However it also incurs some overhead and in a stable system may no longer be necessary. This parameter allows you to switch the generation of these images off.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_WEIGHTED_ALARM_CENTRES", + default => "no", + description => "Use a weighted algorithm to calculate the centre of an alarm", + help => "ZoneMinder will always calculate the centre point of an alarm in a zone to give some indication of where on the screen it is. This can be used by the experimental motion tracking feature or your own custom extensions. In the alarmed or filtered pixels mode this is a simple midpoint between the extents of the detected pxiesl. However in the blob method this can instead be calculated using weighted pixel locations to give more accurate positioning for irregularly shaped blobs. This method, while more precise is also slower and so is turned off by default.", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_EVENT_IMAGE_DIGITS", + default => "3", + description => "How many significant digits are used in event image numbering", + help => "As event images are captured they are stored to the filesystem with a numerical index. By default this index has three digits so the numbers start 001, 002 etc. This works works for most scenarios as events with more than 999 frames are rarely captured. However if you have extremely long events and use external applications then you may wish to increase this to ensure correct sorting of images in listings etc. Warning, increasing this value on a live system may render existing events unviewable as the event will have been saved with the previous scheme. Decreasing this value should have no ill effects.", + type => $types{integer}, + category => "config", + }, + { + name => "ZM_DEFAULT_ASPECT_RATIO", + default => "4:3", + description => "The default width:height aspect ratio used in monitors", + help => "When specifying the dimensions of monitors you can click a checkbox to ensure that the width stays in the correct ratio to the height, or vice versa. This setting allows you to indicate what the ratio of these settings should be. This should be specified in the format : and the default of 4:3 normally be acceptable but 11:9 is another common setting. If the checkbox is not clicked when specifying monitor dimensions this setting has no effect.", + type => $types{string}, + category => "config", + }, + { + name => "ZM_USER_SELF_EDIT", + default => "no", + description => "Allow unprivileged users to change their details", + help => "Ordinarily only users with system edit privilege are able to change users details. Switching this option on allows ordinary users to change their passwords and their language settings", + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_OPT_FRAME_SERVER", + default => "no", + description => "Should analysis farm out the writing of images to disk", + #requires => [ { name => "ZM_OPT_ADAPTIVE_SKIP", value => "yes" } ], + help => "In some circumstances it is possible for a slow disk to take so long writing images to disk that it causes the analysis daemon to fall behind especially during high frame rate events. Setting this option to yes enables a frame server daemon (zmf) which will be sent the images from the analysis daemon and will do the actual writing of images itself freeing up the analysis daemon to get on with other things. Should this transmission fail or other permanent or transient error occur, this function will fall back to the analysis daemon.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_FRAME_SOCKET_SIZE", + default => "0", + description => "Specify the frame server socket buffer size if non-standard", + requires => [ { name => "ZM_OPT_FRAME_SERVER", value => "yes" } ], + help => "For large captured images it is possible for the writes from the analysis daemon to the frame server to fail as the amount to be written exceeds the default buffer size. While the images are then written by the analysis daemon so no data is lost, it defeats the object of the frame server daemon in the first place. You can use this option to indicate that a larger buffer size should be used. Note that you may have to change the existing maximum socket buffer size on your system via sysctl (or in /proc/sys/net/core/wmem_max) to allow this new size to be set. Alternatively you can change the default buffer size on your system in the same way in which case that will be used with no change necessary in this option", + type => $types{integer}, + category => "system", + }, + { + name => "ZM_OPT_CONTROL", + default => "no", + description => "Support controllable (e.g. PTZ) cameras", + help => "ZoneMinder includes limited support for controllable cameras. A number of sample protocols are included and others can easily be added. If you wish to control your cameras via ZoneMinder then select this option otherwise if you only have static cameras or use other control methods then leave this option off.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_OPT_TRIGGERS", + default => "no", + description => "Interface external event triggers via socket or device files", + help => "ZoneMinder can interact with external systems which prompt or cancel alarms. This is done via the zmtrigger.pl script. This option indicates whether you want to use these external triggers. Most people will say no here.", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_CHECK_FOR_UPDATES", + default => "yes", + description => "Check with zoneminder.com for updated versions", + help => "From ZoneMinder version 1.17.0 onwards new versions are expected to be more frequent. To save checking manually for each new version ZoneMinder can check with the zoneminder.com website to determine the most recent release. These checks are infrequent, about once per week, and no personal or system information is transmitted other than your current version number. If you do not wish these checks to take place or your ZoneMinder system has no internet access you can switch these check off with this configuration variable", + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_UPDATE_CHECK_PROXY", + default => "", + description => "Proxy url if required to access zoneminder.com", + help => "If you use a proxy to access the internet then ZoneMinder needs to know so it can access zoneminder.com to check for updates. If you do use a proxy enter the full proxy url here in the form of http://:/", + type => $types{string}, + category => "system", + }, + { + name => "ZM_SHM_KEY", + default => "0x7a6d0000", + description => "Shared memory root key to use", + help => "ZoneMinder uses shared memory to speed up communication between modules. To identify the right area to use shared memory keys are used. This option controls what the base key is, each monitor will have it's Id or'ed with this to get the actual key used. You will not normally need to change this value unless it clashes with another instance of ZoneMinder on the same machine. Only the first four hex digits are used, the lower four will be masked out and ignored.", + type => $types{hexadecimal}, + category => "system", + }, + # Deprecated, really no longer necessary + { + name => "ZM_WEB_REFRESH_METHOD", + default => "javascript", + description => "What method windows should use to refresh themselves", + help => "Many windows in Javascript need to refresh themselves to keep their information current. This option determines what method they should use to do this. Choosing 'javascript' means that each window will have a short JavaScript statement in with a timer to prompt the refresh. This is the most compatible method. Choosing 'http' means the refresh instruction is put in the HTTP header. This is a cleaner method but refreshes are interrupted or cancelled when a link in the window is clicked meaning that the window will no longer refresh and this would have to be done manually.", + type => { db_type=>"string", hint=>"javascript|http", pattern=>qr|^([jh])|i, format=>q( $1 =~ /^j/ ? "javascript" : "http" ) }, + category => "hidden", + }, + { + name => "ZM_WEB_EVENT_SORT_FIELD", + default => "DateTime", + description => "Default field the event lists are sorted by", + help => "Events in lists can be initially ordered in any way you want. This option controls what field is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the 'Prev' and 'Next' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.", + type => { db_type=>"string", hint=>"Id|Name|Cause|MonitorName|DateTime|Length|Frames|AlarmFrames|TotScore|AvgScore|MaxScore", pattern=>qr|.|, format=>q( $1 ) }, + category => "web", + }, + { + name => "ZM_WEB_EVENT_SORT_ORDER", + default => "asc", + description => "Default order the event lists are sorted by", + help => "Events in lists can be initially ordered in any way you want. This option controls what order (ascending or descending) is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the 'Prev' and 'Next' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.", + type => { db_type=>"string", hint=>"asc|desc", pattern=>qr|^([ad])|i, format=>q( $1 =~ /^a/i ? "asc" : "desc" ) }, + category => "web", + }, + { + name => "ZM_WEB_EVENTS_PER_PAGE", + default => "25", + description => "How many events to list per page in paged mode", + help => "In the event list view you can either list all events or just a page at a time. This option controls how many events are listed per page in paged mode and how often to repeat the column headers in non-paged mode.", + type => $types{integer}, + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMBS", + default => "no", + description => "Display mini-thumbnails of event images in event lists", + help => "Ordinarily the event lists just display text details of the events to save space and time. By switching this option on you can also display small thumbnails to help you identify events of interest. The size of these thumbnails is controlled by the following two options.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMB_WIDTH", + default => "48", + description => "The width of the thumbnails that appear in the event lists", + help => "This options controls the width of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a height instead in the next option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.", + type => $types{integer}, + requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMB_HEIGHT", + default => "0", + description => "The height of the thumbnails that appear in the event lists", + help => "This options controls the height of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a width instead in the previous option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.", + type => $types{integer}, + requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_USE_OBJECT_TAGS", + default => "yes", + description => "Wrap embed in object tags for media content", + help => "There are two methods of including media content in web pages. The most common way is use the EMBED tag which is able to give some indication of the type of content. However this is not a standard part of HTML. The official method is to use OBJECT tags which are able to give more information allowing the correct media viewers etc to be loaded. However these are less widely supported and content may be specifically tailored to a particular platform or player. This option controls whether media content is enclosed in EMBED tags only or whether, where appropriate, it is additionally wrapped in OBJECT tags. Currently OBJECT tags are only used in a limited number of circumstances but they may become more widespread in the future. It is suggested that you leave this option on unless you encounter problems playing some content.", + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_H_REFRESH_MAIN", + default => "300", + introduction => "There are now a number of options that are grouped into bandwidth categories, this allows you to configure the ZoneMinder client to work optimally over the various access methods you might to access the client.\n\nThe next few options control what happens when the client is running in 'high' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a local network or high speed link. In most cases the default values will be suitable as a starting point.", + description => "How often (in seconds) the main console window should refresh itself", + help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_CYCLE", + default => "10", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_IMAGE", + default => "5", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_STATUS", + default => "3", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_EVENTS", + default => "30", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "highband", + }, + { + name => "ZM_WEB_H_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_VIDEO_BITRATE", + default => "150000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_VIDEO_MAXFPS", + default => "15", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_SCALE_THUMBS", + default => "no", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "highband", + }, + { + name => "ZM_WEB_H_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", + type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, + category => "highband", + }, + { + name => "ZM_WEB_H_SHOW_PROGRESS", + default => "yes", + description => "Show the progress of replay in event view.", + help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", + type => $types{boolean}, + category => "highband", + }, + { + name => "ZM_WEB_H_AJAX_TIMEOUT", + default => "3000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_M_REFRESH_MAIN", + default => "300", + description => "How often (in seconds) the main console window should refresh itself", + help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", + type => $types{integer}, + introduction => "The next few options control what happens when the client is running in 'medium' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a slower cable or DSL link. In most cases the default values will be suitable as a starting point.", + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_CYCLE", + default => "20", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_IMAGE", + default => "10", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_STATUS", + default => "5", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_EVENTS", + default => "60", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "medband", + }, + { + name => "ZM_WEB_M_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_VIDEO_BITRATE", + default => "75000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_VIDEO_MAXFPS", + default => "10", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "medband", + }, + { + name => "ZM_WEB_M_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", + type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, + category => "medband", + }, + { + name => "ZM_WEB_M_SHOW_PROGRESS", + default => "yes", + description => "Show the progress of replay in event view.", + help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", + type => $types{boolean}, + category => "medband", + }, + { + name => "ZM_WEB_M_AJAX_TIMEOUT", + default => "5000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_L_REFRESH_MAIN", + default => "300", + description => "How often (in seconds) the main console window should refresh itself", + introduction => "The next few options control what happens when the client is running in 'low' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a modem or slow link. In most cases the default values will be suitable as a starting point.", + help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_CYCLE", + default => "30", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_IMAGE", + default => "15", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_STATUS", + default => "10", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_EVENTS", + default => "180", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "lowband", + }, + { + name => "ZM_WEB_L_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_VIDEO_BITRATE", + default => "25000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_VIDEO_MAXFPS", + default => "5", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "lowband", + }, + { + name => "ZM_WEB_L_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", + type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, + category => "lowband", + }, + { + name => "ZM_WEB_L_SHOW_PROGRESS", + default => "no", + description => "Show the progress of replay in event view.", + help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", + type => $types{boolean}, + category => "lowband", + }, + { + name => "ZM_WEB_L_AJAX_TIMEOUT", + default => "10000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_P_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", + type => $types{tristate}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", + type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", + type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", + type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_VIDEO_BITRATE", + default => "8000", + description => "What the bitrate of the video encoded stream should be set to", + help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_VIDEO_MAXFPS", + default => "5", + description => "What the maximum frame rate for streamed video should be", + help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", + type => $types{boolean}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_AJAX_TIMEOUT", + default => "10000", + description => "How long to wait for Ajax request responses (ms)", + help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_DYN_LAST_VERSION", + default => "", + description => "What the last version of ZoneMinder recorded from zoneminder.com is", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_CURR_VERSION", + default => "@VERSION@", + description => "What the effective current version of ZoneMinder is, might be different from actual if versions ignored", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_DB_VERSION", + default => "@VERSION@", + description => "What the version of the database is, from zmupdate", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_LAST_CHECK", + default => "", + description => "When the last check for version from zoneminder.com was", + help => "", + type => $types{integer}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_NEXT_REMINDER", + default => "", + description => "When the earliest time to remind about versions will be", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_DONATE_REMINDER_TIME", + default => 0, + description => "When the earliest time to remind about donations will be", + help => "", + type => $types{integer}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_SHOW_DONATE_REMINDER", + default => "yes", + description => "Remind about donations or not", + help => "", + type => $types{boolean}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_EYEZM_DEBUG", + default => "no", + description => "Switch additional debugging on for eyeZm Plugin", + help => "Enable or Disable extra debugging from the eyeZm Plugin. Extra debugging information will be displayed in it's own file (EYEZM_LOG_TO_FILE is set), or your Apache error log", + type => $types{boolean}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_LOG_TO_FILE", + default => "yes", + description => "When eyeZm Debugging is enabled, enabling this logs output to it's own file", + help => "When EYEZM_DEBUG is on and EYEZM_LOG_TO_FILE is on, output generated from the eyeZm Plugin will go to it's own file. Otherwise it will go to the apache error log.", + type => $types{boolean}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_LOG_FILE", + default => "@ZM_LOGDIR@/zm_xml.log", + description => "Default filename to use when logging eyeZm Output and EYEZM_LOG_TO_FILE is enabled", + help => "This file will contain it's own output from the eyeZm Plugin when EYEZM_LOG_TO_FILE and EYEZM_DEBUG are both enabled", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_EVENT_VCODEC", + default => "mpeg4", + description => "Default video-codec to use for encoding events", + help => "The eyeZm Plugin calls FFMPEG externally to encode the captured images. If your FFMPEG is not built with support for H264, change this to MPEG-4. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+).", + type => { db_type=>"string", hint=>"mpeg4|h264", pattern=>qr|^([mh])|i, format=>q( $1 =~ /^m/ ? "mpeg4" : "h264" ) }, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_FEED_VCODEC", + default => "mjpeg", + description => "Default video-codec to use for streaming the live feed", + help => "Determines whether the live stream is generated using native MJPEG streaming with ZoneMinder, or H264 using FFMPEG and HTML-5 streaming. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+). This is just a default parameter, and can be overridden with eyeZm.", + type => { db_type=>"string", hint=>"mjpeg|h264", pattern=>qr|^([mh])|i, format=>q( $1 =~ /^m/ ? "mjpeg" : "h264" ) }, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_DEFAULT_BR", + default => "96k", + description => "Default bit-rate to use with FFMPEG for H264 streaming", + help => "When using the eyeZm Plugin to stream H264 data, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_DEFAULT_EVBR", + default => "128k", + description => "Default bit-rate to use with FFMPEG for H264 event viewing", + help => "When using the eyeZm Plugin to view events in H264, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_TIMEOUT", + default => "20", + description => "Timeout (sec) to wait for H264 stream to start before terminating", + help => "The eyeZm Plugin will attempt to spawn an H264 stream when requested, and require that it complete within the timeout specified. If you have a slow system or find through the logs that the H264 stream is not starting because the timeout is expiring, even though FFMPEG is running, try increasing this value. If you have a fast system, decreasing this value can improve the responsiveness when there are issues starting H264 streams", + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_SEG_DURATION", + default => "3", + description => "Segment duration used for streaming using HTTP-5 Streaming protocol", + help => "The HTTP-5 Live Streaming Protocol segments the input video stream into small chunks of a duration specified by this parameter. Increasing the segment duration will help with choppy connections on the other end, but will increase the latency in starting a stream.", + type => $types{string}, + category => "eyeZm", + }, +); + +our %options_hash = map { ( $_->{name}, $_ ) } @options; + +# This function should never need to be called explicitly, except if +# this module is 'require'd rather than 'use'd. See zmconfgen.pl. +sub initialiseConfig +{ + return if ( $configInitialised ); + + # Do some initial data munging to finish the data structures + # Create option ids + my $option_id = 0; + foreach my $option ( @options ) + { + if ( defined($option->{default}) ) + { + $option->{value} = $option->{default} + } + else + { + $option->{value} = ''; + } + #next if ( $option->{category} eq 'hidden' ); + $option->{id} = $option_id++; + } + $configInitialised = 1; +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::ConfigData - ZoneMinder Configuration Data module + +=head1 SYNOPSIS + + use ZoneMinder::ConfigData; + use ZoneMinder::ConfigData qw(:all); + + loadConfigFromDB(); + saveConfigToDB(); + +=head1 DESCRIPTION + +The ZoneMinder:ConfigData module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. + +The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. + +=head1 METHODS + +=over 4 + +=item loadConfigFromDB (); + +Loads existing configuration from the database (if any) and merges it with the definitions held in this module. This results in the merging of any new configuration and the removal of any deprecated configuration while preserving the existing values of every else. + +=item saveConfigToDB (); + +Saves configuration held in memory to the database. The act of loading and saving configuration is a convenient way to ensure that the configuration held in the database corresponds with the most recent definitions and that all components are using the same set of configuration. + +=head2 EXPORT + +None by default. +The :data tag will export the various configuration data structures +The :functions tag will export the helper functions. +The :all tag will export all above symbols. + + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Memory.pm b/scripts/ZoneMinder/lib/ZoneMinder/Memory.pm new file mode 100644 index 000000000..86037713d --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/Memory.pm @@ -0,0 +1,873 @@ +# ========================================================================== +# +# ZoneMinder Memory Access Module, $Date: 2008-02-25 10:13:13 +0000 (Mon, 25 Feb 2008) $, $Revision: 2323 $ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This module contains the common definitions and functions used by the rest +# of the ZoneMinder scripts +# +package ZoneMinder::Memory; + +use 5.006; +use strict; +use warnings; + +require Exporter; +require ZoneMinder::Base; + +our @ISA = qw(Exporter ZoneMinder::Base); + +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. + +# This allows declaration use ZoneMinder ':all'; +# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK +# will save memory. +our %EXPORT_TAGS = ( + 'constants' => [ qw( + STATE_IDLE + STATE_PREALARM + STATE_ALARM + STATE_ALERT + STATE_TAPE + ACTION_GET + ACTION_SET + ACTION_RELOAD + ACTION_SUSPEND + ACTION_RESUME + TRIGGER_CANCEL + TRIGGER_ON + TRIGGER_OFF + ) ], + 'functions' => [ qw( + zmMemVerify + zmMemInvalidate + zmMemRead + zmMemWrite + zmMemTidy + zmGetMonitorState + zmGetAlarmLocation + zmIsAlarmed + zmInAlarm + zmHasAlarmed + zmGetLastEvent + zmGetLastWriteTime + zmGetLastReadTime + zmMonitorEnable + zmMonitorDisable + zmMonitorSuspend + zmMonitorResume + zmTriggerEventOn + zmTriggerEventOff + zmTriggerEventCancel + zmTriggerShowtext + ) ], +); +push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; + +our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); + +our @EXPORT = qw(); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Shared Memory Facilities +# +# ========================================================================== + +use ZoneMinder::Config qw(:all); +use ZoneMinder::Logger qw(:all); + +use constant STATE_IDLE => 0; +use constant STATE_PREALARM => 1; +use constant STATE_ALARM => 2; +use constant STATE_ALERT => 3; +use constant STATE_TAPE => 4; + +use constant ACTION_GET => 1; +use constant ACTION_SET => 2; +use constant ACTION_RELOAD => 4; +use constant ACTION_SUSPEND => 16; +use constant ACTION_RESUME => 32; + +use constant TRIGGER_CANCEL => 0; +use constant TRIGGER_ON => 1; +use constant TRIGGER_OFF => 2; + +use Storable qw( freeze thaw ); + +if ( "yes" eq 'yes' ) # 'yes' if memory is mmapped +{ + require ZoneMinder::Memory::Mapped; + ZoneMinder::Memory::Mapped->import(); +} +else +{ + require ZoneMinder::Memory::Shared; + ZoneMinder::Memory::Shared->import(); +} + +# Native architecture +our $arch = int(3.2*length(~0)); +our $native = $arch/8; +our $mem_seq = 0; + +our $mem_data = +{ + "shared_data" => { "type"=>"SharedData", "seq"=>$mem_seq++, "contents"=> { + "size" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_write_index" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_read_index" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "state" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_event" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "action" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "brightness" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "hue" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "colour" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "contrast" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "alarm_x" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "alarm_y" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "valid" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "active" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "signal" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "format" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "imagesize" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "epadding1" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "epadding2" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_write_time" => { "type"=>"time_t64", "seq"=>$mem_seq++ }, + "last_read_time" => { "type"=>"time_t64", "seq"=>$mem_seq++ }, + "control_state" => { "type"=>"uint8[256]", "seq"=>$mem_seq++ }, + } + }, + "trigger_data" => { "type"=>"TriggerData", "seq"=>$mem_seq++, "contents"=> { + "size" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "trigger_state" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "trigger_score" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "padding" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "trigger_cause" => { "type"=>"int8[32]", "seq"=>$mem_seq++ }, + "trigger_text" => { "type"=>"int8[256]", "seq"=>$mem_seq++ }, + "trigger_showtext" => { "type"=>"int8[256]", "seq"=>$mem_seq++ }, + } + }, + "end" => { "seq"=>$mem_seq++, "size"=> 0 } +}; + +our $mem_size = 0; +our $mem_verified = {}; + +sub zmMemInit +{ + my $offset = 0; + + foreach my $section_data ( sort { $a->{seq} <=> $b->{seq} } values( %$mem_data ) ) + { + $section_data->{offset} = $offset; + $section_data->{align} = 0; + + if ( $section_data->{align} > 1 ) + { + my $rem = $offset % $section_data->{align}; + if ( $rem > 0 ) + { + $offset += ($section_data->{align} - $rem); + } + } + foreach my $member_data ( sort { $a->{seq} <=> $b->{seq} } values( %{$section_data->{contents}} ) ) + { + if ( $member_data->{type} eq "long" || $member_data->{type} eq "ulong" || $member_data->{type} eq "size_t") + { + $member_data->{size} = $member_data->{align} = $native; + } + elsif( $member_data->{type} eq "int64" || $member_data->{type} eq "uint64" || $member_data->{type} eq "time_t64") + { + $member_data->{size} = $member_data->{align} = 8; + } + elsif ( $member_data->{type} eq "int32" || $member_data->{type} eq "uint32" || $member_data->{type} eq "bool4" ) + { + $member_data->{size} = $member_data->{align} = 4; + } + elsif ($member_data->{type} eq "int16" || $member_data->{type} eq "uint16") + { + $member_data->{size} = $member_data->{align} = 2; + } + elsif ( $member_data->{type} eq "int8" || $member_data->{type} eq "uint8" || $member_data->{type} eq "bool1" ) + { + $member_data->{size} = $member_data->{align} = 1; + } + elsif ( $member_data->{type} =~ /^u?int8\[(\d+)\]$/ ) + { + $member_data->{size} = $1; + $member_data->{align} = 1; + } + else + { + Fatal( "Unexpected type '".$member_data->{type}."' found in shared data definition." ); + } + + if ( $member_data->{align} > 1 && ($offset%$member_data->{align}) > 0 ) + { + $offset += ($member_data->{align} - ($offset%$member_data->{align})); + } + $member_data->{offset} = $offset; + $offset += $member_data->{size} + } + $section_data->{size} = $offset - $section_data->{offset}; + } + + $mem_size = $offset; +} + +&zmMemInit(); + +sub zmMemVerify( $ ) +{ + my $monitor = shift; + if ( !zmMemAttach( $monitor, $mem_size ) ) + { + return( undef ); + } + + my $mem_key = zmMemKey( $monitor ); + if ( !defined($mem_verified->{$mem_key}) ) + { + my $sd_size = zmMemRead( $monitor, "shared_data:size", 1 ); + if ( $sd_size != $mem_data->{shared_data}->{size} ) + { + if ( $sd_size ) + { + Error( "Shared data size conflict in shared_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{shared_data}->{size}.", got ".$sd_size ); + } + else + { + Debug( "Shared data size conflict in shared_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{shared_data}->{size}.", got ".$sd_size ); + } + return( undef ); + } + my $td_size = zmMemRead( $monitor, "trigger_data:size", 1 ); + if ( $td_size != $mem_data->{trigger_data}->{size} ) + { + if ( $td_size ) + { + Error( "Shared data size conflict in trigger_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{triggger_data}->{size}.", got ".$td_size ); + } + else + { + Debug( "Shared data size conflict in trigger_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{triggger_data}->{size}.", got ".$td_size ); + } + return( undef ); + } + $mem_verified->{$mem_key} = !undef; + } + return( !undef ); +} + +sub zmMemRead( $$;$ ) +{ + my $monitor = shift; + my $fields = shift; + my $nocheck = shift; + + if ( !($nocheck || zmMemVerify( $monitor )) ) + { + return( undef ); + } + + if ( !ref($fields) ) + { + $fields = [ $fields ]; + } + my @values; + foreach my $field ( @$fields ) + { + my ( $section, $element ) = split( /[\/:.]/, $field ); + Fatal( "Invalid shared data selector '$field'" ) if ( !$section || !$element ); + + my $offset = $mem_data->{$section}->{contents}->{$element}->{offset}; + my $type = $mem_data->{$section}->{contents}->{$element}->{type}; + my $size = $mem_data->{$section}->{contents}->{$element}->{size}; + + my $data = zmMemGet( $monitor, $offset, $size ); + if ( !defined($data) ) + { + Error( "Unable to read '$field' from memory for monitor ".$monitor->{Id} ); + zmMemInvalidate( $monitor ); + return( undef ); + } + my $value; + if ( $type eq "long" ) + { + ( $value ) = unpack( "l!", $data ); + } + elsif ( $type eq "ulong" || $type eq "size_t" ) + { + ( $value ) = unpack( "L!", $data ); + } + elsif ( $type eq "int64" || $type eq "time_t64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + ( $value ) = unpack( "l!", $data ); + } + elsif ( $type eq "uint64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + ( $value ) = unpack( "L!", $data ); + } + elsif ( $type eq "int32" ) + { + ( $value ) = unpack( "l", $data ); + } + elsif ( $type eq "uint32" || $type eq "bool4" ) + { + ( $value ) = unpack( "L", $data ); + } + elsif ( $type eq "int16" ) + { + ( $value ) = unpack( "s", $data ); + } + elsif ( $type eq "uint16" ) + { + ( $value ) = unpack( "S", $data ); + } + elsif ( $type eq "int8" ) + { + ( $value ) = unpack( "c", $data ); + } + elsif ( $type eq "uint8" || $type eq "bool1" ) + { + ( $value ) = unpack( "C", $data ); + } + elsif ( $type =~ /^int8\[\d+\]$/ ) + { + ( $value ) = unpack( "Z".$size, $data ); + } + elsif ( $type =~ /^uint8\[\d+\]$/ ) + { + ( $value ) = unpack( "C".$size, $data ); + } + else + { + Fatal( "Unexpected type '".$type."' found for '".$field."'" ); + } + push( @values, $value ); + } + if ( wantarray() ) + { + return( @values ) + } + return( $values[0] ); +} + +sub zmMemInvalidate( $ ) +{ + my $monitor = shift; + my $mem_key = zmMemKey($monitor); + if ( $mem_key ) + { + delete $mem_verified->{$mem_key}; + zmMemDetach( $monitor ); + } +} + +sub zmMemTidy() +{ + zmMemClean(); +} + +sub zmMemWrite( $$;$ ) +{ + my $monitor = shift; + my $field_values = shift; + my $nocheck = shift; + + if ( !($nocheck || zmMemVerify( $monitor )) ) + { + return( undef ); + } + + while ( my ( $field, $value ) = each( %$field_values ) ) + { + my ( $section, $element ) = split( /[\/:.]/, $field ); + Fatal( "Invalid shared data selector '$field'" ) if ( !$section || !$element ); + + my $offset = $mem_data->{$section}->{contents}->{$element}->{offset}; + my $type = $mem_data->{$section}->{contents}->{$element}->{type}; + my $size = $mem_data->{$section}->{contents}->{$element}->{size}; + + my $data; + if ( $type eq "long" ) + { + $data = pack( "l!", $value ); + } + elsif ( $type eq "ulong" || $type eq "size_t" ) + { + $data = pack( "L!", $value ); + } + elsif ( $type eq "int64" || $type eq "time_t64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + $data = pack( "l!", $value ); + } + elsif ( $type eq "uint64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + $data = pack( "L!", $value ); + } + elsif ( $type eq "int32" ) + { + $data = pack( "l", $value ); + } + elsif ( $type eq "uint32" || $type eq "bool4" ) + { + $data = pack( "L", $value ); + } + elsif ( $type eq "int16" ) + { + $data = pack( "s", $value ); + } + elsif ( $type eq "uint16" ) + { + $data = pack( "S", $value ); + } + elsif ( $type eq "int8" ) + { + $data = pack( "c", $value ); + } + elsif ( $type eq "uint8" || $type eq "bool1" ) + { + $data = pack( "C", $value ); + } + elsif ( $type =~ /^int8\[\d+\]$/ ) + { + $data = pack( "Z".$size, $value ); + } + elsif ( $type =~ /^uint8\[\d+\]$/ ) + { + $data = pack( "C".$size, $value ); + } + else + { + Fatal( "Unexpected type '".$type."' found for '".$field."'" ); + } + + if ( !zmMemPut( $monitor, $offset, $size, $data ) ) + { + Error( "Unable to write '$value' to '$field' in memory for monitor ".$monitor->{Id} ); + zmMemInvalidate( $monitor ); + return( undef ); + } + } + return( !undef ); +} + +sub zmGetMonitorState( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:state" ) ); +} + +sub zmGetAlarmLocation( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, [ "shared_data:alarm_x", "shared_data:alarm_y" ] ) ); +} + +sub zmSetControlState( $$ ) +{ + my $monitor = shift; + my $control_state = shift; + + zmMemWrite( $monitor, { "shared_data:control_state" => $control_state } ); +} + +sub zmGetControlState( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:control_state" ) ); +} + +sub zmSaveControlState( $$ ) +{ + my $monitor = shift; + my $control_state = shift; + + zmSetControlState( $monitor, freeze( $control_state ) ); +} + +sub zmRestoreControlState( $ ) +{ + my $monitor = shift; + + return( thaw( zmGetControlState( $monitor ) ) ); +} + +sub zmIsAlarmed( $ ) +{ + my $monitor = shift; + + my $state = zmGetMonitorState( $monitor ); + + return( $state == STATE_ALARM ); +} + +sub zmInAlarm( $ ) +{ + my $monitor = shift; + + my $state = zmGetMonitorState( $monitor ); + + return( $state == STATE_ALARM || $state == STATE_ALERT ); +} + +sub zmHasAlarmed( $$ ) +{ + my $monitor = shift; + my $last_event_id = shift; + + my ( $state, $last_event ) = zmMemRead( $monitor, [ "shared_data:state", "shared_data:last_event" ] ); + + if ( $state == STATE_ALARM || $state == STATE_ALERT ) + { + return( $last_event ); + } + elsif( $last_event != $last_event_id ) + { + return( $last_event ); + } + return( undef ); +} + +sub zmGetLastEvent( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:last_event" ) ); +} + +sub zmGetLastWriteTime( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:last_write_time" ) ); +} + +sub zmGetLastReadTime( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:last_read_time" ) ); +} + +sub zmGetMonitorActions( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "shared_data:action" ) ); +} + +sub zmMonitorEnable( $ ) +{ + my $monitor = shift; + + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_SUSPEND; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); +} + +sub zmMonitorDisable( $ ) +{ + my $monitor = shift; + + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_RESUME; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); +} + +sub zmMonitorSuspend( $ ) +{ + my $monitor = shift; + + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_SUSPEND; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); +} + +sub zmMonitorResume( $ ) +{ + my $monitor = shift; + + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_RESUME; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); +} + +sub zmGetTriggerState( $ ) +{ + my $monitor = shift; + + return( zmMemRead( $monitor, "trigger_data:trigger_state" ) ); +} + +sub zmTriggerEventOn( $$$;$$ ) +{ + my $monitor = shift; + my $score = shift; + my $cause = shift; + my $text = shift; + my $showtext = shift; + + my $values = { + "trigger_data:trigger_score" => $score, + "trigger_data:trigger_cause" => $cause, + }; + $values->{"trigger_data:trigger_text"} = $text if ( defined($text) ); + $values->{"trigger_data:trigger_showtext"} = $showtext if ( defined($showtext) ); + $values->{"trigger_data:trigger_state"} = TRIGGER_ON; # Write state last so event not read incomplete + + zmMemWrite( $monitor, $values ); +} + +sub zmTriggerEventOff( $ ) +{ + my $monitor = shift; + + my $values = { + "trigger_data:trigger_state" => TRIGGER_OFF, + "trigger_data:trigger_score" => 0, + "trigger_data:trigger_cause" => "", + "trigger_data:trigger_text" => "", + "trigger_data:trigger_showtext" => "", + }; + + zmMemWrite( $monitor, $values ); +} + +sub zmTriggerEventCancel( $ ) +{ + my $monitor = shift; + + my $values = { + "trigger_data:trigger_state" => TRIGGER_CANCEL, + "trigger_data:trigger_score" => 0, + "trigger_data:trigger_cause" => "", + "trigger_data:trigger_text" => "", + "trigger_data:trigger_showtext" => "", + }; + + zmMemWrite( $monitor, $values ); +} + +sub zmTriggerShowtext( $$ ) +{ + my $monitor = shift; + my $showtext = shift; + + my $values = { + "trigger_data:trigger_showtext" => $showtext, + }; + + zmMemWrite( $monitor, $values ); +} + +1; +__END__ + +=head1 NAME + +ZoneMinder::MappedMem - ZoneMinder Mapped Memory access module + +=head1 SYNOPSIS + + use ZoneMinder::MappedMem; + use ZoneMinder::MappedMem qw(:all); + + if ( zmMemVerify( $monitor ) ) + { + $state = zmGetMonitorState( $monitor ); + if ( $state == STATE_ALARM ) + { + ... + } + } + + ( $lri, $lwi ) = zmMemRead( $monitor, [ "shared_data:last_read_index", "shared_data:last_write_index" ] ); + zmMemWrite( $monitor, { "trigger_data:trigger_showtext" => "Some Text" } ); + +=head1 DESCRIPTION + +The ZoneMinder:MappedMem module contains methods for accessing and writing to mapped memory as well as helper methods for common operations. + +The core elements of ZoneMinder used mapped memory to allow multiple access to resources. Although ZoneMinder scripts have used this information before, up until now it was difficult to access and prone to errors. This module introduces a common API for mapped memory access (both reading and writing) making it a lot easier to customise scripts or even create your own. + +All the methods listed below require a 'monitor' parameter. This must be a reference to a hash with at least the 'Id' field set to the monitor id of the mapped memory you wish to access. Using database methods to select the monitor details will also return this kind of data. Some of the mapped memory methods will add and amend new fields to this hash. + +=over 4 + +=head1 METHODS + +=item zmMemVerify ( $monitor ); + +Verify that the mapped memory of the monitor given exists and is valid. It will return an undefined value if it is not valid. You should generally call this method first before using any of the other methods, but most of the remaining methods will also do so if the memory has not already been verified. + +=item zmMemInvalidate ( $monitor ); + +Following an error, reset the mapped memory ids and attempt to reverify on the next operation. This is mostly used when a mapped memory segment has gone away and been recreated with a different id. + +=item zmMemRead ( $monitor, $readspec ); + +This method is used to read data from mapped memory attached to the given monitor. The mapped memory will be verified if it has not already been. The 'readspec' must either be a string of the form "
:" or a reference to an array of strings of the same format. In the first case a single value is returned, in the latter case a list of values is return. Errors will cause undefined to be returned. The allowable sections and field names are described below. + +=item zmMemWrite ( $monitor, $writespec ); + +This method is used to write data to mapped memory attached to the given monitor. The mapped memory will be verified if it has not already been. The 'writespec' must be a reference to a hash with keys of the form "
:" and values as the data to be written. Errors will cause undefined to be returned, otherwise a non-undefined value will be returned. The allowable sections and field names are described below. + +=item $state = zmGetMonitorState ( $monitor ); + +Return the current state of the given monitor. This is an integer value and can be compared with the STATE constants given below. + +=item $event_id = zmGetLastEvent ( $monitor ); + +Return the event id of the last event that the monitor generated, or 0 if no event has been generated by the current monitor process. + +=item zmIsAlarmed ( $monitor ); + +Return 1 if the monitor given is currently in an alarm state, 0 otherwise. + +=item zmInAlarm ( $monitor ); + +Return 1 if the monitor given is currently in an alarm or alerted state, 0 otherwise. + +=item zmHasAlarmed ( $monitor ); + +Return 1 if the given monitor is in an alarm state, or has been in an alarm state since the last call to this method. + +=item ( $x, $y ) = zmGetAlarmLocation ( $monitor ); + +Return an x,y pair indicating the image co-ordinates of the centre of the last motion event generated by the given monitor. If no event has been generated by the current monitor process, or the alarm was not motion related, returns -1,-1. + +=item zmGetLastWriteTime ( $monitor ); + +Returns the time (in utc seconds) since the last image was captured by the given monitor and written to shared memory, or 0 otherwise. + +=item zmGetLastReadTime ( $monitor ); + +Returns the time (in utc seconds) since the last image was read from shared memory by the analysis daemon of the given monitor, or 0 otherwise or if the monitor is in monitor only mode. + +=item zmMonitorSuspend ( $monitor ); + +Suspend the given monitor from generating events caused by motion. This method can be used to prevent camera actions such as panning or zooming from causing events. If configured to do so, the monitor may automatically resume after a defined period. + +=item zmMonitorResume ( $monitor ); + +Allow the given monitor to resume generating events caused by motion. + +=item zmTriggerEventOn ( $monitor, $score, $cause [, $text, $showtext ] ); + +Trigger the given monitor to generate an event. You must supply an event score and a cause string indicating the reason for the event. You may also supply a text string containing further details about the event and a showtext string which may be included in the timestamp annotation on any images captured during the event, if configured to do so. + +=item zmTriggerEventOff ( $monitor ); + +Trigger the given monitor to not generate any events. This method does not cancel zmTriggerEventOn, but is exclusive to it. This method is intended to allow external triggers to prevent normal events being generated by monitors in the same way as zmMonitorSuspend but applies to all events and not just motion, and is intended for longer timescales than are appropriate for suspension. + +=item zmTriggerEventCancel ( $monitor ); + +Cancel any previous trigger on or off requests. This stops a triggered alarm if it exists from a previous 'on' and allows events to be generated once more following a previous 'off'. + +=item zmTriggerShowtext ( $monitor, $showtest ); + +Indicate that the given text should be displayed in the timestamp annotation on any images captured, if the format of the annotation string defined for the monitor permits. + +=head1 DATA + +The data fields in mapped memory that may be accessed are as follows. There are two main sections, shared_data which is general data and trigger_data which is used for event triggering. Whilst reading from these fields is harmless, extreme care must be taken when writing to mapped memory, especially in the shared_data section as this is normally written to only by monitor capture and analysis processes. + + shared_data The general mapped memory section + size The size, in bytes, of this section + valid Flag indicating whether this section has been initialised + active Flag indicating whether this monitor is active (enabled/disabled) + signal Flag indicating whether this monitor is reciving a valid signal + state The current monitor state, see the STATE constants below + last_write_index The last index, in the image buffer, that an image has been saved to + last_read_index The last index, in the image buffer, that an image has been analysed from + last_write_time The time (in utc seconds) when the last image was captured + last_read_time The time (in utc seconds) when the last image was analysed + last_event The id of the last event generated by the monitor analysis process, 0 if none + action The monitor actions bitmask, see the ACTION constants below + brightness Read/write location for the current monitor brightness + hue Read/write location for the current monitor hue + colour Read/write location for the current monitor colour + contrast Read/write location for the current monitor contrast + alarm_x Image x co-ordinate (from left) of the centre of the last motion event, -1 if none + alarm_y Image y co-ordinate (from top) of the centre of the last motion event, -1 if none + + trigger_data The triggered event mapped memory section + size The size, in bytes of this section + trigger_state The current trigger state, see the TRIGGER constants below + trigger_score The current triggered event score + trigger_cause The current triggered event cause string + trigger_text The current triggered event descriptive text string + trigger_showtext The triggered text that will be displayed on captured image timestamps + +=head1 CONSTANTS + +The following constants are used by the methods above, but can also be used by user scripts if required. + +=item STATE_IDLE STATE_PREALARM STATE_ALARM STATE_ALERT STATE_TAPE + +These constants define the state of the monitor with respect to alarms and events. They are used in the shared_data:state field. + +=item ACTION_GET ACTION_SET ACTION_RELOAD ACTION_SUSPEND ACTION_RESUME + +These constants defines the various values that can exist in the shared_data:action field. This is a bitmask which when non-zero defines an action that an executing monitor process should take. ACTION_GET requires that the current values of brightness, contrast, colour and hue are taken from the camera and written to the equivalent mapped memory fields. ACTION_SET implies the reverse, that the values in mapped memory should be written to the camera. ACTION_RELOAD signal that the monitor process should reload itself from the database in case any settings have changed there. ACTION_SUSPEND signals that a monitor should stop exaiming images for motion, though other alarms may still occur. ACTION_RESUME sigansl that a monitor should resume motion detectiom. + +=item TRIGGER_CANCEL TRIGGER_ON TRIGGER_OFF + +These constants are used in the definition of external triggers. TRIGGER_CANCEL is used to indicated that any previous trigger settings should be cancelled, TRIGGER_ON signals that an alarm should be created (or continued)) as a result of the current trigger and TRIGGER_OFF signals that the trigger should prevent any alarms from being generated. See the trigger methods above for further details. + +=head1 EXPORT + +None by default. +The :constants tag will export the mapped memory constants which mostly define enumerations for the variables held in memory +The :functions tag will export the mapped memory access functions. +The :all tag will export all above symbols. + + +=head1 SEE ALSO + +http://www.zoneminder.com + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself, either Perl version 5.8.3 or, +at your option, any later version of Perl 5 you may have available. + + +=cut diff --git a/scripts/ZoneMinder/pm_to_blib b/scripts/ZoneMinder/pm_to_blib new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/zm b/scripts/zm new file mode 100644 index 000000000..52d4aacf0 --- /dev/null +++ b/scripts/zm @@ -0,0 +1,120 @@ +#!/bin/sh +# description: ZoneMinder is the top Linux video camera security and surveillance solution. ZoneMinder is intended for use in single or multi-camera video security applications.Copyright: Philip Coombes, Corey DeLasaux 2003-2008 +# chkconfig: 2345 99 00 +# processname: zmpkg.pl + +# Source function library. +. /etc/rc.d/init.d/functions + +prog=ZoneMinder +ZM_CONFIG="/etc/zm/zm.conf" +pidfile="/var/run/zm" +LOCKFILE=/var/lock/subsys/zm + +loadconf() +{ + if [ -f $ZM_CONFIG ]; then + . $ZM_CONFIG + else + echo "ERROR: $ZM_CONFIG not found." + return 1 + fi +} + +loadconf +command="$ZM_PATH_BIN/zmpkg.pl" + +start() +{ + zmupdate || return $? + loadconf || return $? + #Make sure the directory for our PID folder exists or create one. + [ ! -d $pidfile ] \ + && mkdir -m 774 $pidfile \ + && chown $ZM_WEB_USER:$ZM_WEB_GROUP $pidfile + #Make sure the folder for the socks file exists or create one + GetPath="select Value from Config where Name='ZM_PATH_SOCKS'" + dbHost=`echo $ZM_DB_HOST | cut -d: -f1` + dbPort=`echo $ZM_DB_HOST | cut -d: -s -f2` + if [ "$dbPort" = "" ] + then + ZM_PATH_SOCK=`echo $GetPath | mysql -B -h$ZM_DB_HOST -u$ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'` + else + ZM_PATH_SOCK=`echo $GetPath | mysql -B -h$dbHost -P$dbPort -u$ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'` + fi + [ ! -d $ZM_PATH_SOCK ] \ + && mkdir -m 774 $ZM_PATH_SOCK \ + && chown $ZM_WEB_USER:$ZM_WEB_GROUP $ZM_PATH_SOCK + echo -n $"Starting $prog: " + $command start + RETVAL=$? + [ $RETVAL = 0 ] && success || failure + echo + [ $RETVAL = 0 ] && touch $LOCKFILE + return $RETVAL +} + +stop() +{ + loadconf + echo -n $"Stopping $prog: " + $command stop + RETVAL=$? + [ $RETVAL = 0 ] && success || failure + echo + [ $RETVAL = 0 ] && rm -f $LOCKFILE +} + +zmstatus() +{ + loadconf + result=`$command status` + if [ "$result" = "running" ]; then + echo "ZoneMinder is running" + $ZM_PATH_BIN/zmu -l + RETVAL=0 + else + echo "ZoneMinder is stopped" + RETVAL=1 + fi +} + +zmupdate() +{ + if [ -x $ZM_PATH_BIN/zm_update ]; then + $ZM_PATH_BIN/zm_update -f + fi +} + + +case "$1" in + 'start') + start + ;; + 'stop') + stop + ;; + 'restart') + stop + start + ;; + 'condrestart') + loadconf + result=`$ZM_PATH_BIN/zmdc.pl check` + if [ "$result" = "running" ]; then + $ZM_PATH_BIN/zmdc.pl shutdown > /dev/null + rm -f $LOCKFILE + start + fi + ;; + 'status') + status httpd + status mysqld + zmstatus + ;; + *) + echo "Usage: $0 { start | stop | restart | condrestart | status }" + RETVAL=1 + ;; +esac +exit $RETVAL diff --git a/scripts/zmaudit.pl b/scripts/zmaudit.pl new file mode 100644 index 000000000..d153b5b39 --- /dev/null +++ b/scripts/zmaudit.pl @@ -0,0 +1,510 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder Audit Script, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script checks for consistency between the event filesystem and +# the database. If events are found in one and not the other they are +# deleted (optionally). Additionally any monitor event directories that +# do not correspond to a database monitor are similarly disposed of. +# However monitors in the database that don't have a directory are left +# alone as this is valid if they are newly created and have no events +# yet. +# +use strict; +use bytes; + +# ========================================================================== +# +# These are the elements you can edit to suit your installation +# +# ========================================================================== + +use constant MIN_AGE => 300; # Minimum age when we will delete anything +use constant MAX_AGED_DIRS => 10; # Number of event dirs to check age on +use constant RECOVER_TAG => "(r)"; # Tag to append to event name when recovered +use constant RECOVER_TEXT => "Recovered."; # Text to append to event notes when recovered + +# ========================================================================== +# +# You shouldn't need to change anything from here downwards +# +# ========================================================================== + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use DBI; +use POSIX; +use File::Find; +use Time::HiRes qw/gettimeofday/; +use Getopt::Long; + +use constant IMAGE_PATH => ZM_PATH_WEB.'/'.ZM_DIR_IMAGES; +use constant EVENT_PATH => (ZM_DIR_EVENTS=~m|/|)?ZM_DIR_EVENTS:(ZM_PATH_WEB.'/'.ZM_DIR_EVENTS); + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +my $report = 0; +my $interactive = 0; +my $continuous = 0; + +sub usage +{ + print( " +Usage: zmaudit.pl [-r,-report|-i,-interactive] +Parameters are :- +-r, --report - Just report don't actually do anything +-i, --interactive - Ask before applying any changes +-c, --continuous - Run continuously +"); + exit( -1 ); +} + +sub aud_print( $ ); +sub confirm( ;$$ ); +sub deleteSwapImage(); + +logInit(); +logSetSignal(); + +if ( !GetOptions( 'report'=>\$report, 'interactive'=>\$interactive, 'continuous'=>\$continuous ) ) +{ + usage(); +} + +if ( ($report + $interactive + $continuous) > 1 ) +{ + print( STDERR "Error, only option may be specified\n" ); + usage(); +} + +my $dbh = zmDbConnect(); + +chdir( EVENT_PATH ); + +my $max_image_age = 6/24; # 6 hours +my $max_swap_age = 24/24; # 24 hours +my $image_path = IMAGE_PATH; +my $swap_image_path = ZM_PATH_SWAP; + +my $loop = 1; +my $cleaned = 0; +MAIN: while( $loop ) +{ + my $db_monitors; + my $monitorSelectSql = "select Id from Monitors order by Id"; + my $monitorSelectSth = $dbh->prepare_cached( $monitorSelectSql ) or Fatal( "Can't prepare '$monitorSelectSql': ".$dbh->errstr() ); + my $eventSelectSql = "select Id, (unix_timestamp() - unix_timestamp(StartTime)) as Age from Events where MonitorId = ? order by Id"; + my $eventSelectSth = $dbh->prepare_cached( $eventSelectSql ) or Fatal( "Can't prepare '$eventSelectSql': ".$dbh->errstr() ); + + $cleaned = 0; + my $res = $monitorSelectSth->execute() or Fatal( "Can't execute: ".$monitorSelectSth->errstr() ); + while( my $monitor = $monitorSelectSth->fetchrow_hashref() ) + { + Debug( "Found database monitor '$monitor->{Id}'" ); + my $db_events = $db_monitors->{$monitor->{Id}} = {}; + my $res = $eventSelectSth->execute( $monitor->{Id} ) or Fatal( "Can't execute: ".$eventSelectSth->errstr() ); + while ( my $event = $eventSelectSth->fetchrow_hashref() ) + { + $db_events->{$event->{Id}} = $event->{Age}; + } + Debug( "Got ".int(keys(%$db_events))." events\n" ); + $eventSelectSth->finish(); + } + $monitorSelectSth->finish(); + + my $fs_monitors; + foreach my $monitor ( <[0-9]*> ) + { + Debug( "Found filesystem monitor '$monitor'" ); + my $fs_events = $fs_monitors->{$monitor} = {}; + ( my $monitor_dir ) = ( $monitor =~ /^(.*)$/ ); # De-taint + + if ( ZM_USE_DEEP_STORAGE ) + { + foreach my $day_dir ( <$monitor_dir/*/*/*> ) + { + Debug( "Checking $day_dir" ); + ( $day_dir ) = ( $day_dir =~ /^(.*)$/ ); # De-taint + chdir( $day_dir ); + opendir( DIR, "." ) or Fatal( "Can't open directory '$day_dir': $!" ); + my @event_links = sort { $b <=> $a } grep { -l $_ } readdir( DIR ); + closedir( DIR ); + my $count = 0; + foreach my $event_link ( @event_links ) + { + Debug( "Checking link $event_link" ); + ( my $event = $event_link ) =~ s/^.*\.//; + my $event_path = readlink( $event_link ); + if ( $count++ > MAX_AGED_DIRS ) + { + $fs_events->{$event} = -1; + } + else + { + if ( !-e $event_path ) + { + aud_print( "Event link $day_dir/$event_link does not point to valid target" ); + if ( confirm() ) + { + ( $event_link ) = ( $event_link =~ /^(.*)$/ ); # De-taint + unlink( $event_link ); + $cleaned = 1; + } + } + else + { + $fs_events->{$event} = (time() - ($^T - ((-M $event_path) * 24*60*60))); + } + } + } + chdir( EVENT_PATH ); + } + } + else + { + chdir( $monitor_dir ); + opendir( DIR, "." ) or Fatal( "Can't open directory '$monitor_dir': $!" ); + my @temp_events = sort { $b <=> $a } grep { -d $_ && $_ =~ /^\d+$/ } readdir( DIR ); + closedir( DIR ); + my $count = 0; + foreach my $event ( @temp_events ) + { + if ( $count++ > MAX_AGED_DIRS ) + { + $fs_events->{$event} = -1; + } + else + { + $fs_events->{$event} = (time() - ($^T - ((-M $event) * 24*60*60))); + } + } + chdir( EVENT_PATH ); + } + Debug( "Got ".int(keys(%$fs_events))." events\n" ); + } + redo MAIN if ( $cleaned ); + + $cleaned = 0; + while ( my ( $fs_monitor, $fs_events ) = each(%$fs_monitors) ) + { + if ( my $db_events = $db_monitors->{$fs_monitor} ) + { + if ( $fs_events ) + { + while ( my ( $fs_event, $age ) = each(%$fs_events ) ) + { + if ( !defined($db_events->{$fs_event}) && ($age < 0 || ($age > MIN_AGE)) ) + { + aud_print( "Filesystem event '$fs_monitor/$fs_event' does not exist in database" ); + if ( confirm() ) + { + deleteEventFiles( $fs_event, $fs_monitor ); + $cleaned = 1; + } + } + } + } + } + else + { + aud_print( "Filesystem monitor '$fs_monitor' does not exist in database" ); + if ( confirm() ) + { + my $command = "rm -rf $fs_monitor"; + executeShellCommand( $command ); + $cleaned = 1; + } + } + } + + my $monitor_links; + foreach my $link ( <*> ) + { + next if ( !-l $link ); + next if ( -e $link ); + + aud_print( "Filesystem monitor link '$link' does not point to valid monitor directory" ); + if ( confirm() ) + { + ( $link ) = ( $link =~ /^(.*)$/ ); # De-taint + my $command = "rm $link"; + executeShellCommand( $command ); + $cleaned = 1; + } + } + redo MAIN if ( $cleaned ); + + $cleaned = 0; + my $deleteMonitorSql = "delete low_priority from Monitors where Id = ?"; + my $deleteMonitorSth = $dbh->prepare_cached( $deleteMonitorSql ) or Fatal( "Can't prepare '$deleteMonitorSql': ".$dbh->errstr() ); + my $deleteEventSql = "delete low_priority from Events where Id = ?"; + my $deleteEventSth = $dbh->prepare_cached( $deleteEventSql ) or Fatal( "Can't prepare '$deleteEventSql': ".$dbh->errstr() ); + my $deleteFramesSql = "delete low_priority from Frames where EventId = ?"; + my $deleteFramesSth = $dbh->prepare_cached( $deleteFramesSql ) or Fatal( "Can't prepare '$deleteFramesSql': ".$dbh->errstr() ); + my $deleteStatsSql = "delete low_priority from Stats where EventId = ?"; + my $deleteStatsSth = $dbh->prepare_cached( $deleteStatsSql ) or Fatal( "Can't prepare '$deleteStatsSql': ".$dbh->errstr() ); + while ( my ( $db_monitor, $db_events ) = each(%$db_monitors) ) + { + if ( my $fs_events = $fs_monitors->{$db_monitor} ) + { + if ( $db_events ) + { + while ( my ( $db_event, $age ) = each(%$db_events ) ) + { + if ( !defined($fs_events->{$db_event}) && ($age > MIN_AGE) ) + { + aud_print( "Database event '$db_monitor/$db_event' does not exist in filesystem" ); + if ( confirm() ) + { + my $res = $deleteEventSth->execute( $db_event ) or Fatal( "Can't execute: ".$deleteEventSth->errstr() ); + $res = $deleteFramesSth->execute( $db_event ) or Fatal( "Can't execute: ".$deleteFramesSth->errstr() ); + $res = $deleteStatsSth->execute( $db_event ) or Fatal( "Can't execute: ".$deleteStatsSth->errstr() ); + $cleaned = 1; + } + } + } + } + } + else + { + #aud_print( "Database monitor '$db_monitor' does not exist in filesystem" ); + #if ( confirm() ) + #{ + # We don't actually do this in case it's new + #my $res = $deleteMonitorSth->execute( $db_monitor ) or Fatal( "Can't execute: ".$deleteMonitorSth->errstr() ); + #$cleaned = 1; + #} + } + } + redo MAIN if ( $cleaned ); + + # Remove orphaned events (with no monitor) + $cleaned = 0; + my $selectOrphanedEventsSql = "select Events.Id, Events.Name from Events left join Monitors on (Events.MonitorId = Monitors.Id) where isnull(Monitors.Id)"; + my $selectOrphanedEventsSth = $dbh->prepare_cached( $selectOrphanedEventsSql ) or Fatal( "Can't prepare '$selectOrphanedEventsSql': ".$dbh->errstr() ); + $res = $selectOrphanedEventsSth->execute() or Fatal( "Can't execute: ".$selectOrphanedEventsSth->errstr() ); + while( my $event = $selectOrphanedEventsSth->fetchrow_hashref() ) + { + aud_print( "Found orphaned event with no monitor '$event->{Id}'" ); + if ( confirm() ) + { + $res = $deleteEventSth->execute( $event->{Id} ) or Fatal( "Can't execute: ".$deleteEventSth->errstr() ); + $cleaned = 1; + } + } + $selectOrphanedEventsSth->finish(); + redo MAIN if ( $cleaned ); + + # Remove empty events (with no frames) + $cleaned = 0; + my $selectEmptyEventsSql = "select * from Events as E left join Frames as F on (E.Id = F.EventId) where isnull(F.EventId) and now() - interval ".MIN_AGE." second > E.StartTime"; + my $selectEmptyEventsSth = $dbh->prepare_cached( $selectEmptyEventsSql ) or Fatal( "Can't prepare '$selectEmptyEventsSql': ".$dbh->errstr() ); + $res = $selectEmptyEventsSth->execute() or Fatal( "Can't execute: ".$selectEmptyEventsSth->errstr() ); + while( my $event = $selectEmptyEventsSth->fetchrow_hashref() ) + { + aud_print( "Found empty event with no frame records '$event->{Id}'" ); + if ( confirm() ) + { + $res = $deleteEventSth->execute( $event->{Id} ) or Fatal( "Can't execute: ".$deleteEventSth->errstr() ); + $cleaned = 1; + } + } + $selectEmptyEventsSth->finish(); + redo MAIN if ( $cleaned ); + + # Remove orphaned frame records + $cleaned = 0; + my $selectOrphanedFramesSql = "select distinct EventId from Frames where EventId not in (select Id from Events)"; + my $selectOrphanedFramesSth = $dbh->prepare_cached( $selectOrphanedFramesSql ) or Fatal( "Can't prepare '$selectOrphanedFramesSql': ".$dbh->errstr() ); + $res = $selectOrphanedFramesSth->execute() or Fatal( "Can't execute: ".$selectOrphanedFramesSth->errstr() ); + while( my $frame = $selectOrphanedFramesSth->fetchrow_hashref() ) + { + aud_print( "Found orphaned frame records for event '$frame->{EventId}'" ); + if ( confirm() ) + { + $res = $deleteFramesSth->execute( $frame->{EventId} ) or Fatal( "Can't execute: ".$deleteFramesSth->errstr() ); + $cleaned = 1; + } + } + $selectOrphanedFramesSth->finish(); + redo MAIN if ( $cleaned ); + + # Remove orphaned stats records + $cleaned = 0; + my $selectOrphanedStatsSql = "select distinct EventId from Stats where EventId not in (select Id from Events)"; + my $selectOrphanedStatsSth = $dbh->prepare_cached( $selectOrphanedStatsSql ) or Fatal( "Can't prepare '$selectOrphanedStatsSql': ".$dbh->errstr() ); + $res = $selectOrphanedStatsSth->execute() or Fatal( "Can't execute: ".$selectOrphanedStatsSth->errstr() ); + while( my $stat = $selectOrphanedStatsSth->fetchrow_hashref() ) + { + aud_print( "Found orphaned statistic records for event '$stat->{EventId}'" ); + if ( confirm() ) + { + $res = $deleteStatsSth->execute( $stat->{EventId} ) or Fatal( "Can't execute: ".$deleteStatsSth->errstr() ); + $cleaned = 1; + } + } + $selectOrphanedStatsSth->finish(); + redo MAIN if ( $cleaned ); + + # New audit to close any events that were left open for longer than MIN_AGE seconds + my $selectUnclosedEventsSql = "select E.Id, max(F.TimeStamp) as EndTime, unix_timestamp(max(F.TimeStamp)) - unix_timestamp(E.StartTime) as Length, max(F.FrameId) as Frames, count(if(F.Score>0,1,NULL)) as AlarmFrames, sum(F.Score) as TotScore, max(F.Score) as MaxScore, M.EventPrefix as Prefix from Events as E left join Monitors as M on E.MonitorId = M.Id inner join Frames as F on E.Id = F.EventId where isnull(E.Frames) or isnull(E.EndTime) group by E.Id having EndTime < (now() - interval ".MIN_AGE." second)"; + my $selectUnclosedEventsSth = $dbh->prepare_cached( $selectUnclosedEventsSql ) or Fatal( "Can't prepare '$selectUnclosedEventsSql': ".$dbh->errstr() ); + my $updateUnclosedEventsSql = "update low_priority Events set Name = ?, EndTime = ?, Length = ?, Frames = ?, AlarmFrames = ?, TotScore = ?, AvgScore = ?, MaxScore = ?, Notes = concat_ws( ' ', Notes, ? ) where Id = ?"; + my $updateUnclosedEventsSth = $dbh->prepare_cached( $updateUnclosedEventsSql ) or Fatal( "Can't prepare '$updateUnclosedEventsSql': ".$dbh->errstr() ); + $res = $selectUnclosedEventsSth->execute() or Fatal( "Can't execute: ".$selectUnclosedEventsSth->errstr() ); + while( my $event = $selectUnclosedEventsSth->fetchrow_hashref() ) + { + aud_print( "Found open event '$event->{Id}'" ); + if ( confirm( 'close', 'closing' ) ) + { + $res = $updateUnclosedEventsSth->execute( sprintf( "%s%d%s", $event->{Prefix}, $event->{Id}, RECOVER_TAG ), $event->{EndTime}, $event->{Length}, $event->{Frames}, $event->{AlarmFrames}, $event->{TotScore}, $event->{AlarmFrames}?int($event->{TotScore}/$event->{AlarmFrames}):0, $event->{MaxScore}, RECOVER_TEXT, $event->{Id} ) or Fatal( "Can't execute: ".$updateUnclosedEventsSth->errstr() ); + } + } + $selectUnclosedEventsSth->finish(); + + # Now delete any old image files + if ( my @old_files = grep { -M > $max_image_age } <$image_path/*.{jpg,gif,wbmp}> ) + { + aud_print( "Deleting ".int(@old_files)." old images\n" ); + my $untainted_old_files = join( ";", @old_files ); + ( $untainted_old_files ) = ( $untainted_old_files =~ /^(.*)$/ ); + unlink( split( /;/, $untainted_old_files ) ); + } + + # Now delete any old swap files + ( my $swap_image_root ) = ( $swap_image_path =~ /^(.*)$/ ); # De-taint + File::Find::find( { wanted=>\&deleteSwapImage, untaint=>1 }, $swap_image_root ); + + # Prune the Logs table if required + if ( ZM_LOG_DATABASE_LIMIT ) + { + if ( ZM_LOG_DATABASE_LIMIT =~ /^\d+$/ ) + { + # Number of rows + my $selectLogRowCountSql = "select count(*) as Rows from Logs"; + my $selectLogRowCountSth = $dbh->prepare_cached( $selectLogRowCountSql ) or Fatal( "Can't prepare '$selectLogRowCountSql': ".$dbh->errstr() ); + $res = $selectLogRowCountSth->execute() or Fatal( "Can't execute: ".$selectLogRowCountSth->errstr() ); + my $row = $selectLogRowCountSth->fetchrow_hashref(); + my $logRows = $row->{Rows}; + $selectLogRowCountSth->finish(); + if ( $logRows > ZM_LOG_DATABASE_LIMIT ) + { + my $deleteLogByRowsSql = "delete low_priority from Logs order by TimeKey asc limit ?"; + my $deleteLogByRowsSth = $dbh->prepare_cached( $deleteLogByRowsSql ) or Fatal( "Can't prepare '$deleteLogByRowsSql': ".$dbh->errstr() ); + $res = $deleteLogByRowsSth->execute( $logRows - ZM_LOG_DATABASE_LIMIT ) or Fatal( "Can't execute: ".$deleteLogByRowsSth->errstr() ); + aud_print( "Deleted ".$deleteLogByRowsSth->rows()." log table entries by count\n" ) if ( $deleteLogByRowsSth->rows() ); + } + } + else + { + # Time of record + my $deleteLogByTimeSql = "delete low_priority from Logs where TimeKey < unix_timestamp(now() - interval ".ZM_LOG_DATABASE_LIMIT.")"; + my $deleteLogByTimeSth = $dbh->prepare_cached( $deleteLogByTimeSql ) or Fatal( "Can't prepare '$deleteLogByTimeSql': ".$dbh->errstr() ); + $res = $deleteLogByTimeSth->execute() or Fatal( "Can't execute: ".$deleteLogByTimeSth->errstr() ); + aud_print( "Deleted ".$deleteLogByTimeSth->rows()." log table entries by time\n" ) if ( $deleteLogByTimeSth->rows() ); + } + } + $loop = $continuous; + + sleep( ZM_AUDIT_CHECK_INTERVAL ) if ( $continuous ); +}; + +exit( 0 ); + +sub aud_print( $ ) +{ + my $string = shift; + if ( !$continuous ) + { + print( $string ); + } + else + { + Info( $string ); + } +} + +sub confirm( ;$$ ) +{ + my $prompt = shift || "delete"; + my $action = shift || "deleting"; + + my $yesno = 0; + if ( $report ) + { + print( "\n" ); + } + elsif ( $interactive ) + { + print( ", $prompt y/n: " ); + my $char = <>; + chomp( $char ); + if ( $char eq 'q' ) + { + exit( 0 ); + } + if ( !$char ) + { + $char = 'y'; + } + $yesno = ( $char =~ /[yY]/ ); + } + else + { + if ( !$continuous ) + { + print( ", $action\n" ); + } + else + { + Info( $action ); + } + $yesno = 1; + } + return( $yesno ); +} + +sub deleteSwapImage() +{ + my $file = $_; + + if ( $file !~ /^zmswap-/ ) + { + return; + } + + # Ignore directories + if ( -d $file ) + { + return; + } + + if ( -M $file > $max_swap_age ) + { + Debug( "Deleting $file" ); + #unlink( $file ); + } +} diff --git a/scripts/zmcontrol.pl b/scripts/zmcontrol.pl new file mode 100644 index 000000000..d71da2084 --- /dev/null +++ b/scripts/zmcontrol.pl @@ -0,0 +1,237 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder Control Script, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script continuously monitors the recorded events for the given +# monitor and applies any filters which would delete and/or upload +# matching events +# +use strict; + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use Getopt::Long; +use POSIX qw/strftime EPIPE/; +use Socket; +use Data::Dumper; +use Module::Load; + +use constant MAX_CONNECT_DELAY => 10; +use constant MAX_COMMAND_WAIT => 1800; + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +sub Usage +{ + print( " +Usage: zmcontrol.pl --id --command= +"); + exit( -1 ); +} + +logInit(); + +my $arg_string = join( " ", @ARGV ); + +my $id; +my %options; + +if ( !GetOptions( + 'id=i'=>\$id, + 'command=s'=>\$options{command}, + 'xcoord=i'=>\$options{xcoord}, + 'ycoord=i'=>\$options{ycoord}, + 'speed=i'=>\$options{speed}, + 'step=i'=>\$options{step}, + 'panspeed=i'=>\$options{panspeed}, + 'tiltspeed=i'=>\$options{tiltspeed}, + 'panstep=i'=>\$options{panstep}, + 'tiltstep=i'=>\$options{tiltstep}, + 'preset=i'=>\$options{preset}, + 'autostop'=>\$options{autostop}, + ) +) +{ + Usage(); +} + +if ( !$id || !$options{command} ) +{ + print( STDERR "Please give a valid monitor id and command\n" ); + Usage(); +} + +( $id ) = $id =~ /^(\w+)$/; + +Debug( $arg_string ); + +my $sock_file = ZM_PATH_SOCKS.'/zmcontrol-'.$id.'.sock'; + +socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); + +my $saddr = sockaddr_un( $sock_file ); +my $server_up = connect( CLIENT, $saddr ); +if ( !$server_up ) +{ + # The server isn't there + my $monitor = zmDbGetMonitorAndControl( $id ); + if ( !$monitor ) + { + Fatal( "Unable to load control data for monitor $id" ); + } + my $protocol = $monitor->{Protocol}; + + if ( -x $protocol ) + { + # Protocol is actually a script! + # Holdover from previous versions + my $command .= $protocol.' '.$arg_string; + Debug( $command."\n" ); + + my $output = qx($command); + my $status = $? >> 8; + if ( $status || logDebugging() ) + { + chomp( $output ); + Debug( "Output: $output\n" ); + } + if ( $status ) + { + Error( "Command '$command' exited with status: $status\n" ); + exit( $status ); + } + exit( 0 ); + } + + Info( "Starting control server $id/$protocol" ); + close( CLIENT ); + + if ( my $cpid = fork() ) + { + logReinit(); + + # Parent process just sleep and fall through + socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or die( "Can't open socket: $!" ); + my $attempts = 0; + while (!connect( CLIENT, $saddr )) + { + $attempts++; + Fatal( "Can't connect: $!" ) if ($attempts > MAX_CONNECT_DELAY); + sleep(1); + } + } + elsif ( defined($cpid) ) + { + close( STDOUT ); + close( STDERR ); + + setpgrp(); + + logReinit(); + + Info( "Control server $id/$protocol starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() ) ); + + $0 = $0." --id $id"; + + load "ZoneMinder::Control::$protocol"; + + my $control = "ZoneMinder::Control::$protocol"->new( $id ); + my $control_key = $control->getKey(); + $control->loadMonitor(); + + $control->open(); + + socket( SERVER, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); + unlink( $sock_file ); + bind( SERVER, $saddr ) or Fatal( "Can't bind: $!" ); + listen( SERVER, SOMAXCONN ) or Fatal( "Can't listen: $!" ); + + my $rin = ''; + vec( $rin, fileno(SERVER), 1 ) = 1; + my $win = $rin; + my $ein = $win; + my $timeout = MAX_COMMAND_WAIT; + while( 1 ) + { + my $nfound = select( my $rout = $rin, undef, undef, $timeout ); + if ( $nfound > 0 ) + { + if ( vec( $rout, fileno(SERVER), 1 ) ) + { + my $paddr = accept( CLIENT, SERVER ); + my $message = ; + + next if ( !$message ); + + my $params = jsonDecode( $message ); + #Debug( Dumper( $params ) ); + + my $command = $params->{command}; + $control->$command( $params ); + close( CLIENT ); + } + else + { + Fatal( "Bogus descriptor" ); + } + } + elsif ( $nfound < 0 ) + { + if ( $! == EPIPE ) + { + Error( "Can't select: $!" ); + } + else + { + Fatal( "Can't select: $!" ); + } + } + else + { + #print( "Select timed out\n" ); + last; + } + } + Info( "Control server $id/$protocol exiting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() ) ); + unlink( $sock_file ); + $control->close(); + exit( 0 ); + } + else + { + Fatal( "Can't fork: $!" ); + } +} + +# The server is there, connect to it +#print( "Writing commands\n" ); +CLIENT->autoflush(); + +my $message = jsonEncode( \%options ); +print( CLIENT $message ); +shutdown( CLIENT, 1 ); + +exit( 0 ); diff --git a/scripts/zmdbbackup b/scripts/zmdbbackup new file mode 100644 index 000000000..f98439f20 --- /dev/null +++ b/scripts/zmdbbackup @@ -0,0 +1,37 @@ +#!/bin/bash +#=============================================================================== +# +# FILE: zmdbbackup +# +# USAGE: ./zmdbbackup +# +# DESCRIPTION: Uses mysqldump to backup the config info in the zm DB +# OPTIONS: --- None +# REQUIREMENTS: --- mysqldump +# BUGS: --- +# NOTES: --- +# AUTHOR: Ross Melin +# COMPANY: +# VERSION: 2.0 +# CREATED: 05/26/2006 06:21:00 AM PDT +# REVISION: --- +#=============================================================================== + +# Edit these to suit your configuration +ZM_CONFIG=/etc/zm/zm.conf +source $ZM_CONFIG + +MYSQLDUMP=/usr/bin/mysqldump +BACKUP_PATH=/var/lib/zm +BACKUP_FILE=zm_backup.sql +DUMPOPTS="--user=$ZM_DB_USER --password=$ZM_DB_PASS --opt" +TABLES="Config Filters Groups Monitors States TriggersX10 Users Zones" +OUTFILE="$BACKUP_PATH/$BACKUP_FILE" + +echo "-- +-- Created by zm_db_backup for ZoneMinder Version $ZM_VERSION +--" > $OUTFILE + +$MYSQLDUMP $DUMPOPTS zm $TABLES >> $OUTFILE + +exit 0 diff --git a/scripts/zmdbrestore b/scripts/zmdbrestore new file mode 100644 index 000000000..68f17e887 --- /dev/null +++ b/scripts/zmdbrestore @@ -0,0 +1,172 @@ +#!/bin/bash +#=============================================================================== +# +# FILE: zmdbrestore +# +# USAGE: ./zmdbrestore +# +# DESCRIPTION: Restore a ZoneMinder DB from a backup created by zm_db_backup +# +# OPTIONS: --- +# REQUIREMENTS: --- +# BUGS: --- +# NOTES: --- +# AUTHOR: (), +# COMPANY: +# VERSION: 1.0 +# CREATED: 05/29/2006 04:45:06 PM PDT +# REVISION: --- +#=============================================================================== + +ZM_CONFIG=/etc/zm/zm.conf +ZM_BACKUP=/var/lib/zm/zm_backup.sql +EVENTS_DIR=events + +loadcfg() { + if [ -f $ZM_CONFIG ]; then + . $ZM_CONFIG + else + echo "ERROR: $ZM_CONFIG not found." + exit 1 + fi +} + +chkcfg(){ +for n in ZM_DB_HOST ZM_DB_NAME ZM_DB_USER ZM_DB_PASS; do + eval "val=\$$n" + if [ "$val" = "" ]; then + echo "ERROR($ZM_CONFIG): $n should not be empty." + echo "Enter a $n for ZM to use the Database." + if [ "$n" = "ZM_DB_PASS" ]; then + echo -n "Will not echo on screen $n : " + stty -echo # Turns off screen echo. + read newval + stty echo # Restores screen echo. + echo "" + ### The following can be used to generate a random password + # randstr newval 16 + else + echo -n "$n : " + read newval + fi + cp $ZM_CONFIG /tmp/$$ && + sed 's/^'$n='.*$/'$n=$newval'/g' /tmp/$$ >$ZM_CONFIG + + fi +done + + if [ "$ZM_DB_HOST" = "localhost" ] + then + ClientHost=localhost + else + ClientHost=`hostname` + fi +} + +reloadcfg(){ + loadcfg +} + +chk_backup_ver(){ + if + [ -e $ZM_BACKUP ] + then + BACKUP_VER=$(cat $ZM_BACKUP | head -n 2 |tail -n 1 |cut -f 8 -d " ") + else + echo "$ZM_BACKUP doesn't exist" + exit 1 + fi + + + if + [ $BACKUP_VER != $ZM_VERSION ] + then + echo "$ZM_BACKUP is from version $BACKUP_VER" + echo "ZoneMinder version is $ZM_VERSION" + exit 1 + fi +} + +getmylogin(){ + echo "Enter MySQL Administrator username" + echo "(Default: root and password is blank)" + echo -n "MySQL Admin: " + read MYADMIN + echo -n "Password: " + read MYPASS + if [ "X$MYPASS" != "X" ]; then MYPASS="-p$MYPASS"; fi + echo "\q" |mysql -u $MYADMIN $MYPASS || exit 0 + +} + +checkfordb(){ + + if + echo "show databases" |mysql -u $MYADMIN "$MYPASS" |grep zm + then + echo "A $ZM_DB_NAME database exists." + while [ true ] + do + echo "Choose one of the following options:" + echo "[D]rop the old database and reinitialize" + echo "[E]xit and do nothing" + read OPTION + case $OPTION in + "D"|"d") + echo "drop database zm;"|mysql -u $MYADMIN $MYPASS + return + ;; + "E"|"e") + exit 0 + ;; + esac + done + + fi +} + +initdb(){ + sql=/tmp/zm.crdb.sql + echo "" >$sql + chmod 600 $sql + + echo "CREATE DATABASE $ZM_DB_NAME;" >>$sql + echo "USE $ZM_DB_NAME;" >>$sql + + echo "GRANT all on $ZM_DB_NAME.* TO '$ZM_DB_USER'@'$ClientHost' IDENTIFIED BY '$ZM_DB_PASS';" >>$sql + + cat $sql | mysql -B -h $ZM_DB_HOST -u $MYADMIN $MYPASS + rm -f $sql + + cat $ZM_PATH_UPDATE/zm_create.sql | mysql -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME + +} + +restoredb(){ + if + [ -e $ZM_BACKUP ] + then + cat $ZM_BACKUP | mysql -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME + else + echo "$ZM_BACKUP doesn't exist" + exit 1 + fi +} + +restore_events(){ + for SQL in $(find $ZM_PATH_WEB/$EVENTS_DIR -name .sql) + do + cat $SQL | mysql -h $ZM_DB_HOST -u $ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME + done +} + +loadcfg +chkcfg +reloadcfg +chk_backup_ver +getmylogin +checkfordb +initdb +restoredb +restore_events +exit 0 diff --git a/scripts/zmdc.pl b/scripts/zmdc.pl new file mode 100644 index 000000000..a63d0958b --- /dev/null +++ b/scripts/zmdc.pl @@ -0,0 +1,798 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder Daemon Control Script, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script is the gateway for controlling the various ZoneMinder +# daemons. All starting, stopping and restarting goes through here. +# On the first invocation it starts up a server which subsequently +# records what's running and what's not. Other invocations just +# connect to the server and pass instructions to it. +# +use strict; +use bytes; + +# ========================================================================== +# +# User config +# +# ========================================================================== + +use constant MAX_CONNECT_DELAY => 10; + +# ========================================================================== +# +# Don't change anything from here on down +# +# ========================================================================== + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use POSIX; +use Socket; +use IO::Handle; +use Data::Dumper; + +use constant SOCK_FILE => ZM_PATH_SOCKS.'/zmdc.sock'; + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +my @daemons = ( + 'zmc', + 'zma', + 'zmf', + 'zmfilter.pl', + 'zmaudit.pl', + 'zmtrigger.pl', + 'zmx10.pl', + 'zmwatch.pl', + 'zmupdate.pl', + 'zmtrack.pl' +); + +sub Usage +{ + print( " +Usage: zmdc.pl [daemon [options]] +Parameters are :- + - One of 'startup|shutdown|status|check|logrot' or + 'start|stop|restart|reload'. +[daemon [options]] - Daemon name and options, required for second group of commands +"); + exit( -1 ); +} + +my $command = shift @ARGV; +if( !$command ) +{ + print( STDERR "No command given\n" ); + Usage(); +} +my $needs_daemon = $command !~ /(?:startup|shutdown|status|check|logrot)/; +my $daemon = shift( @ARGV ); +if( $needs_daemon && !$daemon ) +{ + print( STDERR "No daemon given\n" ); + Usage(); +} +my @args; + +my $daemon_patt = '('.join( '|', @daemons ).')'; +if ( $needs_daemon ) +{ + if ( $daemon =~ /^${daemon_patt}$/ ) + { + $daemon = $1; + } + else + { + print( STDERR "Invalid daemon '$daemon' specified" ); + Usage(); + } +} + +foreach my $arg ( @ARGV ) +{ + # Detaint arguments, if they look ok + #if ( $arg =~ /^(-{0,2}[\w]+)/ ) + if ( $arg =~ /^(-{0,2}[\w\/?&=.-]+)$/ ) + { + push( @args, $1 ); + } + else + { + print( STDERR "Bogus argument '$arg' found" ); + exit( -1 ); + } +} + +socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); + +my $saddr = sockaddr_un( SOCK_FILE ); +my $server_up = connect( CLIENT, $saddr ); +if ( !$server_up ) +{ + if ( $command eq "logrot" ) + { + exit(); + } + if ( $command eq "check" ) + { + print( "stopped\n" ); + exit(); + } + elsif ( $command ne "startup" ) + { + print( "Unable to connect to server\n" ); + exit( -1 ); + } + # The server isn't there + print( "Starting server\n" ); + close( CLIENT ); + + if ( my $cpid = fork() ) + { + logInit(); + + # Parent process just sleep and fall through + socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); + my $attempts = 0; + while (!connect( CLIENT, $saddr )) + { + $attempts++; + Fatal( "Can't connect: $!" ) if ($attempts > MAX_CONNECT_DELAY); + sleep(1); + } + } + elsif ( defined($cpid) ) + { + ZMServer::run(); + } + else + { + Fatal( "Can't fork: $!" ); + } +} +if ( $command eq "check" && !$daemon ) +{ + print( "running\n" ); + exit(); +} +elsif ( $command eq "startup" ) +{ + # Our work here is done + exit() if ( !$server_up ); +} +# The server is there, connect to it +#print( "Writing commands\n" ); +CLIENT->autoflush(); +my $message = "$command"; +$message .= ";$daemon" if ( $daemon ); +$message .= ";".join( ';', @args ) if ( @args ); +print( CLIENT $message ); +shutdown( CLIENT, 1 ); +while ( my $line = ) +{ + chomp( $line ); + print( "$line\n" ); +} +# And we're done! +close( CLIENT ); +#print( "Finished writing, bye\n" ); + +exit; + +package ZMServer; + +use strict; +use bytes; + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use POSIX; +use Socket; +use IO::Handle; +use Data::Dumper; + +our %cmd_hash; +our %pid_hash; + +sub run +{ + my $fd = 0; + while( $fd < POSIX::sysconf( &POSIX::_SC_OPEN_MAX ) ) + { + POSIX::close( $fd++ ); + } + + setpgrp(); + + logInit(); + + dPrint( ZoneMinder::Logger::INFO, "Server starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + + if ( open( PID, ">".ZM_PID ) ) + { + print( PID $$ ); + close( PID ); + } + + killAll( 1 ); + + socket( SERVER, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); + unlink( main::SOCK_FILE ); + bind( SERVER, $saddr ) or Fatal( "Can't bind: $!" ); + listen( SERVER, SOMAXCONN ) or Fatal( "Can't listen: $!" ); + + $SIG{CHLD} = \&reaper; + $SIG{INT} = \&shutdownAll; + $SIG{TERM} = \&shutdownAll; + $SIG{ABRT} = \&shutdownAll; + $SIG{HUP} = \&logrot; + + my $rin = ''; + vec( $rin, fileno(SERVER), 1 ) = 1; + my $win = $rin; + my $ein = $win; + my $timeout = 0.1; + while( 1 ) + { + my $nfound = select( my $rout = $rin, undef, undef, $timeout ); + if ( $nfound > 0 ) + { + if ( vec( $rout, fileno(SERVER), 1 ) ) + { + my $paddr = accept( CLIENT, SERVER ); + my $message = ; + + next if ( !$message ); + + my ( $command, $daemon, @args ) = split( /;/, $message ); + + if ( $command eq 'start' ) + { + start( $daemon, @args ); + } + elsif ( $command eq 'stop' ) + { + stop( $daemon, @args ); + } + elsif ( $command eq 'restart' ) + { + restart( $daemon, @args ); + } + elsif ( $command eq 'reload' ) + { + reload( $daemon, @args ); + } + elsif ( $command eq 'startup' ) + { + # Do nothing, this is all we're here for + dPrint( ZoneMinder::Logger::WARNING, "Already running, ignoring command '$command'\n" ); + } + elsif ( $command eq 'shutdown' ) + { + shutdownAll(); + } + elsif ( $command eq 'check' ) + { + check( $daemon, @args ); + } + elsif ( $command eq 'status' ) + { + if ( $daemon ) + { + status( $daemon, @args ); + } + else + { + status(); + } + } + elsif ( $command eq 'logrot' ) + { + logrot(); + } + else + { + dPrint( ZoneMinder::Logger::ERROR, "Invalid command '$command'\n" ); + } + close( CLIENT ); + } + else + { + Fatal( "Bogus descriptor" ); + } + } + elsif ( $nfound < 0 ) + { + if ( $! == EINTR ) + { + # Dead child, will be reaped + #print( "Probable dead child\n" ); + # See if it needs to start up again + restartPending(); + } + elsif ( $! == EPIPE ) + { + Error( "Can't select: $!" ); + } + else + { + Fatal( "Can't select: $!" ); + } + } + else + { + #print( "Select timed out\n" ); + restartPending(); + } + } + dPrint( ZoneMinder::Logger::INFO, "Server exiting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + unlink( main::SOCK_FILE ); + unlink( ZM_PID ); + exit(); +} + +sub cPrint +{ + if ( fileno(CLIENT) ) + { + print CLIENT @_ + } +} + +sub dPrint +{ + my $logLevel = shift; + if ( fileno(CLIENT) ) + { + print CLIENT @_ + } + if ( $logLevel == ZoneMinder::Logger::DEBUG ) + { + Debug( @_ ); + } + elsif ( $logLevel == ZoneMinder::Logger::INFO ) + { + Info( @_ ); + } + elsif ( $logLevel == ZoneMinder::Logger::WARNING ) + { + Warning( @_ ); + } + elsif ( $logLevel == ZoneMinder::Logger::ERROR ) + { + Error( @_ ); + } + elsif ( $logLevel == ZoneMinder::Logger::FATAL ) + { + Fatal( @_ ); + } +} + +sub start +{ + my $daemon = shift; + my @args = @_; + + my $command = $daemon; + $command .= ' '.join( ' ', ( @args ) ) if ( @args ); + my $process = $cmd_hash{$command}; + + if ( !$process ) + { + # It's not running, or at least it's not been started by us + $process = { daemon=>$daemon, args=>\@args, command=>$command, keepalive=>!undef }; + } + elsif ( $process->{pid} && $pid_hash{$process->{pid}} ) + { + dPrint( ZoneMinder::Logger::INFO, "'$process->{command}' already running at ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ).", pid = $process->{pid}\n" ); + return(); + } + + my $sigset = POSIX::SigSet->new; + my $blockset = POSIX::SigSet->new( SIGCHLD ); + sigprocmask( SIG_BLOCK, $blockset, $sigset ) or Fatal( "Can't block SIGCHLD: $!" ); + if ( my $cpid = fork() ) + { + logReinit(); + + $process->{pid} = $cpid; + $process->{started} = time(); + delete( $process->{pending} ); + + dPrint( ZoneMinder::Logger::INFO, "'$command' starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ).", pid = $process->{pid}\n" ); + + $cmd_hash{$process->{command}} = $pid_hash{$cpid} = $process; + sigprocmask( SIG_SETMASK, $sigset ) or Fatal( "Can't restore SIGCHLD: $!" ); + } + elsif ( defined($cpid ) ) + { + logReinit(); + + dPrint( ZoneMinder::Logger::INFO, "'".join( ' ', ( $daemon, @args ) )."' started at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + + if ( $daemon =~ /^${daemon_patt}$/ ) + { + $daemon = ZM_PATH_BIN.'/'.$1; + } + else + { + Fatal( "Invalid daemon '$daemon' specified" ); + } + + my @good_args; + foreach my $arg ( @args ) + { + # Detaint arguments, if they look ok + if ( $arg =~ /^(-{0,2}[\w\/?&=.-]+)$/ ) + { + push( @good_args, $1 ); + } + else + { + Fatal( "Bogus argument '$arg' found" ); + } + } + + logTerm(); + + my $fd = 0; + while( $fd < POSIX::sysconf( &POSIX::_SC_OPEN_MAX ) ) + { + POSIX::close( $fd++ ); + } + + # Child process + $SIG{CHLD} = 'DEFAULT'; + $SIG{INT} = 'DEFAULT'; + $SIG{TERM} = 'DEFAULT'; + $SIG{ABRT} = 'DEFAULT'; + + exec( $daemon, @good_args ) or Fatal( "Can't exec: $!" ); + } + else + { + Fatal( "Can't fork: $!" ); + } +} + +sub _stop +{ + my $final = shift; + my $daemon = shift; + my @args = @_; + + my $command = $daemon; + $command .= ' '.join( ' ', ( @args ) ) if ( @args ); + my $process = $cmd_hash{$command}; + if ( !$process ) + { + dPrint( ZoneMinder::Logger::WARNING, "Can't find process with command of '$command'\n" ); + return(); + } + elsif ( $process->{pending} ) + { + delete( $cmd_hash{$command} ); + dPrint( ZoneMinder::Logger::INFO, "Command '$command' removed from pending list at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + return(); + } + + my $cpid = $process->{pid}; + if ( !$pid_hash{$cpid} ) + { + dPrint( ZoneMinder::Logger::ERROR, "No process with command of '$command' is running\n" ); + return(); + } + + dPrint( ZoneMinder::Logger::INFO, "'$daemon ".join( ' ', @args )."' stopping at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + $process->{keepalive} = !$final; + kill( 'TERM', $cpid ); + delete( $cmd_hash{$command} ); + + # Now check it has actually gone away, if not kill -9 it + my $count = 0; + while( $cpid && kill( 0, $cpid ) ) + { + if ( $count++ > 5 ) + { + kill( 'KILL', $cpid ); + } + sleep( 1 ); + } +} + +sub stop +{ + _stop( 1, @_ ); +} + +sub restart +{ + my $daemon = shift; + my @args = @_; + + my $command = $daemon; + $command .= ' '.join( ' ', ( @args ) ) if ( @args ); + my $process = $cmd_hash{$command}; + if ( $process ) + { + if ( $process->{pid} ) + { + my $cpid = $process->{pid}; + if ( defined($pid_hash{$cpid}) ) + { + _stop( 0, $daemon, @args ); + return; + } + } + } + start( $daemon, @args ); +} + +sub reload +{ + my $daemon = shift; + my @args = @_; + + my $command = $daemon; + $command .= ' '.join( ' ', ( @args ) ) if ( @args ); + my $process = $cmd_hash{$command}; + if ( $process ) + { + if ( $process->{pid} ) + { + kill( 'HUP', $process->{pid} ); + } + } +} + +sub logrot +{ + logReinit(); + foreach my $process ( values( %pid_hash ) ) + { + if ( $process->{pid} && $process->{command} =~ /^zm.*\.pl/ ) + { + kill( 'HUP', $process->{pid} ); + } + } +} + +sub reaper +{ + my $saved_status = $!; + while ( (my $cpid = waitpid( -1, WNOHANG )) > 0 ) + { + my $status = $?; + + my $process = $pid_hash{$cpid}; + delete( $pid_hash{$cpid} ); + + if ( !$process ) + { + dPrint( ZoneMinder::Logger::INFO, "Can't find child with pid of '$cpid'\n" ); + next; + } + + $process->{stopped} = time(); + $process->{runtime} = ($process->{stopped}-$process->{started}); + delete( $process->{pid} ); + + my $exit_status = $status>>8; + my $exit_signal = $status&0xfe; + my $core_dumped = $status&0x01; + + my $out_str = "'$process->{daemon} ".join( ' ', @{$process->{args}} )."' "; + if ( $exit_signal ) + { + if ( $exit_signal == 15 || $exit_signal == 14 ) # TERM or ALRM + { + $out_str .= "exited"; + } + else + { + $out_str .= "crashed"; + } + $out_str .= ", signal $exit_signal"; + } + else + { + $out_str .= "exited "; + if ( $exit_status ) + { + $out_str .= "abnormally, exit status $exit_status"; + } + else + { + $out_str .= "normally"; + } + } + #print( ", core dumped" ) if ( $core_dumped ); + $out_str .= "\n"; + + if ( $exit_status == 0 ) + { + Info( $out_str ); + } + else + { + Error( $out_str ); + } + + if ( $process->{keepalive} ) + { + if ( !$process->{delay} || ($process->{runtime} > ZM_MAX_RESTART_DELAY) ) + { + #start( $process->{daemon}, @{$process->{args}} ); + # Schedule for immediate restart + $cmd_hash{$process->{command}} = $process; + $process->{pending} = $process->{stopped}; + $process->{delay} = 5; + } + else + { + $cmd_hash{$process->{command}} = $process; + $process->{pending} = $process->{stopped}+$process->{delay}; + $process->{delay} *= 2; + # Limit the start delay to 15 minutes max + if ( $process->{delay} > ZM_MAX_RESTART_DELAY ) + { + $process->{delay} = ZM_MAX_RESTART_DELAY; + } + } + } + } + $SIG{CHLD} = \&reaper; + $! = $saved_status; +} + +sub restartPending +{ + # Restart any pending processes + foreach my $process ( values( %cmd_hash ) ) + { + if ( $process->{pending} && $process->{pending} <= time() ) + { + dPrint( ZoneMinder::Logger::INFO, "Starting pending process, $process->{command}\n" ); + start( $process->{daemon}, @{$process->{args}} ); + } + } +} + +sub shutdownAll +{ + foreach my $process ( values( %pid_hash ) ) + { + stop( $process->{daemon}, @{$process->{args}} ); + } + killAll( 5 ); + dPrint( ZoneMinder::Logger::INFO, "Server shutdown at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + unlink( main::SOCK_FILE ); + unlink( ZM_PID ); + close( CLIENT ); + close( SERVER ); + exit(); +} + +sub check +{ + my $daemon = shift; + my @args = @_; + + my $command = $daemon; + $command .= ' '.join( ' ', ( @args ) ) if ( @args ); + my $process = $cmd_hash{$command}; + if ( !$process ) + { + cPrint( "unknown\n" ); + } + elsif ( $process->{pending} ) + { + cPrint( "pending\n" ); + } + else + { + my $cpid = $process->{pid}; + if ( !$pid_hash{$cpid} ) + { + cPrint( "stopped\n" ); + } + else + { + cPrint( "running\n" ); + } + } +} + +sub status +{ + my $daemon = shift; + my @args = @_; + + if ( defined($daemon) ) + { + my $command = $daemon; + $command .= ' '.join( ' ', ( @args ) ) if ( @args ); + my $process = $cmd_hash{$command}; + if ( !$process ) + { + dPrint( ZoneMinder::Logger::DEBUG, "'$command' not running\n" ); + return(); + } + + if ( $process->{pending} ) + { + dPrint( ZoneMinder::Logger::DEBUG, "'$process->{command}' pending at ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{pending}) )."\n" ); + } + else + { + my $cpid = $process->{pid}; + if ( !$pid_hash{$cpid} ) + { + dPrint( ZoneMinder::Logger::DEBUG, "'$command' not running\n" ); + return(); + } + } + dPrint( ZoneMinder::Logger::DEBUG, "'$process->{command}' running since ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ).", pid = $process->{pid}" ); + } + else + { + foreach my $process ( values(%pid_hash) ) + { + my $out_str = "'$process->{command}' running since ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ).", pid = $process->{pid}"; + $out_str .= ", valid" if ( kill( 0, $process->{pid} ) ); + $out_str .= "\n"; + dPrint( ZoneMinder::Logger::DEBUG, $out_str ); + } + foreach my $process ( values( %cmd_hash ) ) + { + if ( $process->{pending} ) + { + dPrint( ZoneMinder::Logger::DEBUG, "'$process->{command}' pending at ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{pending}) )."\n" ); + } + } + } +} + +sub killAll +{ + my $delay = shift; + sleep( $delay ); + foreach my $daemon ( @daemons ) + { + my $cmd = "killall --quiet --signal TERM $daemon"; + Debug( $cmd ); + qx( $cmd ); + } + sleep( $delay ); + foreach my $daemon ( @daemons ) + { + my $cmd = "killall --quiet --signal KILL $daemon"; + Debug( $cmd ); + qx( $cmd ); + } +} diff --git a/scripts/zmeventdump b/scripts/zmeventdump new file mode 100644 index 000000000..074b38ed4 --- /dev/null +++ b/scripts/zmeventdump @@ -0,0 +1,50 @@ +#!/bin/bash +#=============================================================================== +# +# FILE: zmeventdump +# +# USAGE: ./zmeventdump +# +# DESCRIPTION: Uses mysqldump to create a .sql file for individual zm +# events to make Event table recovery possible by doing a +# 'find' search in ZoneMinder the events directory +# +# OPTIONS: --- None +# REQUIREMENTS: --- mysqldump +# BUGS: --- +# NOTES: --- +# AUTHOR: Ross Melin +# COMPANY: +# VERSION: 3.0 +# CREATED: 02/27/2008 05:39:00 PM PST +# REVISION: --- Update for changed zmfilter and +# ZM_USE_DEEP_STORAGE +#=============================================================================== + +# Edit these to suit your configuration +ZM_CONFIG=/etc/zm/zm.conf +MYSQLDUMP=/usr/bin/mysqldump + +# The rest should not need editing + +# Get the mysql user and password +source $ZM_CONFIG + +# zmfilter now passes the full path as an argument +EVENT_PATH=$1 + +# Get the event id from a filename in the event directory +EVENT_ID=$(ls $1/.[0-9]* | sed s:$1\/\.::) + +MYDUMPOPTS="--user=$ZM_DB_USER --password=$ZM_DB_PASS --skip-opt --compact --quick --no-create-info" + +# Dump the sql statements needed to reload the Events, Frames and Stats tables + +echo "-- ZM_DB_VERSION=$ZM_VERSION + " > $EVENT_PATH/.sql + +$MYSQLDUMP $MYDUMPOPTS --where="Id=$EVENT_ID" zm Events >> $EVENT_PATH/.sql +$MYSQLDUMP $MYDUMPOPTS --where="Eventid=$EVENT_ID" zm Frames >> $EVENT_PATH/.sql +$MYSQLDUMP $MYDUMPOPTS --where="Eventid=$EVENT_ID" zm Stats >> $EVENT_PATH/.sql + +exit 0 diff --git a/scripts/zmfilter.pl b/scripts/zmfilter.pl new file mode 100644 index 000000000..f3d906685 --- /dev/null +++ b/scripts/zmfilter.pl @@ -0,0 +1,1169 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder Event Filter Script, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script continuously monitors the recorded events for the given +# monitor and applies any filters which would delete and/or upload +# matching events +# +use strict; +use bytes; + +# ========================================================================== +# +# These are the elements you can edit to suit your installation +# +# ========================================================================== + +use constant START_DELAY => 5; # How long to wait before starting + +# ========================================================================== +# +# You shouldn't need to change anything from here downwards +# +# ========================================================================== + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use DBI; +use POSIX; +use Time::HiRes qw/gettimeofday/; +use Date::Manip; +use Getopt::Long; +use Data::Dumper; + +use constant EVENT_PATH => (ZM_DIR_EVENTS=~m|/|)?ZM_DIR_EVENTS:(ZM_PATH_WEB.'/'.ZM_DIR_EVENTS); + +logInit(); +logSetSignal(); + +if ( ZM_OPT_UPLOAD ) +{ + # Comment these out if you don't have them and don't want to upload + # or don't want to use that format + if ( ZM_UPLOAD_ARCH_FORMAT eq "zip" ) + { + require Archive::Zip; + import Archive::Zip qw( :ERROR_CODES :CONSTANTS ); + } + else + { + require Archive::Tar; + } + if ( ZM_UPLOAD_PROTOCOL eq "ftp" ) + { + require Net::FTP; + } + else + { + require Net::SFTP::Foreign; + } +} + +if ( ZM_OPT_EMAIL ) +{ + if ( ZM_NEW_MAIL_MODULES ) + { + require MIME::Lite; + require Net::SMTP; + } + else + { + require MIME::Entity; + } +} + +if ( ZM_OPT_MESSAGE ) +{ + if ( ZM_NEW_MAIL_MODULES ) + { + require MIME::Lite; + require Net::SMTP; + } + else + { + require MIME::Entity; + } +} + + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +my $delay = ZM_FILTER_EXECUTE_INTERVAL; +my $event_id = 0; +my $filter_parm = ""; + +sub Usage +{ + print( " +Usage: zmfilter.pl [-f ,--filter=] +Parameters are :- +-f, --filter= - The name of a specific filter to run +"); + exit( -1 ); +} + +# +# More or less replicates the equivalent PHP function +# +sub strtotime +{ + my $dt_str = shift; + return( UnixDate( $dt_str, '%s' ) ); +} + +# +# More or less replicates the equivalent PHP function +# +sub str_repeat +{ + my $string = shift; + my $count = shift; + return( ${string}x${count} ); +} + +# Formats a date into MySQL format +sub DateTimeToSQL +{ + my $dt_str = shift; + my $dt_val = strtotime( $dt_str ); + if ( !$dt_val ) + { + Error( "Unable to parse date string '$dt_str'\n" ); + return( undef ); + } + return( strftime( "%Y-%m-%d %H:%M:%S", localtime( $dt_val ) ) ); +} + +if ( !GetOptions( 'filter=s'=>\$filter_parm ) ) +{ + Usage(); +} + +chdir( EVENT_PATH ); + +my $dbh = zmDbConnect(); + +if ( $filter_parm ) +{ + Info( "Scanning for events using filter '$filter_parm'\n" ); +} +else +{ + Info( "Scanning for events\n" ); +} + +if ( !$filter_parm ) +{ + sleep( START_DELAY ); +} + +my $filters; +my $last_action = 0; + +while( 1 ) +{ + if ( (time() - $last_action) > ZM_FILTER_RELOAD_DELAY ) + { + Debug( "Reloading filters\n" ); + $last_action = time(); + $filters = getFilters( $filter_parm ); + } + + foreach my $filter ( @$filters ) + { + checkFilter( $filter ); + } + + last if ( $filter_parm ); + + Debug( "Sleeping for $delay seconds\n" ); + sleep( $delay ); +} + +sub getDiskPercent +{ + my $command = "df ."; + my $df = qx( $command ); + my $space = -1; + if ( $df =~ /\s(\d+)%/ms ) + { + $space = $1; + } + return( $space ); +} + +sub getDiskBlocks +{ + my $command = "df ."; + my $df = qx( $command ); + my $space = -1; + if ( $df =~ /\s(\d+)\s+\d+\s+\d+%/ms ) + { + $space = $1; + } + return( $space ); +} + +sub getLoad +{ + my $command = "uptime ."; + my $uptime = qx( $command ); + my $load = -1; + if ( $uptime =~ /load average:\s+([\d.]+)/ms ) + { + $load = $1; + Info( "Load: $load" ); + } + return( $load ); +} + +sub getFilters +{ + my $filter_name = shift; + + my @filters; + my $sql = "select * from Filters where"; + if ( $filter_name ) + { + $sql .= " Name = ? and"; + } + else + { + $sql .= " Background = 1 and"; + } + $sql .= " (AutoArchive = 1 or AutoVideo = 1 or AutoUpload = 1 or AutoEmail = 1 or AutoMessage = 1 or AutoExecute = 1 or AutoDelete = 1) order by Name"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res; + if ( $filter_name ) + { + $res = $sth->execute( $filter_name ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + } + else + { + $res = $sth->execute() or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + } + FILTER: while( my $db_filter = $sth->fetchrow_hashref() ) + { + Debug( "Found filter '$db_filter->{Name}'\n" ); + my $filter_expr = jsonDecode( $db_filter->{Query} ); + my $sql = "select E.Id,E.MonitorId,M.Name as MonitorName,M.DefaultRate,M.DefaultScale,E.Name,E.Cause,E.Notes,E.StartTime,unix_timestamp(E.StartTime) as Time,E.Length,E.Frames,E.AlarmFrames,E.TotScore,E.AvgScore,E.MaxScore,E.Archived,E.Videoed,E.Uploaded,E.Emailed,E.Messaged,E.Executed from Events as E inner join Monitors as M on M.Id = E.MonitorId where not isnull(E.EndTime)"; + $db_filter->{Sql} = ''; + + if ( @{$filter_expr->{terms}} ) + { + for ( my $i = 0; $i < @{$filter_expr->{terms}}; $i++ ) + { + if ( exists($filter_expr->{terms}[$i]->{cnj}) ) + { + $db_filter->{Sql} .= " ".$filter_expr->{terms}[$i]->{cnj}." "; + } + if ( exists($filter_expr->{terms}[$i]->{obr}) ) + { + $db_filter->{Sql} .= " ".str_repeat( "(", $filter_expr->{terms}[$i]->{obr} )." "; + } + my $value = $filter_expr->{terms}[$i]->{val}; + my @value_list; + if ( $filter_expr->{terms}[$i]->{attr} ) + { + if ( $filter_expr->{terms}[$i]->{attr} =~ /^Monitor/ ) + { + my ( $temp_attr_name ) = $filter_expr->{terms}[$i]->{attr} =~ /^Monitor(.+)$/; + $db_filter->{Sql} .= "M.".$temp_attr_name; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'DateTime' ) + { + $db_filter->{Sql} .= "E.StartTime"; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'Date' ) + { + $db_filter->{Sql} .= "to_days( E.StartTime )"; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'Time' ) + { + $db_filter->{Sql} .= "extract( hour_second from E.StartTime )"; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'Weekday' ) + { + $db_filter->{Sql} .= "weekday( E.StartTime )"; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'DiskPercent' ) + { + $db_filter->{Sql} .= "zmDiskPercent"; + $db_filter->{HasDiskPercent} = !undef; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'DiskBlocks' ) + { + $db_filter->{Sql} .= "zmDiskBlocks"; + $db_filter->{HasDiskBlocks} = !undef; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'SystemLoad' ) + { + $db_filter->{Sql} .= "zmSystemLoad"; + $db_filter->{HasSystemLoad} = !undef; + } + else + { + $db_filter->{Sql} .= "E.".$filter_expr->{terms}[$i]->{attr}; + } + + ( my $stripped_value = $value ) =~ s/^["\']+?(.+)["\']+?$/$1/; + foreach my $temp_value ( split( /["'\s]*?,["'\s]*?/, $stripped_value ) ) + { + if ( $filter_expr->{terms}[$i]->{attr} =~ /^Monitor/ ) + { + $value = "'$temp_value'"; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'Name' || $filter_expr->{terms}[$i]->{attr} eq 'Cause' || $filter_expr->{terms}[$i]->{attr} eq 'Notes' ) + { + $value = "'$temp_value'"; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'DateTime' ) + { + $value = DateTimeToSQL( $temp_value ); + if ( !$value ) + { + Error( "Error parsing date/time '$temp_value', skipping filter '$db_filter->{Name}'\n" ); + next FILTER; + } + $value = "'$value'"; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'Date' ) + { + $value = DateTimeToSQL( $temp_value ); + if ( !$value ) + { + Error( "Error parsing date/time '$temp_value', skipping filter '$db_filter->{Name}'\n" ); + next FILTER; + } + $value = "to_days( '$value' )"; + } + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'Time' ) + { + $value = DateTimeToSQL( $temp_value ); + if ( !$value ) + { + Error( "Error parsing date/time '$temp_value', skipping filter '$db_filter->{Name}'\n" ); + next FILTER; + } + $value = "extract( hour_second from '$value' )"; + } + else + { + $value = $temp_value; + } + push( @value_list, $value ); + } + } + if ( $filter_expr->{terms}[$i]->{op} ) + { + if ( $filter_expr->{terms}[$i]->{op} eq '=~' ) + { + $db_filter->{Sql} .= " regexp $value"; + } + elsif ( $filter_expr->{terms}[$i]->{op} eq '!~' ) + { + $db_filter->{Sql} .= " not regexp $value"; + } + elsif ( $filter_expr->{terms}[$i]->{op} eq '=[]' ) + { + $db_filter->{Sql} .= " in (".join( ",", @value_list ).")"; + } + elsif ( $filter_expr->{terms}[$i]->{op} eq '!~' ) + { + $db_filter->{Sql} .= " not in (".join( ",", @value_list ).")"; + } + else + { + $db_filter->{Sql} .= " ".$filter_expr->{terms}[$i]->{op}." $value"; + } + } + if ( exists($filter_expr->{terms}[$i]->{cbr}) ) + { + $db_filter->{Sql} .= " ".str_repeat( ")", $filter_expr->{terms}[$i]->{cbr} )." "; + } + } + } + if ( $db_filter->{Sql} ) + { + $sql .= " and ( ".$db_filter->{Sql}." )"; + } + my @auto_terms; + if ( $db_filter->{AutoArchive} ) + { + push( @auto_terms, "E.Archived = 0" ) + } + if ( $db_filter->{AutoVideo} ) + { + push( @auto_terms, "E.Videoed = 0" ) + } + if ( $db_filter->{AutoUpload} ) + { + push( @auto_terms, "E.Uploaded = 0" ) + } + if ( $db_filter->{AutoEmail} ) + { + push( @auto_terms, "E.Emailed = 0" ) + } + if ( $db_filter->{AutoMessage} ) + { + push( @auto_terms, "E.Messaged = 0" ) + } + if ( $db_filter->{AutoExecute} ) + { + push( @auto_terms, "E.Executed = 0" ) + } + if ( @auto_terms ) + { + $sql .= " and ( ".join( " or ", @auto_terms )." )"; + } + if ( !$filter_expr->{sort_field} ) + { + $filter_expr->{sort_field} = 'StartTime'; + $filter_expr->{sort_asc} = 0; + } + my $sort_column = ''; + if ( $filter_expr->{sort_field} eq 'Id' ) + { + $sort_column = "E.Id"; + } + elsif ( $filter_expr->{sort_field} eq 'MonitorName' ) + { + $sort_column = "M.Name"; + } + elsif ( $filter_expr->{sort_field} eq 'Name' ) + { + $sort_column = "E.Name"; + } + elsif ( $filter_expr->{sort_field} eq 'StartTime' ) + { + $sort_column = "E.StartTime"; + } + elsif ( $filter_expr->{sort_field} eq 'Secs' ) + { + $sort_column = "E.Length"; + } + elsif ( $filter_expr->{sort_field} eq 'Frames' ) + { + $sort_column = "E.Frames"; + } + elsif ( $filter_expr->{sort_field} eq 'AlarmFrames' ) + { + $sort_column = "E.AlarmFrames"; + } + elsif ( $filter_expr->{sort_field} eq 'TotScore' ) + { + $sort_column = "E.TotScore"; + } + elsif ( $filter_expr->{sort_field} eq 'AvgScore' ) + { + $sort_column = "E.AvgScore"; + } + elsif ( $filter_expr->{sort_field} eq 'MaxScore' ) + { + $sort_column = "E.MaxScore"; + } + else + { + $sort_column = "E.StartTime"; + } + my $sort_order = $filter_expr->{sort_asc}?"asc":"desc"; + $sql .= " order by ".$sort_column." ".$sort_order; + if ( $filter_expr->{limit} ) + { + $sql .= " limit 0,".$filter_expr->{limit}; + } + Debug( "SQL:$sql\n" ); + $db_filter->{Sql} = $sql; + if ( $db_filter->{AutoExecute} ) + { + my $script = $db_filter->{AutoExecuteCmd}; + $script =~ s/\s.*$//; + if ( !-e $script ) + { + Error( "Auto execute script '$script' not found, skipping filter '$db_filter->{Name}'\n" ); + next FILTER; + + } + elsif ( !-x $script ) + { + Error( "Auto execute script '$script' not executable, skipping filter '$db_filter->{Name}'\n" ); + next FILTER; + } + } + push( @filters, $db_filter ); + } + $sth->finish(); + + return( \@filters ); +} + +sub checkFilter +{ + my $filter = shift; + + Debug( "Checking filter '$filter->{Name}'". + ($filter->{AutoDelete}?", delete":""). + ($filter->{AutoArchive}?", archive":""). + ($filter->{AutoVideo}?", video":""). + ($filter->{AutoUpload}?", upload":""). + ($filter->{AutoEmail}?", email":""). + ($filter->{AutoMessage}?", message":""). + ($filter->{AutoExecute}?", execute":""). + "\n" + ); + my $sql = $filter->{Sql}; + + if ( $filter->{HasDiskPercent} ) + { + my $disk_percent = getDiskPercent(); + $sql =~ s/zmDiskPercent/$disk_percent/g; + } + if ( $filter->{HasDiskBlocks} ) + { + my $disk_blocks = getDiskBlocks(); + $sql =~ s/zmDiskBlocks/$disk_blocks/g; + } + if ( $filter->{HasSystemLoad} ) + { + my $load = getLoad(); + $sql =~ s/zmSystemLoad/$load/g; + } + + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute(); + if ( !$res ) + { + Error( "Can't execute filter '$sql', ignoring: ".$sth->errstr() ); + return; + } + + while( my $event = $sth->fetchrow_hashref() ) + { + Debug( "Checking event $event->{Id}\n" ); + my $delete_ok = !undef; + if ( $filter->{AutoArchive} ) + { + Info( "Archiving event $event->{Id}\n" ); + # Do it individually to avoid locking up the table for new events + my $sql = "update Events set Archived = 1 where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + } + if ( ZM_OPT_FFMPEG && $filter->{AutoVideo} ) + { + if ( !$event->{Videoed} ) + { + $delete_ok = undef if ( !generateVideo( $filter, $event ) ); + } + } + if ( ZM_OPT_EMAIL && $filter->{AutoEmail} ) + { + if ( !$event->{Emailed} ) + { + $delete_ok = undef if ( !sendEmail( $filter, $event ) ); + } + } + if ( ZM_OPT_MESSAGE && $filter->{AutoMessage} ) + { + if ( !$event->{Messaged} ) + { + $delete_ok = undef if ( !sendMessage( $filter, $event ) ); + } + } + if ( ZM_OPT_UPLOAD && $filter->{AutoUpload} ) + { + if ( !$event->{Uploaded} ) + { + $delete_ok = undef if ( !uploadArchFile( $filter, $event ) ); + } + } + if ( $filter->{AutoExecute} ) + { + if ( !$event->{Execute} ) + { + $delete_ok = undef if ( !executeCommand( $filter, $event ) ); + } + } + if ( $filter->{AutoDelete} ) + { + if ( $delete_ok ) + { + Info( "Deleting event $event->{Id}\n" ); + # Do it individually to avoid locking up the table for new events + my $sql = "delete from Events where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + + if ( !ZM_OPT_FAST_DELETE ) + { + my $sql = "delete from Frames where EventId = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + + $sql = "delete from Stats where EventId = ?"; + $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + + deleteEventFiles( $event->{Id}, $event->{MonitorId} ); + } + } + else + { + Error( "Unable to delete event $event->{Id} as previous operations failed\n" ); + } + } + } + $sth->finish(); +} + +sub generateVideo +{ + my $filter = shift; + my $event = shift; + my $phone = shift; + + my $rate = $event->{DefaultRate}/100; + my $scale = $event->{DefaultScale}/100; + my $format; + + my @ffmpeg_formats = split( /\s+/, ZM_FFMPEG_FORMATS ); + my $default_video_format; + my $default_phone_format; + foreach my $ffmpeg_format( @ffmpeg_formats ) + { + if ( $ffmpeg_format =~ /^(.+)\*\*$/ ) + { + $default_phone_format = $1; + } + elsif ( $ffmpeg_format =~ /^(.+)\*$/ ) + { + $default_video_format = $1; + } + } + + if ( $phone && $default_phone_format ) + { + $format = $default_phone_format; + } + elsif ( $default_video_format ) + { + $format = $default_video_format; + } + else + { + $format = $ffmpeg_formats[0]; + } + + my $command = ZM_PATH_BIN."/zmvideo.pl -e ".$event->{Id}." -r ".$rate." -s ".$scale." -f ".$format; + my $output = qx($command); + chomp( $output ); + my $status = $? >> 8; + if ( $status || logDebugging() ) + { + Debug( "Output: $output\n" ); + } + if ( $status ) + { + Error( "Video generation '$command' failed with status: $status\n" ); + if ( wantarray() ) + { + return( undef, undef ); + } + return( 0 ); + } + else + { + my $sql = "update Events set Videoed = 1 where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + if ( wantarray() ) + { + return( $format, sprintf( "%s/%s", getEventPath( $event ), $output ) ); + } + } + return( 1 ); +} + +sub uploadArchFile +{ + my $filter = shift; + my $event = shift; + + if ( !ZM_UPLOAD_HOST ) + { + Error( "Cannot upload archive as no upload host defined" ); + return( 0 ); + } + + my $archFile = $event->{MonitorName}.'-'.$event->{Id}; + my $archImagePath = getEventPath( $event )."/".((ZM_UPLOAD_ARCH_ANALYSE)?'{*analyse,*capture}':'*capture').".jpg"; + my @archImageFiles = glob($archImagePath); + my $archLocPath; + + my $archError = 0; + if ( ZM_UPLOAD_ARCH_FORMAT eq "zip" ) + { + $archFile .= '.zip'; + $archLocPath = ZM_UPLOAD_LOC_DIR.'/'.$archFile; + my $zip = Archive::Zip->new(); + Info( "Creating upload file '$archLocPath', ".int(@archImageFiles)." files\n" ); + + my $status = &AZ_OK; + foreach my $imageFile ( @archImageFiles ) + { + Debug( "Adding $imageFile\n" ); + my $member = $zip->addFile( $imageFile ); + if ( !$member ) + { + Error( "Unable to add image file $imageFile to zip archive $archLocPath" ); + $archError = 1; + last; + } + $member->desiredCompressionMethod( (ZM_UPLOAD_ARCH_COMPRESS)?&COMPRESSION_DEFLATED:&COMPRESSION_STORED ); + } + if ( !$archError ) + { + $status = $zip->writeToFileNamed( $archLocPath ); + + if ( $archError = ($status != &AZ_OK) ) + { + Error( "Zip error: $status\n " ); + } + } + else + { + Error( "Error adding images to zip archive $archLocPath, not writing" ); + } + } + elsif ( ZM_UPLOAD_ARCH_FORMAT eq "tar" ) + { + if ( ZM_UPLOAD_ARCH_COMPRESS ) + { + $archFile .= '.tar.gz'; + } + else + { + $archFile .= '.tar'; + } + $archLocPath = ZM_UPLOAD_LOC_DIR.'/'.$archFile; + Info( "Creating upload file '$archLocPath', ".int(@archImageFiles)." files\n" ); + + if ( $archError = !Archive::Tar->create_archive( $archLocPath, ZM_UPLOAD_ARCH_COMPRESS, @archImageFiles ) ) + { + Error( "Tar error: ".Archive::Tar->error()."\n " ); + } + } + + if ( $archError ) + { + return( 0 ); + } + else + { + if ( ZM_UPLOAD_PROTOCOL eq "ftp" ) + { + Info( "Uploading to ".ZM_UPLOAD_HOST." using FTP\n" ); + my $ftp = Net::FTP->new( ZM_UPLOAD_HOST, Timeout=>ZM_UPLOAD_TIMEOUT, Passive=>ZM_UPLOAD_FTP_PASSIVE, Debug=>ZM_UPLOAD_DEBUG ); + if ( !$ftp ) + { + Error( "Can't create FTP connection: $@" ); + return( 0 ); + } + $ftp->login( ZM_UPLOAD_USER, ZM_UPLOAD_PASS ) or Error( "FTP - Can't login" ); + $ftp->binary() or Error( "FTP - Can't go binary" ); + $ftp->cwd( ZM_UPLOAD_REM_DIR ) or Error( "FTP - Can't cwd" ) if ( ZM_UPLOAD_REM_DIR ); + $ftp->put( $archLocPath ) or Error( "FTP - Can't upload '$archLocPath'" ); + $ftp->quit() or Error( "FTP - Can't quit" ); + } + else + { + my $host = ZM_UPLOAD_HOST; + $host .= ":".ZM_UPLOAD_PORT if ( ZM_UPLOAD_PORT ); + Info( "Uploading to ".$host." using SFTP\n" ); + my %sftpOptions = ( host=>ZM_UPLOAD_HOST, user=>ZM_UPLOAD_USER ); + $sftpOptions{password} = ZM_UPLOAD_PASS if ( ZM_UPLOAD_PASS ); + $sftpOptions{port} = ZM_UPLOAD_PORT if ( ZM_UPLOAD_PORT ); + $sftpOptions{timeout} = ZM_UPLOAD_TIMEOUT if ( ZM_UPLOAD_TIMEOUT ); + $sftpOptions{more} = [ '-o'=>'StrictHostKeyChecking=no' ]; + $Net::SFTP::Foreign::debug = -1 if ( ZM_UPLOAD_DEBUG ); + my $sftp = Net::SFTP::Foreign->new( ZM_UPLOAD_HOST, %sftpOptions ); + if ( $sftp->error ) + { + Error( "Can't create SFTP connection: ".$sftp->error ); + return( 0 ); + } + $sftp->setcwd( ZM_UPLOAD_REM_DIR ) or Error( "SFTP - Can't setcwd: ".$sftp->error ) if ( ZM_UPLOAD_REM_DIR ); + $sftp->put( $archLocPath, $archFile ) or Error( "SFTP - Can't upload '$archLocPath': ".$sftp->error ); + } + unlink( $archLocPath ); + my $sql = "update Events set Uploaded = 1 where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + } + return( 1 ); +} + +sub substituteTags +{ + my $text = shift; + my $filter = shift; + my $event = shift; + my $attachments_ref = shift; + + # First we'd better check what we need to get + # We have a filter and an event, do we need any more + # monitor information? + my $need_monitor = $text =~ /%(?:MET|MEH|MED|MEW|MEN|MEA)%/; + + my $monitor = {}; + if ( $need_monitor ) + { + my $db_now = strftime( "%Y-%m-%d %H:%M:%S", localtime() ); + my $sql = "select M.Id, count(E.Id) as EventCount, count(if(E.Archived,1,NULL)) as ArchEventCount, count(if(E.StartTime>'$db_now' - INTERVAL 1 HOUR && E.Archived = 0,1,NULL)) as HourEventCount, count(if(E.StartTime>'$db_now' - INTERVAL 1 DAY && E.Archived = 0,1,NULL)) as DayEventCount, count(if(E.StartTime>'$db_now' - INTERVAL 7 DAY && E.Archived = 0,1,NULL)) as WeekEventCount, count(if(E.StartTime>'$db_now' - INTERVAL 1 MONTH && E.Archived = 0,1,NULL)) as MonthEventCount from Monitors as M left join Events as E on E.MonitorId = M.Id where MonitorId = ? group by E.MonitorId order by Id"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{MonitorId} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + $monitor = $sth->fetchrow_hashref(); + $sth->finish(); + return() if ( !$monitor ); + } + + # Do we need the image information too? + my $need_images = $text =~ /%(?:EPI1|EPIM|EI1|EIM)%/; + my $first_alarm_frame; + my $max_alarm_frame; + my $max_alarm_score = 0; + if ( $need_images ) + { + my $sql = "select * from Frames where EventId = ? and Type = 'Alarm' order by FrameId"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + while( my $frame = $sth->fetchrow_hashref() ) + { + if ( !$first_alarm_frame ) + { + $first_alarm_frame = $frame; + } + if ( $frame->{Score} > $max_alarm_score ) + { + $max_alarm_frame = $frame; + $max_alarm_score = $frame->{Score}; + } + } + $sth->finish(); + } + + my $url = ZM_URL; + $text =~ s/%ZP%/$url/g; + $text =~ s/%MN%/$event->{MonitorName}/g; + $text =~ s/%MET%/$monitor->{EventCount}/g; + $text =~ s/%MEH%/$monitor->{HourEventCount}/g; + $text =~ s/%MED%/$monitor->{DayEventCount}/g; + $text =~ s/%MEW%/$monitor->{WeekEventCount}/g; + $text =~ s/%MEM%/$monitor->{MonthEventCount}/g; + $text =~ s/%MEA%/$monitor->{ArchEventCount}/g; + $text =~ s/%MP%/$url?view=watch&mid=$event->{MonitorId}/g; + $text =~ s/%MPS%/$url?view=watchfeed&mid=$event->{MonitorId}&mode=stream/g; + $text =~ s/%MPI%/$url?view=watchfeed&mid=$event->{MonitorId}&mode=still/g; + $text =~ s/%EP%/$url?view=event&mid=$event->{MonitorId}&eid=$event->{Id}/g; + $text =~ s/%EPS%/$url?view=event&mode=stream&mid=$event->{MonitorId}&eid=$event->{Id}/g; + $text =~ s/%EPI%/$url?view=event&mode=still&mid=$event->{MonitorId}&eid=$event->{Id}/g; + $text =~ s/%EI%/$event->{Id}/g; + $text =~ s/%EN%/$event->{Name}/g; + $text =~ s/%EC%/$event->{Cause}/g; + $text =~ s/%ED%/$event->{Notes}/g; + $text =~ s/%ET%/$event->{StartTime}/g; + $text =~ s/%EL%/$event->{Length}/g; + $text =~ s/%EF%/$event->{Frames}/g; + $text =~ s/%EFA%/$event->{AlarmFrames}/g; + $text =~ s/%EST%/$event->{TotScore}/g; + $text =~ s/%ESA%/$event->{AvgScore}/g; + $text =~ s/%ESM%/$event->{MaxScore}/g; + if ( $first_alarm_frame ) + { + $text =~ s/%EPI1%/$url?view=frame&mid=$event->{MonitorId}&eid=$event->{Id}&fid=$first_alarm_frame->{FrameId}/g; + $text =~ s/%EPIM%/$url?view=frame&mid=$event->{MonitorId}&eid=$event->{Id}&fid=$max_alarm_frame->{FrameId}/g; + if ( $attachments_ref && $text =~ s/%EI1%//g ) + { + push( @$attachments_ref, { type=>"image/jpeg", path=>sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg", getEventPath( $event ), $first_alarm_frame->{FrameId} ) } ); + } + if ( $attachments_ref && $text =~ s/%EIM%//g ) + { + # Don't attach the same image twice + if ( !@$attachments_ref || ($first_alarm_frame->{FrameId} != $max_alarm_frame->{FrameId} ) ) + { + push( @$attachments_ref, { type=>"image/jpeg", path=>sprintf( "%s/%0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg", getEventPath( $event ), $max_alarm_frame->{FrameId} ) } ); + } + } + } + if ( $attachments_ref && ZM_OPT_FFMPEG ) + { + if ( $text =~ s/%EV%//g ) + { + my ( $format, $path ) = generateVideo( $filter, $event ); + if ( !$format ) + { + return( undef ); + } + push( @$attachments_ref, { type=>"video/$format", path=>$path } ); + } + if ( $text =~ s/%EVM%//g ) + { + my ( $format, $path ) = generateVideo( $filter, $event, 1 ); + if ( !$format ) + { + return( undef ); + } + push( @$attachments_ref, { type=>"video/$format", path=>$path } ); + } + } + $text =~ s/%FN%/$filter->{Name}/g; + ( my $filter_name = $filter->{Name} ) =~ s/ /+/g; + $text =~ s/%FP%/$url?view=filter&mid=$event->{MonitorId}&filter_name=$filter_name/g; + + return( $text ); +} + +sub sendEmail +{ + my $filter = shift; + my $event = shift; + + if ( !ZM_FROM_EMAIL ) + { + Error( "No 'from' email address defined, not sending email" ); + return( 0 ); + } + if ( !ZM_EMAIL_ADDRESS ) + { + Error( "No email address defined, not sending email" ); + return( 0 ); + } + + Info( "Creating notification email\n" ); + + my $subject = substituteTags( ZM_EMAIL_SUBJECT, $filter, $event ); + return( 0 ) if ( !$subject ); + my @attachments; + my $body = substituteTags( ZM_EMAIL_BODY, $filter, $event, \@attachments ); + return( 0 ) if ( !$body ); + + Info( "Sending notification email '$subject'\n" ); + + eval + { + if ( ZM_NEW_MAIL_MODULES ) + { + ### Create the multipart container + my $mail = MIME::Lite->new ( + From => ZM_FROM_EMAIL, + To => ZM_EMAIL_ADDRESS, + Subject => $subject, + Type => "multipart/mixed" + ); + ### Add the text message part + $mail->attach ( + Type => "TEXT", + Data => $body + ); + ### Add the attachments + foreach my $attachment ( @attachments ) + { + Info( "Attaching '$attachment->{path}\n" ); + $mail->attach( + Path => $attachment->{path}, + Type => $attachment->{type}, + Disposition => "attachment" + ); + } + ### Send the Message + MIME::Lite->send( "smtp", ZM_EMAIL_HOST, Timeout=>60 ); + $mail->send(); + } + else + { + my $mail = MIME::Entity->build( + From => ZM_FROM_EMAIL, + To => ZM_EMAIL_ADDRESS, + Subject => $subject, + Type => (($body=~//)?'text/html':'text/plain'), + Data => $body + ); + + foreach my $attachment ( @attachments ) + { + Info( "Attaching '$attachment->{path}\n" ); + $mail->attach( + Path => $attachment->{path}, + Type => $attachment->{type}, + Encoding => "base64" + ); + } + $mail->smtpsend( Host => ZM_EMAIL_HOST, MailFrom => ZM_FROM_EMAIL ); + } + }; + if ( $@ ) + { + Error( "Can't send email: $@" ); + return( 0 ); + } + else + { + Info( "Notification email sent\n" ); + } + my $sql = "update Events set Emailed = 1 where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + + return( 1 ); +} + +sub sendMessage +{ + my $filter = shift; + my $event = shift; + + if ( !ZM_FROM_EMAIL ) + { + Error( "No 'from' email address defined, not sending message" ); + return( 0 ); + } + if ( !ZM_MESSAGE_ADDRESS ) + { + Error( "No message address defined, not sending message" ); + return( 0 ); + } + + Info( "Creating notification message\n" ); + + my $subject = substituteTags( ZM_MESSAGE_SUBJECT, $filter, $event ); + return( 0 ) if ( !$subject ); + my @attachments; + my $body = substituteTags( ZM_MESSAGE_BODY, $filter, $event, \@attachments ); + return( 0 ) if ( !$body ); + + Info( "Sending notification message '$subject'\n" ); + + eval + { + if ( ZM_NEW_MAIL_MODULES ) + { + ### Create the multipart container + my $mail = MIME::Lite->new ( + From => ZM_FROM_EMAIL, + To => ZM_MESSAGE_ADDRESS, + Subject => $subject, + Type => "multipart/mixed" + ); + ### Add the text message part + $mail->attach ( + Type => "TEXT", + Data => $body + ); + ### Add the attachments + foreach my $attachment ( @attachments ) + { + Info( "Attaching '$attachment->{path}\n" ); + $mail->attach( + Path => $attachment->{path}, + Type => $attachment->{type}, + Disposition => "attachment" + ); + } + ### Send the Message + MIME::Lite->send( "smtp", ZM_EMAIL_HOST, Timeout=>60 ); + $mail->send(); + } + else + { + my $mail = MIME::Entity->build( + From => ZM_FROM_EMAIL, + To => ZM_MESSAGE_ADDRESS, + Subject => $subject, + Type => (($body=~//)?'text/html':'text/plain'), + Data => $body + ); + + foreach my $attachment ( @attachments ) + { + Info( "Attaching '$attachment->{path}\n" ); + $mail->attach( + Path => $attachment->{path}, + Type => $attachment->{type}, + Encoding => "base64" + ); + } + $mail->smtpsend( Host => ZM_EMAIL_HOST, MailFrom => ZM_FROM_EMAIL ); + } + }; + if ( $@ ) + { + Error( "Can't send email: $@" ); + return( 0 ); + } + else + { + Info( "Notification message sent\n" ); + } + my $sql = "update Events set Messaged = 1 where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + + return( 1 ); +} + +sub executeCommand +{ + my $filter = shift; + my $event = shift; + + my $event_path = getEventPath( $event ); + + my $command = $filter->{AutoExecuteCmd}; + $command .= " $event_path"; + + Info( "Executing '$command'\n" ); + my $output = qx($command); + my $status = $? >> 8; + if ( $status || logDebugging() ) + { + chomp( $output ); + Debug( "Output: $output\n" ); + } + if ( $status ) + { + Error( "Command '$command' exited with status: $status\n" ); + return( 0 ); + } + else + { + my $sql = "update Events set Executed = 1 where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + } + return( 1 ); +} + diff --git a/scripts/zmlogrotate.conf b/scripts/zmlogrotate.conf new file mode 100644 index 000000000..730b27bb0 --- /dev/null +++ b/scripts/zmlogrotate.conf @@ -0,0 +1,20 @@ +# First the log files + +/var/log/zm/*log { + weekly + rotate 3 + notifempty + missingok +} + +# Now the weekly db backup + +/var/lib/zm/zm_backup.sql { +weekly +rotate 3 +missingok +compress +postrotate +/usr/bin/zmdbbackup +endscript +} diff --git a/scripts/zmpkg.pl b/scripts/zmpkg.pl new file mode 100644 index 000000000..632c4023f --- /dev/null +++ b/scripts/zmpkg.pl @@ -0,0 +1,247 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder Package Control Script, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script is used to start and stop the ZoneMinder package primarily to +# allow command line control for automatic restart on reboot (see zm script) +# +use strict; +use bytes; + +# ========================================================================== +# +# Don't change anything below here +# +# ========================================================================== + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use DBI; +use POSIX; +use Time::HiRes qw/gettimeofday/; + +# Detaint our environment +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +logInit(); + +my $command = $ARGV[0]; + +my $state; + +my $dbh = zmDbConnect(); + +if ( !$command || $command !~ /^(?:start|stop|restart|status|logrot)$/ ) +{ + if ( $command ) + { + # Check to see if it's a valid run state + my $sql = "select * from States where Name = '$command'"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); + if ( $state = $sth->fetchrow_hashref() ) + { + $state->{Name} = $command; + $state->{Definitions} = []; + foreach( split( /,/, $state->{Definition} ) ) + { + my ( $id, $function, $enabled ) = split( /:/, $_ ); + push( @{$state->{Definitions}}, { Id=>$id, Function=>$function, Enabled=>$enabled } ); + } + $command = 'state'; + } + else + { + $command = undef; + } + } + if ( !$command ) + { + print( "Usage: zmpkg.pl \n" ); + exit( -1 ); + } +} + +# Move to the right place +chdir( ZM_PATH_WEB ) or Fatal( "Can't chdir to '".ZM_PATH_WEB."': $!" ); + +my $dbg_id = ""; + +Info( "Command: $command\n" ); + +my $retval = 0; + +if ( $command eq "state" ) +{ + Info( "Updating DB: $state->{Name}\n" ); + my $sql = "select * from Monitors order by Id asc"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + foreach my $definition ( @{$state->{Definitions}} ) + { + if ( $monitor->{Id} =~ /^$definition->{Id}$/ ) + { + $monitor->{NewFunction} = $definition->{Function}; + $monitor->{NewEnabled} = $definition->{Enabled}; + } + } + #next if ( !$monitor->{NewFunction} ); + $monitor->{NewFunction} = 'None' if ( !$monitor->{NewFunction} ); + $monitor->{NewEnabled} = 0 if ( !$monitor->{NewEnabled} ); + if ( $monitor->{Function} ne $monitor->{NewFunction} || $monitor->{Enabled} ne $monitor->{NewEnabled} ) + { + my $sql = "update Monitors set Function = ?, Enabled = ? where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $monitor->{NewFunction}, $monitor->{NewEnabled}, $monitor->{Id} ) or Fatal( "Can't execute: ".$sth->errstr() ); + } + } + $sth->finish(); + + $command = "restart"; +} + +if ( $command =~ /^(?:stop|restart)$/ ) +{ + my $status = runCommand( "zmdc.pl check" ); + + if ( $status eq "running" ) + { + runCommand( "zmdc.pl shutdown" ); + zmMemTidy(); + } + else + { + $retval = 1; + } +} + +runCommand( "zmupdate.pl -f" ); + +if ( $command =~ /^(?:start|restart)$/ ) +{ + my $status = runCommand( "zmdc.pl check" ); + + if ( $status eq "stopped" ) + { + if ( ZM_DYN_DB_VERSION && ZM_DYN_DB_VERSION ne ZM_VERSION ) + { + Fatal( "Version mismatch, system is version ".ZM_VERSION.", database is ".ZM_DYN_DB_VERSION.", please run zmupdate.pl to update." ); + exit( -1 ); + } + + # Recreate the temporary directory if it's been wiped + if ( !-e "/tmp/zm" ) + { + Debug( "Recreating temporary directory '/tmp/zm'" ); + mkdir( "/tmp/zm", 0700 ) or Fatal( "Can't create missing temporary directory '/tmp/zm': $!" ); + my ( $runName ) = getpwuid( $> ); + if ( $runName ne ZM_WEB_USER ) + { + # Not running as web user, so should be root in whch case chown the temporary directory + my ( $webName, $webPass, $webUid, $webGid ) = getpwnam( ZM_WEB_USER ) or Fatal( "Can't get user details for web user '".ZM_WEB_USER."': $!" ); + chown( $webUid, $webGid, "/tmp/zm" ) or Fatal( "Can't change ownership of temporary directory '/tmp/zm' to '".ZM_WEB_USER.":".ZM_WEB_GROUP."': $!" ); + } + } + zmMemTidy(); + runCommand( "zmfix" ); + runCommand( "zmdc.pl startup" ); + + my $sql = "select * from Monitors"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + if ( $monitor->{Function} ne 'None' ) + { + if ( $monitor->{Type} eq 'Local' ) + { + runCommand( "zmdc.pl start zmc -d $monitor->{Device}" ); + } + else + { + runCommand( "zmdc.pl start zmc -m $monitor->{Id}" ); + } + if ( $monitor->{Function} ne 'Monitor' ) + { + if ( ZM_OPT_FRAME_SERVER ) + { + runCommand( "zmdc.pl start zmf -m $monitor->{Id}" ); + } + runCommand( "zmdc.pl start zma -m $monitor->{Id}" ); + } + if ( ZM_OPT_CONTROL ) + { + if ( $monitor->{Function} eq 'Modect' || $monitor->{Function} eq 'Mocord' ) + { + if ( $monitor->{Controllable} && $monitor->{TrackMotion} ) + { + runCommand( "zmdc.pl start zmtrack.pl -m $monitor->{Id}" ); + } + } + } + } + } + $sth->finish(); + + # This is now started unconditionally + runCommand( "zmdc.pl start zmfilter.pl" ); + if ( ZM_RUN_AUDIT ) + { + runCommand( "zmdc.pl start zmaudit.pl -c" ); + } + if ( ZM_OPT_TRIGGERS ) + { + runCommand( "zmdc.pl start zmtrigger.pl" ); + } + if ( ZM_OPT_X10 ) + { + runCommand( "zmdc.pl start zmx10.pl -c start" ); + } + runCommand( "zmdc.pl start zmwatch.pl" ); + if ( ZM_CHECK_FOR_UPDATES ) + { + runCommand( "zmdc.pl start zmupdate.pl -c" ); + } + } + else + { + $retval = 1; + } +} + +if ( $command eq "status" ) +{ + my $status = runCommand( "zmdc.pl check" ); + + print( STDOUT $status."\n" ); +} + +if ( $command eq "logrot" ) +{ + runCommand( "zmdc.pl logrot" ); +} + +exit( $retval ); diff --git a/scripts/zmtrack.pl b/scripts/zmtrack.pl new file mode 100644 index 000000000..c80277005 --- /dev/null +++ b/scripts/zmtrack.pl @@ -0,0 +1,205 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder Experimental PTZ Tracking Script, $Date: 2009-06-08 10:11:56 +0100 (Mon, 08 Jun 2009) $, $Revision: 2908 $ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script is used to trigger and cancel alarms from external sources +# using an arbitrary text based format +# +use strict; +use bytes; + +# ========================================================================== +# +# User config +# +# ========================================================================== + +use constant SLEEP_TIME => 10000; # In microseconds + +# ========================================================================== +# +# Don't change anything from here on down +# +# ========================================================================== + +use ZoneMinder; +use DBI; +use POSIX; +use Data::Dumper; +use Getopt::Long; +use Time::HiRes qw( usleep ); + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +my $mid = 0; + +sub Usage +{ + print( " + Usage: zmtrack.pl -m ,--monitor=] + Parameters are :- + -m, --monitor= - Id of the monitor to track + "); + exit( -1 ); +} + +if ( !GetOptions( 'monitor=s'=>\$mid ) ) +{ + Usage(); +} + +logInit(); +logSetSignal(); + +my ( $detaint_mid ) = $mid =~ /^(\d+)$/; +$mid = $detaint_mid; + +print( "Tracker daemon $mid (experimental) starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + +my $dbh = zmDbConnect(); + +my $sql = "select C.*,M.* from Monitors as M left join Controls as C on M.ControlId = C.Id where M.Id = ?"; +my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + +my $res = $sth->execute( $mid ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); +my $monitor = $sth->fetchrow_hashref(); + +if ( !$monitor ) +{ + print( "Can't find monitor '$mid'\n" ); + exit( -1 ); +} +if ( !$monitor->{Controllable} ) +{ + print( "Monitor '$mid' is not controllable\n" ); + exit( -1 ); +} +if ( !$monitor->{TrackMotion} ) +{ + print( "Monitor '$mid' is not configured to track motion\n" ); + exit( -1 ); +} + +if ( !$monitor->{CanMoveMap} ) +{ + print( "Monitor '$mid' cannot move in map mode" ); + if ( $monitor->{CanMoveRel} ) + { + print( ", falling back to pseudo map mode\n" ); + } + else + { + print( "\n" ); + exit( -1 ); + } +} + +Debug( "Found monitor for id '$monitor'\n" ); +exit( -1 ) if ( !zmMemVerify( $monitor ) ); + +sub Suspend +{ + my $monitor = shift; + zmMonitorSuspend( $monitor ); +} + +sub Resume +{ + my $monitor = shift; + sleep( $monitor->{TrackDelay} ); + zmMonitorResume( $monitor ); +} + +sub Track +{ + my $monitor = shift; + my ( $x, $y ) = @_; + my ( $detaint_x ) = $x =~ /^(\d+)$/; $x = $detaint_x; + my ( $detaint_y ) = $y =~ /^(\d+)$/; $y = $detaint_y; + + my $ctrlCommand = ZM_PATH_BIN."/zmcontrol.pl -i ".$monitor->{Id}; + $ctrlCommand .= " --command=".($monitor->{CanMoveMap}?"moveMap":"movePseudoMap")." --xcoord=$x --ycoord=$y"; + executeShellCommand( $ctrlCommand ); +} + +sub Return +{ + my $monitor = shift; + + my $ctrlCommand = ZM_PATH_BIN."/zmcontrol.pl -i ".$monitor->{Id}; + if ( $monitor->{ReturnLocation} > 0 ) + { + $ctrlCommand .= " --command=presetGoto --preset=".$monitor->{ReturnLocation}; + } + else + { + $ctrlCommand .= " --command=presetHome"; + } + executeShellCommand( $ctrlCommand ); +} + +my $last_alarm = 0; +if ( ($monitor->{ReturnLocation} >= 0) ) +{ + Suspend( $monitor ); + Return( $monitor ); + Resume( $monitor ); +} + +my $alarmed = undef; +while( 1 ) +{ + if ( zmIsAlarmed( $monitor ) ) + { + my ( $alarm_x, $alarm_y ) = zmGetAlarmLocation( $monitor ); + if ( $alarm_x >= 0 && $alarm_y >= 0 ) + { + Debug( "Got alarm at $alarm_x, $alarm_y\n" ); + Suspend( $monitor ); + Track( $monitor, $alarm_x, $alarm_y ); + Resume( $monitor ); + $last_alarm = time(); + $alarmed = !undef; + } + } + else + { + if ( logDebugging() && $alarmed ) + { + print( "Left alarm state\n" ); + $alarmed = undef; + } + if ( ($monitor->{ReturnLocation} >= 0) && ($last_alarm > 0) && ((time()-$last_alarm) > $monitor->{ReturnDelay}) ) + { + Debug( "Returning to location ".$monitor->{ReturnLocation}."\n" ); + Suspend( $monitor ); + Return( $monitor ); + Resume( $monitor ); + $last_alarm = 0; + } + } + usleep( SLEEP_TIME ); +} diff --git a/scripts/zmtrigger.pl b/scripts/zmtrigger.pl new file mode 100644 index 000000000..204d95153 --- /dev/null +++ b/scripts/zmtrigger.pl @@ -0,0 +1,440 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder External Trigger Script, $Date: 2008-07-25 10:48:16 +0100 (Fri, 25 Jul 2008) $, $Revision: 2612 $ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script is used to trigger and cancel alarms from external connections +# using an arbitrary text based format +# +# ========================================================================== +use strict; +use bytes; + +# ========================================================================== +# +# User config +# +# ========================================================================== + +use constant MAX_CONNECT_DELAY => 10; +use constant MONITOR_RELOAD_INTERVAL => 300; +use constant SELECT_TIMEOUT => 0.25; + +# ========================================================================== +# +# Channel/Connection Modules +# +# ========================================================================== + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use ZoneMinder::Trigger::Channel::Inet; +use ZoneMinder::Trigger::Channel::Unix; +use ZoneMinder::Trigger::Channel::Serial; +use ZoneMinder::Trigger::Connection; + +my @connections; +push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan1", channel=>ZoneMinder::Trigger::Channel::Inet->new( port=>6802 ), mode=>"rw" ) ); +push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan2", channel=>ZoneMinder::Trigger::Channel::Unix->new( path=>ZM_PATH_SOCKS.'/zmtrigger.sock' ), mode=>"rw" ) ); +#push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan3", channel=>ZoneMinder::Trigger::Channel::File->new( path=>'/tmp/zmtrigger.out' ), mode=>"w" ) ); +push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan4", channel=>ZoneMinder::Trigger::Channel::Serial->new( path=>'/dev/ttyS0' ), mode=>"rw" ) ); + +# ========================================================================== +# +# Don't change anything from here on down +# +# ========================================================================== + +use DBI; +#use Socket; +use Data::Dumper; +use POSIX qw( EINTR ); +use Time::HiRes qw( usleep ); + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +logInit(); +logSetSignal(); + +Info( "Trigger daemon starting\n" ); + +my $dbh = zmDbConnect(); + +my $base_rin = ''; +foreach my $connection ( @connections ) +{ + Info( "Opening connection '$connection->{name}'\n" ); + $connection->open(); +} + +my @in_select_connections = grep { $_->input() && $_->selectable() } @connections; +my @in_poll_connections = grep { $_->input() && !$_->selectable() } @connections; +my @out_connections = grep { $_->output() } @connections; + +foreach my $connection ( @in_select_connections ) +{ + vec( $base_rin, $connection->fileno(), 1 ) = 1; +} + +my %spawned_connections; +my %monitors; + +my $monitor_reload_time = 0; + +$! = undef; +my $rin = ''; +my $win = $rin; +my $ein = $win; +my $timeout = SELECT_TIMEOUT; +my %actions; +while( 1 ) +{ + $rin = $base_rin; + # Add the file descriptors of any spawned connections + foreach my $fileno ( keys(%spawned_connections) ) + { + vec( $rin, $fileno, 1 ) = 1; + } + + my $nfound = select( my $rout = $rin, undef, my $eout = $ein, $timeout ); + if ( $nfound > 0 ) + { + Debug( "Got input from $nfound connections\n" ); + foreach my $connection ( @in_select_connections ) + { + if ( vec( $rout, $connection->fileno(), 1 ) ) + { + Debug( "Got input from connection ".$connection->name()." (".$connection->fileno().")\n" ); + if ( $connection->spawns() ) + { + my $new_connection = $connection->accept(); + $spawned_connections{$new_connection->fileno()} = $new_connection; + Debug( "Added new spawned connection (".$new_connection->fileno()."), ".int(keys(%spawned_connections))." spawned connections\n" ); + } + else + { + my $messages = $connection->getMessages(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + } + } + } + foreach my $connection ( values(%spawned_connections) ) + { + if ( vec( $rout, $connection->fileno(), 1 ) ) + { + Debug( "Got input from spawned connection ".$connection->name()." (".$connection->fileno().")\n" ); + my $messages = $connection->getMessages(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + else + { + delete( $spawned_connections{$connection->fileno()} ); + Debug( "Removed spawned connection (".$connection->fileno()."), ".int(keys(%spawned_connections))." spawned connections\n" ); + $connection->close(); + } + } + } + } + elsif ( $nfound < 0 ) + { + if ( $! == EINTR ) + { + # Do nothing + } + else + { + Fatal( "Can't select: $!" ); + } + } + + # Check polled connections + foreach my $connection ( @in_poll_connections ) + { + my $messages = $connection->getMessages(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + } + + # Check for alarms that might have happened + my @out_messages; + foreach my $monitor ( values(%monitors) ) + { + my ( $state, $last_event ) = zmMemRead( $monitor, [ "shared_data:state", "shared_data:last_event" ] ); + + #print( "$monitor->{Id}: S:$state, LE:$last_event\n" ); + #print( "$monitor->{Id}: mS:$monitor->{LastState}, mLE:$monitor->{LastEvent}\n" ); + if ( $state == STATE_ALARM || $state == STATE_ALERT ) # In alarm state + { + if ( !defined($monitor->{LastEvent}) || ($last_event != $monitor->{LastEvent}) ) # A new event + { + push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event ); + } + else # The same one as last time, so ignore it + { + # Do nothing + } + } + elsif ( ($state == STATE_IDLE && $monitor->{LastState} != STATE_IDLE) || ($state == STATE_TAPE && $monitor->{LastState} != STATE_TAPE) ) # Out of alarm state + { + push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event ); + } + elsif ( defined($monitor->{LastEvent}) && ($last_event != $monitor->{LastEvent}) ) # We've missed a whole event + { + push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event ); + push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event ); + } + $monitor->{LastState} = $state; + $monitor->{LastEvent} = $last_event; + } + foreach my $connection ( @out_connections ) + { + if ( $connection->canWrite() ) + { + $connection->putMessages( \@out_messages ); + } + } + foreach my $connection ( values(%spawned_connections) ) + { + if ( $connection->canWrite() ) + { + $connection->putMessages( \@out_messages ); + } + } + + Debug( "Checking for timed actions\n" ) if ( int(keys(%actions)) ); + my $now = time(); + foreach my $action_time ( sort( grep { $_ < $now } keys( %actions ) ) ) + { + Info( "Found actions expiring at $action_time\n" ); + foreach my $action ( @{$actions{$action_time}} ) + { + my $connection = $action->{connection}; + my $message = $action->{message}; + Info( "Found action '$message'\n" ); + handleMessage( $connection, $message ); + } + delete( $actions{$action_time} ); + } + + # Allow connections to do their own timed actions + foreach my $connection ( @connections ) + { + my $messages = $connection->timedActions(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + } + foreach my $connection ( values(%spawned_connections) ) + { + my $messages = $connection->timedActions(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + } + + # If necessary reload monitors + if ( (time() - $monitor_reload_time) > MONITOR_RELOAD_INTERVAL ) + { + foreach my $monitor ( values(%monitors) ) + { + # Free up any used memory handle + zmMemInvalidate( $monitor ); + } + loadMonitors(); + } +} +Info( "Trigger daemon exiting\n" ); +exit; + +sub loadMonitors +{ + Debug( "Loading monitors\n" ); + $monitor_reload_time = time(); + + my %new_monitors = (); + + my $sql = "select * from Monitors where find_in_set( Function, 'Modect,Mocord,Nodect' )"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + next if ( !zmMemVerify( $monitor ) ); # Check shared memory ok + + if ( defined($monitors{$monitor->{Id}}->{LastState}) ) + { + $monitor->{LastState} = $monitors{$monitor->{Id}}->{LastState}; + } + else + { + $monitor->{LastState} = zmGetMonitorState( $monitor ); + } + if ( defined($monitors{$monitor->{Id}}->{LastEvent}) ) + { + $monitor->{LastEvent} = $monitors{$monitor->{Id}}->{LastEvent}; + } + else + { + $monitor->{LastEvent} = zmGetLastEvent( $monitor ); + } + $new_monitors{$monitor->{Id}} = $monitor; + } + %monitors = %new_monitors; +} + +sub handleMessage +{ + my $connection = shift; + my $message = shift; + + my ( $id, $action, $score, $cause, $text, $showtext ) = split( /\|/, $message ); + $score = 0 if ( !defined($score) ); + $cause = "" if ( !defined($cause) ); + $text = "" if ( !defined($text) ); + + my $monitor = $monitors{$id}; + if ( !$monitor ) + { + Warning( "Can't find monitor '$id' for message '$message'\n" ); + return; + } + Debug( "Found monitor for id '$id'\n" ); + + next if ( !zmMemVerify( $monitor ) ); + + Debug( "Handling action '$action'\n" ); + if ( $action =~ /^(enable|disable)(?:\+(\d+))?$/ ) + { + my $state = $1; + my $delay = $2; + if ( $state eq "enable" ) + { + zmMonitorEnable( $monitor ); + } + else + { + zmMonitorDisable( $monitor ); + } + # Force a reload + $monitor_reload_time = 0; + Info( "Set monitor to $state\n" ); + if ( $delay ) + { + my $action_time = time()+$delay; + my $action_text = $id."|".(($state eq "enable")?"disable":"enable"); + my $action_array = $actions{$action_time}; + if ( !$action_array ) + { + $action_array = $actions{$action_time} = []; + } + push( @$action_array, { connection=>$connection, message=>$action_text } ); + Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" ); + } + } + elsif ( $action =~ /^(on|off)(?:\+(\d+))?$/ ) + { + next if ( !$monitor->{Enabled} ); + + my $trigger = $1; + my $delay = $2; + my $trigger_data; + if ( $trigger eq "on" ) + { + zmTriggerEventOn( $monitor, $score, $cause, $text ); + zmTriggerShowtext( $monitor, $showtext ) if defined($showtext); + Info( "Trigger '$trigger' '$cause'\n" ); + } + elsif ( $trigger eq "off" ) + { + my $last_event = zmGetLastEvent( $monitor ); + zmTriggerEventOff( $monitor ); + zmTriggerShowtext( $monitor, $showtext ) if defined($showtext); + Info( "Trigger '$trigger'\n" ); + # Wait til it's finished + while( zmInAlarm( $monitor ) && ($last_event == zmGetLastEvent( $monitor )) ) + { + # Tenth of a second + usleep( 100000 ); + } + zmTriggerEventCancel( $monitor ); + } + else + { + Info( "Trigger '$trigger'\n" ); + zmTriggerEventCancel( $monitor ); + } + if ( $delay ) + { + my $action_time = time()+$delay; + #my $action_text = $id."|cancel|0|".$cause."|".$text; + my $action_text = $id."|cancel"; + my $action_array = $actions{$action_time}; + if ( !$action_array ) + { + $action_array = $actions{$action_time} = []; + } + push( @$action_array, { connection=>$connection, message=>$action_text } ); + Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" ); + } + } + elsif( $action eq "cancel" ) + { + zmTriggerEventCancel( $monitor ); + zmTriggerShowtext( $monitor, $showtext ) if defined($showtext); + Info( "Cancelled event\n" ); + } + elsif( $action eq "show" ) + { + zmTriggerShowtext( $monitor, $showtext ); + Info( "Updated show text to '$showtext'\n" ); + } + else + { + Error( "Unrecognised action '$action' in message '$message'\n" ); + } +} diff --git a/scripts/zmupdate.pl b/scripts/zmupdate.pl new file mode 100644 index 000000000..7aa64ac3a --- /dev/null +++ b/scripts/zmupdate.pl @@ -0,0 +1,984 @@ +#!/usr/bin/perl -w +# +# ========================================================================== +# +# ZoneMinder Update Script, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script just checks what the most recent release of ZoneMinder is +# at the the moment. It will eventually be responsible for applying and +# configuring upgrades etc, including on the fly upgrades. +# +use strict; +use bytes; + +# ========================================================================== +# +# These are the elements you can edit to suit your installation +# +# ========================================================================== + +use constant CHECK_INTERVAL => (1*24*60*60); # Interval between version checks + +# ========================================================================== +# +# Don't change anything below here +# +# ========================================================================== + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder::Base qw(:all); +use ZoneMinder::Config qw(:all); +use ZoneMinder::Logger qw(:all); +use ZoneMinder::General qw(:all); +use ZoneMinder::Database qw(:all); +use ZoneMinder::ConfigAdmin qw( :functions ); +use POSIX; +use DBI; +use Getopt::Long; +use Data::Dumper; + +use constant EVENT_PATH => (ZM_DIR_EVENTS=~m|/|)?ZM_DIR_EVENTS:(ZM_PATH_WEB.'/'.ZM_DIR_EVENTS); + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin:/usr/local/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +my $web_uid = (getpwnam( ZM_WEB_USER ))[2]; +my $use_log = (($> == 0) || ($> == $web_uid)); + +logInit( toFile=>$use_log?DEBUG:NOLOG ); +logSetSignal(); + +my $interactive = 1; +my $check = 0; +my $freshen = 0; +my $rename = 0; +my $zoneFix = 0; +my $migrateEvents = 0; +my $version = ''; +my $dbUser = ZM_DB_USER; +my $dbPass = ZM_DB_PASS; +my $updateDir = ''; +sub Usage +{ + print( " +Usage: zmupdate.pl <-c,--check|-f,--freshen|-v,--version=> [-u -p]> +Parameters are :- +-c, --check - Check for updated versions of ZoneMinder +-f, --freshen - Freshen the configuration in the database. Equivalent of old zmconfig.pl -noi +-v, --version= - Force upgrade to the current version from +-u, --user= - Alternate DB user with privileges to alter DB +-p, --pass= - Password of alternate DB user with privileges to alter DB +-d,--dir= - Directory containing update files if not in default build location +"); + exit( -1 ); +} + +if ( !GetOptions( 'check'=>\$check, 'freshen'=>\$freshen, 'rename'=>\$rename, 'zone-fix'=>\$zoneFix, 'migrate-events'=>\$migrateEvents, 'version=s'=>\$version, 'interactive!'=>\$interactive, 'user:s'=>\$dbUser, 'pass:s'=>\$dbPass, 'dir:s'=>\$updateDir ) ) +{ + Usage(); +} + +if ( ! ($check || $freshen || $rename || $zoneFix || $migrateEvents || $version) ) +{ + if ( ZM_DYN_DB_VERSION ) + { + $version = ZM_DYN_DB_VERSION; + } + else + { + print( STDERR "Please give a valid option\n" ); + Usage(); + } +} + +if ( ($check + $freshen + $rename + $zoneFix + $migrateEvents + ($version?1:0)) > 1 ) +{ + print( STDERR "Please give only one option\n" ); + Usage(); +} + +if ( $check && ZM_CHECK_FOR_UPDATES ) +{ + print( "Update agent starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + + my $dbh = zmDbConnect(); + + my $currVersion = ZM_DYN_CURR_VERSION; + my $lastVersion = ZM_DYN_LAST_VERSION; + my $lastCheck = ZM_DYN_LAST_CHECK; + + if ( !$currVersion ) + { + $currVersion = ZM_VERSION; + + my $sql = "update Config set Value = ? where Name = 'ZM_DYN_CURR_VERSION'"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( "$currVersion" ) or die( "Can't execute: ".$sth->errstr() ); + } + zmDbDisconnect(); + + while( 1 ) + { + my $now = time(); + if ( !$lastVersion || !$lastCheck || (($now-$lastCheck) > CHECK_INTERVAL) ) + { + $dbh = zmDbConnect(); + + Info( "Checking for updates\n" ); + + use LWP::UserAgent; + my $ua = LWP::UserAgent->new; + $ua->agent( "ZoneMinder Update Agent/".ZM_VERSION ); + if ( eval('defined(ZM_UPDATE_CHECK_PROXY)') ) + { + no strict 'subs'; + if ( ZM_UPDATE_CHECK_PROXY ) + { + $ua->proxy( "http", ZM_UPDATE_CHECK_PROXY ); + } + use strict 'subs'; + } + my $req = HTTP::Request->new( GET=>'http://www.zoneminder.com/version' ); + my $res = $ua->request($req); + + if ( $res->is_success ) + { + $lastVersion = $res->content; + chomp($lastVersion); + $lastCheck = $now; + + Info( "Got version: '".$lastVersion."'\n" ); + + my $lv_sql = "update Config set Value = ? where Name = 'ZM_DYN_LAST_VERSION'"; + my $lv_sth = $dbh->prepare_cached( $lv_sql ) or die( "Can't prepare '$lv_sql': ".$dbh->errstr() ); + my $lv_res = $lv_sth->execute( $lastVersion ) or die( "Can't execute: ".$lv_sth->errstr() ); + + my $lc_sql = "update Config set Value = ? where Name = 'ZM_DYN_LAST_CHECK'"; + my $lc_sth = $dbh->prepare_cached( $lc_sql ) or die( "Can't prepare '$lc_sql': ".$dbh->errstr() ); + my $lc_res = $lc_sth->execute( $lastCheck ) or die( "Can't execute: ".$lc_sth->errstr() ); + } + else + { + Error( "Error check failed: '".$res->status_line()."'\n" ); + } + zmDbDisconnect(); + } + sleep( 3600 ); + } + print( "Update agent exiting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); +} +if ( $rename ) +{ + require File::Find; + + chdir( EVENT_PATH ); + + sub renameImage + { + my $file = $_; + + # Ignore directories + if ( -d $file ) + { + print( "Checking directory '$file'\n" ); + return; + } + if ( $file !~ /(capture|analyse)-(\d+)(\.jpg)/ ) + { + return; + } + my $newFile = "$2-$1$3"; + + print( "Renaming '$file' to '$newFile'\n" ); + rename( $file, $newFile ) or warn( "Can't rename '$file' to '$newFile'" ); + } + + File::Find::find( \&renameImage, '.' ); +} +if ( $zoneFix ) +{ + require DBI; + + my $dbh = zmDbConnect(); + + my $sql = "select Z.*, M.Width as MonitorWidth, M.Height as MonitorHeight from Zones as Z inner join Monitors as M on Z.MonitorId = M.Id where Z.Units = 'Percent'"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + my @zones; + while( my $zone = $sth->fetchrow_hashref() ) + { + push( @zones, $zone ); + } + $sth->finish(); + + foreach my $zone ( @zones ) + { + my $zone_width = (($zone->{HiX}*$zone->{MonitorWidth})-($zone->{LoX}*$zone->{MonitorWidth}))/100; + my $zone_height = (($zone->{HiY}*$zone->{MonitorHeight})-($zone->{LoY}*$zone->{MonitorHeight}))/100; + my $zone_area = $zone_width * $zone_height; + my $monitor_area = $zone->{MonitorWidth} * $zone->{MonitorHeight}; + my $sql = "update Zones set MinAlarmPixels = ?, MaxAlarmPixels = ?, MinFilterPixels = ?, MaxFilterPixels = ?, MinBlobPixels = ?, MaxBlobPixels = ? where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( + ($zone->{MinAlarmPixels}*$monitor_area)/$zone_area, + ($zone->{MaxAlarmPixels}*$monitor_area)/$zone_area, + ($zone->{MinFilterPixels}*$monitor_area)/$zone_area, + ($zone->{MaxFilterPixels}*$monitor_area)/$zone_area, + ($zone->{MinBlobPixels}*$monitor_area)/$zone_area, + ($zone->{MaxBlobPixels}*$monitor_area)/$zone_area, + $zone->{Id} + ) or die( "Can't execute: ".$sth->errstr() ); + } +} +if ( $migrateEvents ) +{ + my $webUid = (getpwnam( ZM_WEB_USER ))[2]; + my $webGid = (getgrnam( ZM_WEB_USER ))[2]; + + if ( !(($> == 0) || ($> == $webUid)) ) + { + print( "Error, migrating events can only be done as user root or ".ZM_WEB_USER.".\n" ); + exit( -1 ); + } + + # Run as web user/group + $( = $webGid; + $) = $webGid; + $< = $webUid; + $> = $webUid; + + print( "\nAbout to convert saved events to deep storage, please ensure that ZoneMinder is fully stopped before proceeding.\nThis process is not easily reversible. Are you sure you wish to proceed?\n\nPress 'y' to continue or 'n' to abort : " ); + my $response = ; + chomp( $response ); + while ( $response !~ /^[yYnN]$/ ) + { + print( "Please press 'y' to continue or 'n' to abort only : " ); + $response = ; + chomp( $response ); + } + + if ( $response =~ /^[yY]$/ ) + { + print( "Converting all events to deep storage.\n" ); + + chdir( ZM_PATH_WEB ); + my $dbh = zmDbConnect(); + my $sql = "select *, unix_timestamp(StartTime) as UnixStartTime from Events"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute(); + if ( !$res ) + { + Fatal( "Can't fetch Events: ".$sth->errstr() ); + } + + while( my $event = $sth->fetchrow_hashref() ) + { + my $oldEventPath = ZM_DIR_EVENTS.'/'.$event->{MonitorId}.'/'.$event->{Id}; + + if ( !-d $oldEventPath ) + { + print( "Warning, can't find old event path '$oldEventPath', already converted?\n" ); + next; + } + + print( "Converting event ".$event->{Id}."\n" ); + my $newDatePath = ZM_DIR_EVENTS.'/'.$event->{MonitorId}.'/'.strftime( "%y/%m/%d", localtime($event->{UnixStartTime}) ); + my $newTimePath = strftime( "%H/%M/%S", localtime($event->{UnixStartTime}) ); + my $newEventPath = $newDatePath.'/'.$newTimePath; + ( my $truncEventPath = $newEventPath ) =~ s|/\d+$||; + makePath( $truncEventPath, ZM_PATH_WEB ); + my $idLink = $newDatePath.'/.'.$event->{Id}; + symlink( $newTimePath, $idLink ) or die( "Can't symlink $newTimePath -> $idLink: $!" ); + rename( $oldEventPath, $newEventPath ) or die( "Can't move $oldEventPath -> $newEventPath: $!" ); + } + + print( "Updating configuration.\n" ); + $sql = "update Config set Value = ? where Name = 'ZM_USE_DEEP_STORAGE'"; + $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + $res = $sth->execute( 1 ) or die( "Can't execute: ".$sth->errstr() ); + + print( "All events converted.\n\n" ); + } + else + { + print( "Aborting event conversion.\n\n" ); + } +} +if ( $freshen ) +{ + print( "\nFreshening configuration in database\n" ); + loadConfigFromDB(); + saveConfigToDB(); +} +if ( $version ) +{ + my ( $detaint_version ) = $version =~ /^([\w.]+)$/; + $version = $detaint_version; + + if ( ZM_VERSION eq $version ) + { + print( "\nDatabase already at version $version, update aborted.\n\n" ); + exit( -1 ); + } + + print( "\nInitiating database upgrade to version ".ZM_VERSION." from version $version\n" ); + if ( $interactive ) + { + if ( ZM_DYN_DB_VERSION && ZM_DYN_DB_VERSION ne $version ) + { + print( "\nWARNING - You have specified an upgrade from version $version but the database version found is ".ZM_DYN_DB_VERSION.". Is this correct?\nPress enter to continue or ctrl-C to abort : " ); + my $response = ; + } + + print( "\nPlease ensure that ZoneMinder is stopped on your system prior to upgrading the database.\nPress enter to continue or ctrl-C to stop : " ); + my $response = ; + + print( "\nDo you wish to take a backup of your database prior to upgrading?\nThis may result in a large file in /tmp/zm if you have a lot of events.\nPress 'y' for a backup or 'n' to continue : " ); + $response = ; + chomp( $response ); + while ( $response !~ /^[yYnN]$/ ) + { + print( "Please press 'y' for a backup or 'n' to continue only : " ); + $response = ; + chomp( $response ); + } + + if ( $response =~ /^[yY]$/ ) + { + my ( $host, $port ) = ( ZM_DB_HOST =~ /^([^:]+)(?::(.+))?$/ ); + my $command = "mysqldump -h".$host; + $command .= " -P".$port if defined($port); + if ( $dbUser ) + { + $command .= " -u".$dbUser; + if ( $dbPass ) + { + $command .= " -p".$dbPass; + } + } + my $backup = "/tmp/zm/".ZM_DB_NAME."-".$version.".dump"; + $command .= " --add-drop-table --databases ".ZM_DB_NAME." > ".$backup; + print( "Creating backup to $backup. This may take several minutes.\n" ); + print( "Executing '$command'\n" ) if ( logDebugging() ); + my $output = qx($command); + my $status = $? >> 8; + if ( $status || logDebugging() ) + { + chomp( $output ); + print( "Output: $output\n" ); + } + if ( $status ) + { + die( "Command '$command' exited with status: $status\n" ); + } + else + { + print( "Database successfully backed up to $backup, proceeding to upgrade.\n" ); + } + } + elsif ( $response !~ /^[nN]$/ ) + { + die( "Unexpected response '$response'" ); + } + } + sub patchDB + { + my $dbh = shift; + my $version = shift; + + my ( $host, $port ) = ( ZM_DB_HOST =~ /^([^:]+)(?::(.+))?$/ ); + my $command = "mysql -h".$host; + $command .= " -P".$port if defined($port); + if ( $dbUser ) + { + $command .= " -u".$dbUser; + if ( $dbPass ) + { + $command .= " -p".$dbPass; + } + } + $command .= " ".ZM_DB_NAME." < "; + if ( $updateDir ) + { + $command .= $updateDir; + } + else + { + $command .= ZM_PATH_BUILD."/db"; + } + $command .= "/zm_update-".$version.".sql"; + + print( "Executing '$command'\n" ) if ( logDebugging() ); + my $output = qx($command); + my $status = $? >> 8; + if ( $status || logDebugging() ) + { + chomp( $output ); + print( "Output: $output\n" ); + } + if ( $status ) + { + die( "Command '$command' exited with status: $status\n" ); + } + else + { + print( "\nDatabase successfully upgraded from version $version.\n" ); + my $sql = "update Config set Value = ? where Name = 'ZM_DYN_DB_VERSION'"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $version ) or die( "Can't execute: ".$sth->errstr() ); + } + } + + print( "\nUpgrading database to version ".ZM_VERSION."\n" ); + + # Update config first of all + loadConfigFromDB(); + saveConfigToDB(); + + my $dbh = zmDbConnect(); + + my $cascade = undef; + if ( $cascade || $version eq "1.19.0" ) + { + # Patch the database + patchDB( $dbh, "1.19.0" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.19.1" ) + { + # Patch the database + patchDB( $dbh, "1.19.1"); + $cascade = !undef; + } + if ( $cascade || $version eq "1.19.2" ) + { + # Patch the database + patchDB( $dbh, "1.19.2" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.19.3" ) + { + # Patch the database + patchDB( $dbh, "1.19.3" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.19.4" ) + { + require DBI; + + # Rename the event directories and create a new symlink for the names + chdir( EVENT_PATH ); + + my $sql = "select * from Monitors order by Id"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + if ( -d $monitor->{Name} ) + { + rename( $monitor->{Name}, $monitor->{Id} ) or warn( "Can't rename existing monitor directory '$monitor->{Name}' to '$monitor->{Id}': $!" ); + symlink( $monitor->{Id}, $monitor->{Name} ) or warn( "Can't symlink monitor directory '$monitor->{Id}' to '$monitor->{Name}': $!" ); + } + } + $sth->finish(); + + # Patch the database + patchDB( $dbh, "1.19.4" ); + + $cascade = !undef; + } + if ( $cascade || $version eq "1.19.5" ) + { + print( "\nThis version now only uses one database user.\nPlease ensure you have run zmconfig.pl and re-entered your database username and password prior to upgrading, or the upgrade will fail.\nPress enter to continue or ctrl-C to stop : " ); + # Patch the database + my $dummy = ; + patchDB( $dbh, "1.19.5" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.20.0" ) + { + # Patch the database + patchDB( $dbh, "1.20.0" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.20.1" ) + { + # Patch the database + patchDB( $dbh, "1.20.1" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.21.0" ) + { + # Patch the database + patchDB( $dbh, "1.21.0" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.21.1" ) + { + # Patch the database + patchDB( $dbh, "1.21.1" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.21.2" ) + { + # Patch the database + patchDB( $dbh, "1.21.2" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.21.3" ) + { + # Patch the database + patchDB( $dbh, "1.21.3" ); + + # Add appropriate widths and heights to events + { + print( "Updating events. This may take a few minutes. Please wait.\n" ); + my $sql = "select * from Monitors order by Id"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + my $sql = "update Events set Width = ?, Height = ? where MonitorId = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $monitor->{Width}, $monitor->{Height}, $monitor->{Id} ) or die( "Can't execute: ".$sth->errstr() ); + } + $sth->finish(); + } + + # Add sequence numbers + { + print( "Updating monitor sequences. Please wait.\n" ); + my $sql = "select * from Monitors order by Id"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + my $sequence = 1; + while( my $monitor = $sth->fetchrow_hashref() ) + { + my $sql = "update Monitors set Sequence = ? where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $sequence++, $monitor->{Id} ) or die( "Can't execute: ".$sth->errstr() ); + } + $sth->finish(); + } + + # Update saved filters + { + print( "Updating saved filters. Please wait.\n" ); + my $sql = "select * from Filters"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + my @filters; + while( my $filter = $sth->fetchrow_hashref() ) + { + push( @filters, $filter ); + } + $sth->finish(); + $sql = "update Filters set Query = ? where Name = ?"; + $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + foreach my $filter ( @filters ) + { + if ( $filter->{Query} =~ /op\d=&/ ) + { + ( my $newQuery = $filter->{Query} ) =~ s/(op\d=)&/$1=&/g; + $res = $sth->execute( $newQuery, $filter->{Name} ) or die( "Can't execute: ".$sth->errstr() ); + } + } + } + + $cascade = !undef; + } + if ( $cascade || $version eq "1.21.4" ) + { + # Patch the database + patchDB( $dbh, "1.21.4" ); + + # Convert zones to new format + { + print( "Updating zones. Please wait.\n" ); + + # Get the existing zones from the DB + my $sql = "select Z.*,M.Width,M.Height from Zones as Z inner join Monitors as M on (Z.MonitorId = M.Id)"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + my @zones; + while( my $zone = $sth->fetchrow_hashref() ) + { + push( @zones, $zone ); + } + $sth->finish(); + + no strict 'refs'; + foreach my $zone ( @zones ) + { + # Create the coordinate strings + if ( $zone->{Units} eq "Pixels" ) + { + my $sql = "update Zones set NumCoords = 4, Coords = concat( LoX,',',LoY,' ',HiX,',',LoY,' ',HiX,',',HiY,' ',LoX,',',HiY ), Area = round( ((HiX-LoX)+1)*((HiY-LoY)+1) ) where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $zone->{Id} ) or die( "Can't execute: ".$sth->errstr() ); + } + else + { + my $loX = ($zone->{LoX} * ($zone->{Width}-1) ) / 100; + my $hiX = ($zone->{HiX} * ($zone->{Width}-1) ) / 100; + my $loY = ($zone->{LoY} * ($zone->{Height}-1) ) / 100; + my $hiY = ($zone->{HiY} * ($zone->{Height}-1) ) / 100; + my $area = (($hiX-$loX)+1)*(($hiY-$loY)+1); + my $sql = "update Zones set NumCoords = 4, Coords = concat( round(?),',',round(?),' ',round(?),',',round(?),' ',round(?),',',round(?),' ',round(?),',',round(?) ), Area = round(?), MinAlarmPixels = round(?), MaxAlarmPixels = round(?), MinFilterPixels = round(?), MaxFilterPixels = round(?), MinBlobPixels = round(?), MaxBlobPixels = round(?) where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $loX, $loY, $hiX, $loY, $hiX, $hiY, $loX, $hiY, $area, ($zone->{MinAlarmPixels}*$area)/100, ($zone->{MaxAlarmPixels}*$area)/100, ($zone->{MinFilterPixels}*$area)/100, ($zone->{MaxFilterPixels}*$area)/100, ($zone->{MinBlobPixels}*$area)/100, ($zone->{MaxBlobPixels}*$area)/100, $zone->{Id} ) or die( "Can't execute: ".$sth->errstr() ); + } + } + } + # Convert run states to new format + { + print( "Updating run states. Please wait.\n" ); + + # Get the existing zones from the DB + my $sql = "select * from States"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + my @states; + while( my $state = $sth->fetchrow_hashref() ) + { + push( @states, $state ); + } + $sth->finish(); + + foreach my $state ( @states ) + { + my @new_defns; + foreach my $defn ( split( /,/, $state->{Definition} ) ) + { + push( @new_defns, $defn.":1" ); + } + my $sql = "update States set Definition = ? where Name = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( join( ',', @new_defns ), $state->{Name} ) or die( "Can't execute: ".$sth->errstr() ); + } + } + + $cascade = !undef; + } + if ( $cascade || $version eq "1.22.0" ) + { + # Patch the database + patchDB( $dbh, "1.22.0" ); + + # Check for maximum FPS setting and update alarm max fps settings + { + print( "Updating monitors. Please wait.\n" ); + if ( defined(&ZM_NO_MAX_FPS_ON_ALARM) && &ZM_NO_MAX_FPS_ON_ALARM ) + { + # Update the individual monitor settings to match the previous global one + my $sql = "update Monitors set AlarmMaxFPS = NULL"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + } + else + { + # Update the individual monitor settings to match the previous global one + my $sql = "update Monitors set AlarmMaxFPS = MaxFPS"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + } + } + { + print( "Updating mail configuration. Please wait.\n" ); + my ( $sql, $sth, $res ); + if ( defined(&ZM_EMAIL_TEXT) && &ZM_EMAIL_TEXT ) + { + my ( $email_subject, $email_body ) = ZM_EMAIL_TEXT =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"?$/ms; + $sql = "replace into Config set Id = 0, Name = 'ZM_EMAIL_SUBJECT', Value = '".$email_subject."', Type = 'string', DefaultValue = 'ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)', Hint = 'string', Pattern = '(?-xism:^(.+)\$)', Format = ' \$1 ', Prompt = 'The subject of the email used to send matching event details', Help = 'This option is used to define the subject of the email that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1'"; + $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + $sql = "replace into Config set Id = 0, Name = 'ZM_EMAIL_BODY', Value = '".$email_body."', Hint = 'free text', Pattern = '(?-xism:^(.+)\$)', Format = ' \$1 ', Prompt = 'The body of the email used to send matching event details', Help = 'This option is used to define the content of the email that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_EMAIL=1'"; + $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + } + if ( defined(&ZM_MESSAGE_TEXT) && &ZM_MESSAGE_TEXT ) + { + my ( $message_subject, $message_body ) = ZM_MESSAGE_TEXT =~ /subject\s*=\s*"([^\n]*)".*body\s*=\s*"(.*)"?$/ms; + $sql = "replace into Config set Id = 0, Name = 'ZM_MESSAGE_SUBJECT', Value = '".$message_subject."', Type = 'string', DefaultValue = 'ZoneMinder: Alarm - %MN%-%EI%', Hint = 'string', Pattern = '(?-xism:^(.+)\$)', Format = ' \$1 ', Prompt = 'The subject of the message used to send matching event details', Help = 'This option is used to define the subject of the message that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_MESSAGE=1'"; + $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + $sql = "replace into Config set Id = 0, Name = 'ZM_MESSAGE_BODY', Value = '".$message_body."', Type = 'text', DefaultValue = 'ZM alarm detected - %ED% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.', Hint = 'free text', Pattern = '(?-xism:^(.+)\$)', Format = ' \$1 ', Prompt = 'The body of the message used to send matching event details', Help = 'This option is used to define the content of the message that is sent for any events that match the appropriate filters.', Category = 'mail', Readonly = '0', Requires = 'ZM_OPT_MESSAGE=1'"; + $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + } + } + $cascade = !undef; + } + if ( $cascade || $version eq "1.22.1" ) + { + # Patch the database + patchDB( $dbh, "1.22.1" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.22.2" ) + { + # Patch the database + patchDB( $dbh, "1.22.2" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.22.3" ) + { + # Patch the database + patchDB( $dbh, "1.22.3" ); + + # Convert timestamp strings to new format + { + my $sql = "select * from Monitors"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + my @db_monitors; + while( my $db_monitor = $sth->fetchrow_hashref() ) + { + push( @db_monitors, $db_monitor ); + } + $sth->finish(); + foreach my $db_monitor ( @db_monitors ) + { + if ( $db_monitor->{LabelFormat} =~ /\%\%s/ ) + { + $db_monitor->{LabelFormat} =~ s/\%\%s/%N/; + $db_monitor->{LabelFormat} =~ s/\%\%s/%Q/; + + my $sql = "update Monitors set LabelFormat = ? where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $db_monitor->{LabelFormat}, $db_monitor->{Id} ) or die( "Can't execute: ".$sth->errstr() ); + } + } + } + + # Convert filters to new format + { + my $sql = "select * from Filters"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + my @dbFilters; + while( my $dbFilter = $sth->fetchrow_hashref() ) + { + push( @dbFilters, $dbFilter ); + } + $sth->finish(); + foreach my $dbFilter ( @dbFilters ) + { + my %filter_terms; + foreach my $filter_parm ( split( /&/, $dbFilter->{Query} ) ) + { + my( $key, $value ) = split( /=/, $filter_parm, 2 ); + if ( $key ) + { + $filter_terms{$key} = $value; + } + } + my $filter = { 'terms' => [] }; + for ( my $i = 1; $i <= $filter_terms{trms}; $i++ ) + { + my $term = {}; + my $conjunction_name = "cnj$i"; + my $obracket_name = "obr$i"; + my $cbracket_name = "cbr$i"; + my $attr_name = "attr$i"; + my $op_name = "op$i"; + my $value_name = "val$i"; + + $term->{cnj} = $filter_terms{$conjunction_name} if ( $filter_terms{$conjunction_name} ); + $term->{obr} = $filter_terms{$obracket_name} if ( $filter_terms{$obracket_name} ); + $term->{attr} = $filter_terms{$attr_name} if ( $filter_terms{$attr_name} ); + $term->{val} = $filter_terms{$value_name} if ( defined($filter_terms{$value_name}) ); + $term->{op} = $filter_terms{$op_name} if ( $filter_terms{$op_name} ); + $term->{cbr} = $filter_terms{$cbracket_name} if ( $filter_terms{$cbracket_name} ); + push( @{$filter->{terms}}, $term ); + } + $filter->{sort_field} = $filter_terms{sort_field} if ( $filter_terms{sort_field} ); + $filter->{sort_asc} = $filter_terms{sort_asc} if ( $filter_terms{sort_asc} ); + $filter->{limit} = $filter_terms{limit} if ( $filter_terms{limit} ); + + my $newQuery = 'a:'.int(keys(%$filter)).':{s:5:"terms";a:'.int(@{$filter->{terms}}).':{'; + my $i = 0; + foreach my $term ( @{$filter->{terms}} ) + { + $newQuery .= 'i:'.$i.';a:'.int(keys(%$term)).':{'; + while ( my ( $key, $val ) = each( %$term ) ) + { + $newQuery .= 's:'.length($key).':"'.$key.'";'; + $newQuery .= 's:'.length($val).':"'.$val.'";'; + } + $newQuery .= '}'; + $i++; + } + $newQuery .= '}'; + foreach my $field ( "sort_field", "sort_asc", "limit" ) + { + if ( defined($filter->{$field}) ) + { + $newQuery .= 's:'.length($field).':"'.$field.'";'; + $newQuery .= 's:'.length($filter->{$field}).':"'.$filter->{$field}.'";'; + } + } + $newQuery .= '}'; + + my $sql = "update Filters set Query = ? where Name = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $newQuery, $dbFilter->{Name} ) or die( "Can't execute: ".$sth->errstr() ); + } + } + + # Update the stream quality setting to the old image quality ones + { + my $dbh = zmDbConnect(); + + my $sql = "update Config set Value = ? where Name = 'ZM_JPEG_STREAM_QUALITY'"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( ZM_JPEG_IMAGE_QUALITY ) or die( "Can't execute: ".$sth->errstr() ); + } + $cascade = !undef; + } + if ( $cascade || $version eq "1.23.0" ) + { + # Patch the database + patchDB( $dbh, "1.23.0" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.23.1" ) + { + # Patch the database + patchDB( $dbh, "1.23.1" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.23.2" ) + { + # Patch the database + patchDB( $dbh, "1.23.2" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.23.3" ) + { + # Patch the database + patchDB( $dbh, "1.23.3" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.24.0" ) + { + # Patch the database + patchDB( $dbh, "1.24.0" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.24.1" ) + { + # Patch the database + patchDB( $dbh, "1.24.1" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.24.2" ) + { + # Patch the database + patchDB( $dbh, "1.24.2" ); + $cascade = !undef; + } + if ( $cascade || $version eq "1.24.3" ) + { + my $result = eval + { + require PHP::Serialization; + PHP::Serialization->import(); + }; + die( "Unable to perform upgrade from 1.24.3, PHP::Serialization module not found" ) if ( $result ); + + # Patch the database + patchDB( $dbh, "1.24.3" ); + + # Convert filters to JSON from PHP format serialisation + { + print( "\nConverting filters from PHP to JSON format\n" ); + my $sql = "select * from Filters"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); + my @dbFilters; + while( my $dbFilter = $sth->fetchrow_hashref() ) + { + push( @dbFilters, $dbFilter ); + } + $sth->finish(); + foreach my $dbFilter ( @dbFilters ) + { + print( " ".$dbFilter->{Name} ); + eval { + my $phpQuery = $dbFilter->{Query}; + my $query = PHP::Serialization::unserialize( $phpQuery ); + my $jsonQuery = jsonEncode( $query ); + my $sql = "update Filters set Query = ? where Name = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $jsonQuery, $dbFilter->{Name} ) or die( "Can't execute: ".$sth->errstr() ); + }; + if ( $@ ) + { + print( " - failed, please check or report. Query is '".$dbFilter->{Query}."'\n" ); + print( $@ ); + } + else + { + print( " - complete\n" ); + } + } + print( "Conversion complete\n" ); + } + $cascade = !undef; + } + if ( $cascade || $version eq "1.24.4" ) + { + # Patch the database + patchDB( $dbh, "1.24.4" ); + + # Copy the FTP specific values to the new general config + my $fetchSql = "select * from Config where Name like 'ZM_UPLOAD_FTP_%'"; + my $fetchSth = $dbh->prepare_cached( $fetchSql ) or die( "Can't prepare '$fetchSql': ".$dbh->errstr() ); + my $updateSql = "update Config set Value = ? where Name = ?"; + my $updateSth = $dbh->prepare_cached( $updateSql ) or die( "Can't prepare '$updateSql': ".$dbh->errstr() ); + my $fetchRes = $fetchSth->execute() or die( "Can't execute: ".$fetchSth->errstr() ); + while( my $config = $fetchSth->fetchrow_hashref() ) + { + ( my $name = $config->{Name} ) =~ s/_FTP_/_/; + my $updateRes = $updateSth->execute( $config->{Value}, $name ) or die( "Can't execute: ".$updateSth->errstr() ); + } + $cascade = !undef; + } + if ( $cascade ) + { + my $installed_version = ZM_VERSION; + my $sql = "update Config set Value = ? where Name = ?"; + my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( "$installed_version", "ZM_DYN_DB_VERSION" ) or die( "Can't execute: ".$sth->errstr() ); + $res = $sth->execute( "$installed_version", "ZM_DYN_CURR_VERSION" ) or die( "Can't execute: ".$sth->errstr() ); + $dbh->disconnect(); + } + else + { + $dbh->disconnect(); + die( "Can't find upgrade from version '$version'" ); + } + print( "\nDatabase upgrade to version ".ZM_VERSION." successful.\n\n" ); +} +exit( 0 ); diff --git a/scripts/zmupdate.pl.in b/scripts/zmupdate.pl.in index 08927c687..1a3d8fd58 100644 --- a/scripts/zmupdate.pl.in +++ b/scripts/zmupdate.pl.in @@ -424,7 +424,7 @@ if ( $version ) } else { - $command .= "/usr/share/zoneminder/db"; + $command .= ZM_PATH_BUILD."/db"; } $command .= "/zm_update-".$version.".sql"; diff --git a/scripts/zmvideo.pl b/scripts/zmvideo.pl new file mode 100644 index 000000000..cd011d8b7 --- /dev/null +++ b/scripts/zmvideo.pl @@ -0,0 +1,243 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder Video Creation Script, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script is used to create MPEG videos of events for the web pages +# or as email attachments. +# +use strict; +use bytes; + +# ========================================================================== +# +# You shouldn't need to change anything from here downwards +# +# ========================================================================== + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use DBI; +use Data::Dumper; +use POSIX qw(strftime); +use Getopt::Long qw(:config no_ignore_case ); + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +logInit(); + +my $event_id; +my $format = 'mpg'; +my $rate = ''; +my $scale = ''; +my $fps = ''; +my $size = ''; +my $overwrite = 0; + +my @formats = split( /\s+/, ZM_FFMPEG_FORMATS ); +for ( my $i = 0; $i < @formats; $i++ ) +{ + if ( $i =~ /^(.+)\*$/ ) + { + $format = $formats[$i] = $1; + } +} + +sub Usage +{ + print( " +Usage: zmvideo.pl -e ,--event= [--format ] [--rate=] [--scale=] [--fps=] [--size=] [--overwrite] +Parameters are :- +-e, --event= - What event to create the video for +-f, --format= - What format to create the video in, default is mpg. For ffmpeg only. +-r, --rate= - Relative rate , 1 = realtime, 2 = double speed , 0.5 = half speed etc +-s, --scale= - Scale, 1 = normal, 2 = double size, 0.5 = half size etc +-F, --fps= - Absolute frame rate, in frames per second +-S, --size= - Absolute video size, WxH or other specification supported by ffmpeg +-o, --overwrite - Whether to overwrite an existing file, off by default. +"); + exit( -1 ); +} + +if ( !GetOptions( 'event=i'=>\$event_id, 'format|f=s'=>\$format, 'rate|r=f'=>\$rate, 'scale|s=f'=>\$scale, 'fps|F=f'=>\$fps, 'size|S=s'=>\$size, 'overwrite'=>\$overwrite ) ) +{ + Usage(); +} + +if ( !$event_id || $event_id < 0 ) +{ + print( STDERR "Please give a valid event id\n" ); + Usage(); +} + +if ( !ZM_OPT_FFMPEG ) +{ + print( STDERR "Mpeg encoding is not currently enabled\n" ); + exit(-1); +} + +if ( !$rate && !$fps ) +{ + $rate = 1; +} + +if ( !$scale && !$size ) +{ + $scale = 1; +} + +if ( $rate && ($rate < 0.25 || $rate > 100) ) +{ + print( STDERR "Rate is out of range, 0.25 >= rate <= 100\n" ); + Usage(); +} + +if ( $scale && ($scale < 0.25 || $scale > 4) ) +{ + print( STDERR "Scale is out of range, 0.25 >= scale <= 4\n" ); + Usage(); +} + +if ( $fps && ($fps > 30) ) +{ + print( STDERR "FPS is out of range, <= 30\n" ); + Usage(); +} + +my ( $detaint_format ) = $format =~ /^(\w+)$/; +my ( $detaint_rate ) = $rate =~ /^(-?\d+(?:\.\d+)?)$/; +my ( $detaint_scale ) = $scale =~ /^(-?\d+(?:\.\d+)?)$/; +my ( $detaint_fps ) = $fps =~ /^(-?\d+(?:\.\d+)?)$/; +my ( $detaint_size ) = $size =~ /^(\w+)$/; + +$format = $detaint_format; +$rate = $detaint_rate; +$scale = $detaint_scale; +$fps = $detaint_fps; +$size = $detaint_size; + +my $dbh = zmDbConnect(); + +my @filters; +my $sql = "select max(F.Delta)-min(F.Delta) as FullLength, E.*, unix_timestamp(E.StartTime) as Time, M.Name as MonitorName, M.Width as MonitorWidth, M.Height as MonitorHeight, M.Palette from Frames as F inner join Events as E on F.EventId = E.Id inner join Monitors as M on E.MonitorId = M.Id where EventId = '$event_id' group by F.EventId"; +my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); +my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); +my $event = $sth->fetchrow_hashref(); +$sth->finish(); +my $event_path = getEventPath( $event ); +chdir( $event_path ); +( my $video_name = $event->{Name} ) =~ s/\s/_/g; + +my @file_parts; +if ( $rate ) +{ + my $file_rate = $rate; + $file_rate =~ s/\./_/; + $file_rate =~ s/_00//; + $file_rate =~ s/(_\d+)0+$/$1/; + $file_rate = 'r'.$file_rate; + push( @file_parts, $file_rate ); +} +elsif ( $fps ) +{ + my $file_fps = $fps; + $file_fps =~ s/\./_/; + $file_fps =~ s/_00//; + $file_fps =~ s/(_\d+)0+$/$1/; + $file_fps = 'R'.$file_fps; + push( @file_parts, $file_fps ); +} + +if ( $scale ) +{ + my $file_scale = $scale; + $file_scale =~ s/\./_/; + $file_scale =~ s/_00//; + $file_scale =~ s/(_\d+)0+$/$1/; + $file_scale = 's'.$file_scale; + push( @file_parts, $file_scale ); +} +elsif ( $size ) +{ + my $file_size = 'S'.$size; + push( @file_parts, $file_size ); +} +my $video_file = "$video_name-".$file_parts[0]."-".$file_parts[1].".$format"; + +if ( $overwrite || !-s $video_file ) +{ + Info( "Creating video file $video_file for event $event->{Id}\n" ); + + my $frame_rate = sprintf( "%.2f", $event->{Frames}/$event->{FullLength} ); + if ( $rate ) + { + if ( $rate != 1.0 ) + { + $frame_rate *= $rate; + } + } + elsif ( $fps ) + { + $frame_rate = $fps; + } + + my $width = $event->{MonitorWidth}; + my $height = $event->{MonitorHeight}; + my $video_size = " ${width}x${height}"; + + if ( $scale ) + { + if ( $scale != 1.0 ) + { + $width = int($width*$scale); + $height = int($height*$scale); + $video_size = " ${width}x${height}"; + } + } + elsif ( $size ) + { + $video_size = $size; + } + + my $command = ZM_PATH_FFMPEG." -y -r $frame_rate ".ZM_FFMPEG_INPUT_OPTIONS." -i %0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg -s $video_size ".ZM_FFMPEG_OUTPUT_OPTIONS." '$video_file' > ffmpeg.log 2>&1"; + Debug( $command."\n" ); + my $output = qx($command); + + my $status = $? >> 8; + if ( $status ) + { + Error( "Unable to generate video, check ".$event_path."/ffmpeg.log for details" ); + exit( -1 ); + } + + Info( "Finished $video_file\n" ); +} +else +{ + Info( "Video file $video_file already exists for event $event->{Id}\n" ); +} +#print( STDOUT $event->{MonitorId}.'/'.$event->{Id}.'/'.$video_file."\n" ); +print( STDOUT $video_file."\n" ); +exit( 0 ); diff --git a/scripts/zmwatch.pl b/scripts/zmwatch.pl new file mode 100644 index 000000000..5d16d3122 --- /dev/null +++ b/scripts/zmwatch.pl @@ -0,0 +1,148 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder WatchDog Script, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This does some basic setup for ZoneMinder to run and then periodically +# checks the fps output of the active daemons to check they haven't +# locked up. If they have then they are killed and restarted +# +use strict; +use bytes; + +# ========================================================================== +# +# These are the elements you can edit to suit your installation +# +# ========================================================================== + +use constant START_DELAY => 30; # To give everything else time to start + +# ========================================================================== +# +# Don't change anything below here +# +# ========================================================================== + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use POSIX; +use DBI; +use Data::Dumper; + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +sub Usage +{ + print( " +Usage: zmwatch.pl +"); + exit( -1 ); +} + +logInit(); +logSetSignal(); + +Info( "Watchdog starting\n" ); +Info( "Watchdog pausing for ".START_DELAY." seconds\n" ); +sleep( START_DELAY ); + +my $dbh = zmDbConnect(); + +my $sql = "select * from Monitors"; +my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + +while( 1 ) +{ + my $now = time(); + my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + if ( $monitor->{Function} ne 'None' ) + { + my $restart = 0; + if ( zmMemVerify( $monitor ) && zmMemRead( $monitor, "shared_data:valid" ) ) + { + # Check we have got an image recently + my $image_time = zmGetLastWriteTime( $monitor ); + next if ( !defined($image_time) ); # Can't read from shared data + next if ( !$image_time ); # We can't get the last capture time so can't be sure it's died. + + my $max_image_delay = ($monitor->{MaxFPS}&&($monitor->{MaxFPS}>0)&&($monitor->{MaxFPS}<1))?(3/$monitor->{MaxFPS}):ZM_WATCH_MAX_DELAY; + my $image_delay = $now-$image_time; + Debug( "Monitor $monitor->{Id} last captured $image_delay seconds ago, max is $max_image_delay\n" ); + if ( $image_delay > $max_image_delay ) + { + Info( "Restarting capture daemon for ".$monitor->{Name}.", time since last capture $image_delay seconds ($now-$image_time)\n" ); + $restart = 1; + } + } + else + { + #Info( "Restarting capture daemon for ".$monitor->{Name}.", shared data not valid\n" ); + #$restart = 1; + } + + if ( $restart ) + { + my $command; + if ( $monitor->{Type} eq 'Local' ) + { + $command = "zmdc.pl restart zmc -d $monitor->{Device}"; + } + else + { + $command = "zmdc.pl restart zmc -m $monitor->{Id}"; + } + runCommand( $command ); + } + elsif ( $monitor->{Function} ne 'Monitor' ) + { + if ( zmMemVerify( $monitor ) && zmMemRead( $monitor, "shared_data:valid" ) ) + { + # Check we have got an image recently + my $image_time = zmGetLastReadTime( $monitor ); + next if ( !defined($image_time) ); # Can't read from shared data + next if ( !$image_time ); # We can't get the last capture time so can't be sure it's died. + + my $max_image_delay = ($monitor->{MaxFPS}&&($monitor->{MaxFPS}>0)&&($monitor->{MaxFPS}<1))?(3/$monitor->{MaxFPS}):ZM_WATCH_MAX_DELAY; + my $image_delay = $now-$image_time; + Debug( "Monitor $monitor->{Id} last analysed $image_delay seconds ago, max is $max_image_delay\n" ); + if ( $image_delay > $max_image_delay ) + { + Info( "Restarting analysis daemon for ".$monitor->{Name}.", time since last analysis $image_delay seconds ($now-$image_time)\n" ); + my $command = "zmdc.pl restart zma -m ".$monitor->{Id}; + runCommand( $command ); + } + } + } + } + # Prevent open handles building up if we have connect to shared memory + zmMemInvalidate( $monitor ); + } + sleep( ZM_WATCH_CHECK_INTERVAL ); +} +Info( "Watchdog exiting\n" ); +exit(); diff --git a/scripts/zmx10.pl b/scripts/zmx10.pl new file mode 100644 index 000000000..936e18889 --- /dev/null +++ b/scripts/zmx10.pl @@ -0,0 +1,675 @@ +#!/usr/bin/perl -wT +# +# ========================================================================== +# +# ZoneMinder X10 Control Script, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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. +# +# ========================================================================== +# +# This script controls the monitoring of the X10 interface and the consequent +# management of the ZM daemons based on the receipt of X10 signals. +# +use strict; +use bytes; + +# ========================================================================== +# +# These are the elements you can edit to suit your installation +# +# ========================================================================== + +use constant CAUSE_STRING => "X10"; # What gets written as the cause of any events + +# ========================================================================== +# +# Don't change anything below here +# +# ========================================================================== + +use lib '/usr/share/perl/5.14.2'; # Include custom perl install path +use ZoneMinder; +use POSIX; +use Socket; +use Getopt::Long; +use Data::Dumper; + +use constant SOCK_FILE => ZM_PATH_SOCKS.'/zmx10.sock'; + +$| = 1; + +$ENV{PATH} = '/bin:/usr/bin'; +$ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; +delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; + +sub Usage +{ + print( " +Usage: zmx10.pl -c ,--command= [-u ,--unit-code=] +Parameters are :- +-c , --command= - Command to issue, one of 'on','off','dim','bright','status','shutdown' +-u , --unit-code= - Unit code to act on required for all commands except 'status' (optional) and 'shutdown' +"); + exit( -1 ); +} + +logInit(); +logSetSignal(); + +my $command; +my $unit_code; + +if ( !GetOptions( 'command=s'=>\$command, 'unit-code=i'=>\$unit_code ) ) +{ + Usage(); +} + +die( "No command given" ) unless( $command ); +die( "No unit code given" ) unless( $unit_code || ($command =~ /(?:start|status|shutdown)/) ); + +if ( $command eq "start" ) +{ + X10Server::runServer(); + exit(); +} + +socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); + +my $saddr = sockaddr_un( SOCK_FILE ); + +if ( !connect( CLIENT, $saddr ) ) +{ + # The server isn't there + print( "Unable to connect, starting server\n" ); + close( CLIENT ); + + if ( my $cpid = fork() ) + { + # Parent process just sleep and fall through + sleep( 2 ); + logReinit(); + socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); + connect( CLIENT, $saddr ) or Fatal( "Can't connect: $!" ); + } + elsif ( defined($cpid) ) + { + setpgrp(); + + logReinit(); + X10Server::runServer(); + } + else + { + Fatal( "Can't fork: $!" ); + } +} +# The server is there, connect to it +#print( "Writing commands\n" ); +CLIENT->autoflush(); +my $message = "$command"; +$message .= ";$unit_code" if ( $unit_code ); +print( CLIENT $message ); +shutdown( CLIENT, 1 ); +while ( my $line = ) +{ + chomp( $line ); + print( "$line\n" ); +} +close( CLIENT ); +#print( "Finished writing, bye\n" ); +exit; + +# +# ========================================================================== +# +# This is the X10 Server package +# +# ========================================================================== +# +package X10Server; + +use strict; +use bytes; + +use ZoneMinder; +use POSIX; +use DBI; +use Socket; +use X10::ActiveHome; +use Data::Dumper; + +our $dbh; +our $x10; + +our %monitor_hash; +our %device_hash; +our %pending_tasks; + +sub runServer +{ + Info( "X10 server starting\n" ); + + socket( SERVER, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); + unlink( main::SOCK_FILE ); + my $saddr = sockaddr_un( main::SOCK_FILE ); + bind( SERVER, $saddr ) or Fatal( "Can't bind: $!" ); + listen( SERVER, SOMAXCONN ) or Fatal( "Can't listen: $!" ); + + $dbh = zmDbConnect(); + + $x10 = new X10::ActiveHome( port=>ZM_X10_DEVICE, house_code=>ZM_X10_HOUSE_CODE, debug=>0 ); + + loadTasks(); + + $x10->register_listener( \&x10listen ); + + my $rin = ''; + vec( $rin, fileno(SERVER),1) = 1; + vec( $rin, $x10->select_fds(),1) = 1; + my $timeout = 0.2; + #print( "F:".fileno(SERVER)."\n" ); + my $reload = undef; + my $reload_count = 0; + my $reload_limit = &ZM_X10_DB_RELOAD_INTERVAL / $timeout; + while( 1 ) + { + my $nfound = select( my $rout = $rin, undef, undef, $timeout ); + #print( "Off select, NF:$nfound, ER:$!\n" ); + #print( vec( $rout, fileno(SERVER),1)."\n" ); + #print( vec( $rout, $x10->select_fds(),1)."\n" ); + if ( $nfound > 0 ) + { + if ( vec( $rout, fileno(SERVER),1) ) + { + my $paddr = accept( CLIENT, SERVER ); + my $message = ; + + my ( $command, $unit_code ) = split( /;/, $message ); + + my $device; + if ( defined($unit_code) ) + { + if ( $unit_code < 1 || $unit_code > 16 ) + { + dPrint( ZoneMinder::Logger::ERROR, "Invalid unit code '$unit_code'\n" ); + next; + } + + $device = $device_hash{$unit_code}; + if ( !$device ) + { + $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), status=>'unknown' }; + } + } + + my $result; + if ( $command eq 'on' ) + { + $result = $device->{appliance}->on(); + } + elsif ( $command eq 'off' ) + { + $result = $device->{appliance}->off(); + } + #elsif ( $command eq 'dim' ) + #{ + #$result = $device->{appliance}->dim(); + #} + #elsif ( $command eq 'bright' ) + #{ + #$result = $device->{appliance}->bright(); + #} + elsif ( $command eq 'status' ) + { + if ( $device ) + { + dPrint( ZoneMinder::Logger::DEBUG, $unit_code." ".$device->{status}."\n" ); + } + else + { + foreach my $unit_code ( sort( keys(%device_hash) ) ) + { + my $device = $device_hash{$unit_code}; + dPrint( ZoneMinder::Logger::DEBUG, $unit_code." ".$device->{status}."\n" ); + } + } + } + elsif ( $command eq 'shutdown' ) + { + last; + } + else + { + dPrint( ZoneMinder::Logger::ERROR, "Invalid command '$command'\n" ); + } + if ( defined($result) ) + { + if ( 1 || $result ) + { + $device->{status} = uc($command); + dPrint( ZoneMinder::Logger::DEBUG, $device->{appliance}->address()." $command, ok\n" ); + #x10listen( new X10::Event( sprintf("%s %s", $device->{appliance}->address, uc($command) ) ) ); + } + else + { + dPrint( ZoneMinder::Logger::ERROR, $device->{appliance}->address()." $command, failed\n" ); + } + } + close( CLIENT ); + } + elsif ( vec( $rout, $x10->select_fds(),1) ) + { + $x10->handle_input(); + } + else + { + Fatal( "Bogus descriptor" ); + } + } + elsif ( $nfound < 0 ) + { + if ( $! != EINTR ) + { + Fatal( "Can't select: $!" ); + } + } + else + { + #print( "Select timed out\n" ); + # Check for state changes + foreach my $monitor_id ( sort(keys(%monitor_hash) ) ) + { + my $monitor = $monitor_hash{$monitor_id}; + my $state = zmGetMonitorState( $monitor ); + if ( !defined($state) ) + { + $reload = !undef; + next; + } + if ( defined( $monitor->{LastState} ) ) + { + my $task_list; + if ( ($state == STATE_ALARM || $state == STATE_ALERT) && ($monitor->{LastState} == STATE_IDLE || $monitor->{LastState} == STATE_TAPE) ) # Gone into alarm state + { + Debug( "Applying ON_list for $monitor_id\n" ); + $task_list = $monitor->{"ON_list"}; + } + elsif ( ($state == STATE_IDLE && $monitor->{LastState} != STATE_IDLE) || ($state == STATE_TAPE && $monitor->{LastState} != STATE_TAPE) ) # Come out of alarm state + { + Debug( "Applying OFF_list for $monitor_id\n" ); + $task_list = $monitor->{"OFF_list"}; + } + if ( $task_list ) + { + foreach my $task ( @$task_list ) + { + processTask( $task ); + } + } + } + $monitor->{LastState} = $state; + } + + # Check for pending tasks + my $now = time(); + foreach my $activation_time ( sort(keys(%pending_tasks) ) ) + { + last if ( $activation_time > $now ); + my $pending_list = $pending_tasks{$activation_time}; + foreach my $task ( @$pending_list ) + { + processTask( $task ); + } + delete( $pending_tasks{$activation_time} ); + } + if ( $reload || ++$reload_count >= $reload_limit ) + { + loadTasks(); + $reload = undef; + $reload_count = 0; + } + } + } + Info( "X10 server exiting\n" ); + close( SERVER ); + exit(); +} + +sub addToDeviceList +{ + my $unit_code = shift; + my $event = shift; + my $monitor = shift; + my $function = shift; + my $limit = shift; + + Debug( "Adding to device list, uc:$unit_code, ev:$event, mo:".$monitor->{Id}.", fu:$function, li:$limit\n" ); + my $device = $device_hash{$unit_code}; + if ( !$device ) + { + $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), status=>'unknown' }; + } + + my $task = { type=>"device", monitor=>$monitor, address=>$device->{appliance}->address(), function=>$function }; + if ( $limit ) + { + $task->{limit} = $limit + } + + my $task_list = $device->{$event."_list"}; + if ( !$task_list ) + { + $task_list = $device->{$event."_list"} = []; + } + push( @$task_list, $task ); +} + +sub addToMonitorList +{ + my $monitor = shift; + my $event = shift; + my $unit_code = shift; + my $function = shift; + my $limit = shift; + + Debug( "Adding to monitor list, uc:$unit_code, ev:$event, mo:".$monitor->{Id}.", fu:$function, li:$limit\n" ); + my $device = $device_hash{$unit_code}; + if ( !$device ) + { + $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), status=>'unknown' }; + } + + my $task = { type=>"monitor", device=>$device, id=>$monitor->{Id}, function=>$function }; + if ( $limit ) + { + $task->{limit} = $limit; + } + + my $task_list = $monitor->{$event."_list"}; + if ( !$task_list ) + { + $task_list = $monitor->{$event."_list"} = []; + } + push( @$task_list, $task ); +} + +sub loadTasks +{ + %monitor_hash = (); + + Debug( "Loading tasks\n" ); + # Clear out all old device task lists + foreach my $unit_code ( sort( keys(%device_hash) ) ) + { + my $device = $device_hash{$unit_code}; + $device->{ON_list} = []; + $device->{OFF_list} = []; + } + + my $sql = "select M.*,T.* from Monitors as M inner join TriggersX10 as T on (M.Id = T.MonitorId) where find_in_set( M.Function, 'Modect,Record,Mocord,Nodect' ) and M.Enabled = 1 and find_in_set( 'X10', M.Triggers )"; + my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + next if ( !zmMemVerify( $monitor ) ); # Check shared memory ok + + $monitor_hash{$monitor->{Id}} = $monitor; + + if ( $monitor->{Activation} ) + { + Debug( "$monitor->{Name} has active string '$monitor->{Activation}'\n" ); + foreach my $code_string ( split( /,/, $monitor->{Activation} ) ) + { + #Debug( "Code string: $code_string\n" ); + my ( $invert, $unit_code, $modifier, $limit ) = ( $code_string =~ /^([!~])?(\d+)(?:([+-])(\d+)?)?$/ ); + $limit = 0 if ( !$limit ); + if ( $unit_code ) + { + if ( !$modifier || $modifier eq '+' ) + { + addToDeviceList( $unit_code, "ON", $monitor, !$invert?"start_active":"stop_active", $limit ); + } + if ( !$modifier || $modifier eq '-' ) + { + addToDeviceList( $unit_code, "OFF", $monitor, !$invert?"stop_active":"start_active", $limit ); + } + } + } + } + if ( $monitor->{AlarmInput} ) + { + Debug( "$monitor->{Name} has alarm input string '$monitor->{AlarmInput}'\n" ); + foreach my $code_string ( split( /,/, $monitor->{AlarmInput} ) ) + { + #Debug( "Code string: $code_string\n" ); + my ( $invert, $unit_code, $modifier, $limit ) = ( $code_string =~ /^([!~])?(\d+)(?:([+-])(\d+)?)?$/ ); + $limit = 0 if ( !$limit ); + if ( $unit_code ) + { + if ( !$modifier || $modifier eq '+' ) + { + addToDeviceList( $unit_code, "ON", $monitor, !$invert?"start_alarm":"stop_alarm", $limit ); + } + if ( !$modifier || $modifier eq '-' ) + { + addToDeviceList( $unit_code, "OFF", $monitor, !$invert?"stop_alarm":"start_alarm", $limit ); + } + } + } + } + if ( $monitor->{AlarmOutput} ) + { + Debug( "$monitor->{Name} has alarm output string '$monitor->{AlarmOutput}'\n" ); + foreach my $code_string ( split( /,/, $monitor->{AlarmOutput} ) ) + { + #Debug( "Code string: $code_string\n" ); + my ( $invert, $unit_code, $modifier, $limit ) = ( $code_string =~ /^([!~])?(\d+)(?:([+-])(\d+)?)?$/ ); + $limit = 0 if ( !$limit ); + if ( $unit_code ) + { + if ( !$modifier || $modifier eq '+' ) + { + addToMonitorList( $monitor, "ON", $unit_code, !$invert?"on":"off", $limit ); + } + if ( !$modifier || $modifier eq '-' ) + { + addToMonitorList( $monitor, "OFF", $unit_code, !$invert?"off":"on", $limit ); + } + } + } + } + zmMemInvalidate( $monitor ); + } +} + +sub addPendingTask +{ + my $task = shift; + + # Check whether we are just extending a previous pending task + # and remove it if it's there + foreach my $activation_time ( sort(keys(%pending_tasks) ) ) + { + my $pending_list = $pending_tasks{$activation_time}; + my $new_pending_list = []; + foreach my $pending_task ( @$pending_list ) + { + if ( $task->{type} ne $pending_task->{type} ) + { + push( @$new_pending_list, $pending_task ) + } + elsif ( $task->{type} eq "device" ) + { + if (( $task->{monitor}->{Id} != $pending_task->{monitor}->{Id} ) + || ( $task->{function} ne $pending_task->{function} )) + { + push( @$new_pending_list, $pending_task ) + } + } + elsif ( $task->{type} eq "monitor" ) + { + if (( $task->{device}->{appliance}->unit_code() != $pending_task->{device}->{appliance}->unit_code() ) + || ( $task->{function} ne $pending_task->{function} )) + { + push( @$new_pending_list, $pending_task ) + } + } + } + if ( @$new_pending_list ) + { + $pending_tasks{$activation_time} = $new_pending_list; + } + else + { + delete( $pending_tasks{$activation_time} ); + } + } + + my $end_time = time() + $task->{limit}; + my $pending_list = $pending_tasks{$end_time}; + if ( !$pending_list ) + { + $pending_list = $pending_tasks{$end_time} = []; + } + my $pending_task; + if ( $task->{type} eq "device" ) + { + $pending_task = { type=>$task->{type}, monitor=>$task->{monitor}, function=>$task->{function} }; + $pending_task->{function} =~ s/start/stop/; + } + elsif ( $task->{type} eq "monitor" ) + { + $pending_task = { type=>$task->{type}, device=>$task->{device}, function=>$task->{function} }; + $pending_task->{function} =~ s/on/off/; + } + push( @$pending_list, $pending_task ); +} + +sub processTask +{ + my $task = shift; + + if ( $task->{type} eq "device" ) + { + my ( $instruction, $class ) = ( $task->{function} =~ /^(.+)_(.+)$/ ); + + if ( $class eq "active" ) + { + if ( $instruction eq "start" ) + { + zmMonitorEnable( $task->{monitor} ); + if ( $task->{limit} ) + { + addPendingTask( $task ); + } + } + elsif( $instruction eq "stop" ) + { + zmMonitorDisable( $task->{monitor} ); + } + } + elsif( $class eq "alarm" ) + { + if ( $instruction eq "start" ) + { + zmTriggerEventOn( $task->{monitor}, 0, main::CAUSE_STRING, $task->{address} ); + if ( $task->{limit} ) + { + addPendingTask( $task ); + } + } + elsif( $instruction eq "stop" ) + { + zmTriggerEventCancel( $task->{monitor} ); + } + } + } + elsif( $task->{type} eq "monitor" ) + { + if ( $task->{function} eq "on" ) + { + $task->{device}->{appliance}->on(); + if ( $task->{limit} ) + { + addPendingTask( $task ); + } + } + elsif ( $task->{function} eq "off" ) + { + $task->{device}->{appliance}->off(); + } + } +} + +sub dPrint +{ + my $dbg_level = shift; + if ( fileno(CLIENT) ) + { + print CLIENT @_ + } + if ( $dbg_level == ZoneMinder::Logger::DEBUG ) + { + Debug( @_ ); + } + elsif ( $dbg_level == ZoneMinder::Logger::INFO ) + { + Info( @_ ); + } + elsif ( $dbg_level == ZoneMinder::Logger::WARNING ) + { + Warning( @_ ); + } + elsif ( $dbg_level == ZoneMinder::Logger::ERROR ) + { + Error( @_ ); + } + elsif ( $dbg_level == ZoneMinder::Logger::FATAL ) + { + Fatal( @_ ); + } +} + +sub x10listen +{ + foreach my $event ( @_ ) + { + #print( Data::Dumper( $_ )."\n" ); + if ( $event->house_code() eq ZM_X10_HOUSE_CODE ) + { + my $unit_code = $event->unit_code(); + my $device = $device_hash{$unit_code}; + if ( !$device ) + { + $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), status=>'unknown' }; + } + next if ( $event->func() !~ /(?:ON|OFF)/ ); + $device->{status} = $event->func(); + my $task_list = $device->{$event->func()."_list"}; + if ( $task_list ) + { + foreach my $task ( @$task_list ) + { + processTask( $task ); + } + } + } + Info( "Got event - ".$event->as_string()."\n" ); + } +} + +1; diff --git a/src/.deps/zm.Po b/src/.deps/zm.Po new file mode 100644 index 000000000..aa5176d0d --- /dev/null +++ b/src/.deps/zm.Po @@ -0,0 +1,269 @@ +zm.o: zm.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: diff --git a/src/.deps/zm_box.Po b/src/.deps/zm_box.Po new file mode 100644 index 000000000..1846ae588 --- /dev/null +++ b/src/.deps/zm_box.Po @@ -0,0 +1,297 @@ +zm_box.o: zm_box.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_box.h zm_coord.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_box.h: + +zm_coord.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: diff --git a/src/.deps/zm_buffer.Po b/src/.deps/zm_buffer.Po new file mode 100644 index 000000000..15df85a25 --- /dev/null +++ b/src/.deps/zm_buffer.Po @@ -0,0 +1,275 @@ +zm_buffer.o: zm_buffer.cpp /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_buffer.h + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_buffer.h: diff --git a/src/.deps/zm_camera.Po b/src/.deps/zm_camera.Po new file mode 100644 index 000000000..e9ac27af4 --- /dev/null +++ b/src/.deps/zm_camera.Po @@ -0,0 +1,418 @@ +zm_camera.o: zm_camera.cpp zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_camera.h /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: diff --git a/src/.deps/zm_comms.Po b/src/.deps/zm_comms.Po new file mode 100644 index 000000000..42f6a4dd1 --- /dev/null +++ b/src/.deps/zm_comms.Po @@ -0,0 +1,439 @@ +zm_comms.o: zm_comms.cpp zm_comms.h zm_exception.h zm.h zm_config.h \ + ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/netdb.h /usr/include/netinet/in.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/rpc/netdb.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/netdb.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/sys/un.h /usr/include/string.h \ + /usr/include/c++/4.7/set /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h \ + /usr/include/x86_64-linux-gnu/sys/param.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/linux/param.h /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h /usr/include/netinet/tcp.h + +zm_comms.h: + +zm_exception.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/netdb.h: + +/usr/include/netinet/in.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/rpc/netdb.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/netdb.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/string.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/netinet/tcp.h: diff --git a/src/.deps/zm_config.Po b/src/.deps/zm_config.Po new file mode 100644 index 000000000..7301b983d --- /dev/null +++ b/src/.deps/zm_config.Po @@ -0,0 +1,310 @@ +zm_config.o: zm_config.cpp zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: diff --git a/src/.deps/zm_coord.Po b/src/.deps/zm_coord.Po new file mode 100644 index 000000000..2c657d78e --- /dev/null +++ b/src/.deps/zm_coord.Po @@ -0,0 +1,272 @@ +zm_coord.o: zm_coord.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_coord.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_coord.h: diff --git a/src/.deps/zm_db.Po b/src/.deps/zm_db.Po new file mode 100644 index 000000000..024e31879 --- /dev/null +++ b/src/.deps/zm_db.Po @@ -0,0 +1,285 @@ +zm_db.o: zm_db.cpp /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: diff --git a/src/.deps/zm_detector.Po b/src/.deps/zm_detector.Po new file mode 100644 index 000000000..c4097bcbb --- /dev/null +++ b/src/.deps/zm_detector.Po @@ -0,0 +1,548 @@ +zm_detector.o: zm_detector.cpp zm_detector.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc /usr/include/syslog.h \ + /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_image.h zm.h zm_config.h ../config.h zm_config_defines.h zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_jpeg.h /usr/include/setjmp.h jinclude.h \ + /root/zm/libjpeg-turbo-1.2.1/jconfig.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h + +zm_detector.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_image.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: diff --git a/src/.deps/zm_event.Po b/src/.deps/zm_event.Po new file mode 100644 index 000000000..708c0e478 --- /dev/null +++ b/src/.deps/zm_event.Po @@ -0,0 +1,758 @@ +zm_event.o: zm_event.cpp /usr/include/fcntl.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h /usr/include/arpa/inet.h \ + /usr/include/netinet/in.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/in.h \ + /usr/include/x86_64-linux-gnu/sys/un.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/sys/ipc.h \ + /usr/include/x86_64-linux-gnu/bits/ipctypes.h \ + /usr/include/x86_64-linux-gnu/bits/ipc.h \ + /usr/include/x86_64-linux-gnu/sys/msg.h \ + /usr/include/x86_64-linux-gnu/bits/msq.h /usr/include/getopt.h \ + /usr/include/glob.h zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/c++/4.7/map \ + /usr/include/c++/4.7/bits/stl_tree.h /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h zm_db.h \ + zm_time.h /usr/include/x86_64-linux-gnu/sys/time.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/libio.h \ + /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libavutil/attributes.h /usr/include/libavutil/avconfig.h \ + /usr/include/libavutil/mem.h /usr/include/libavutil/error.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/mathematics.h \ + /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_signal.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/execinfo.h \ + zm_event.h /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/c++/4.7/set /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + zm_poly.h zm_mem_utils.h zm_utils.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/zlib.h \ + /usr/include/zconf.h zm_stream.h zm_monitor.h \ + /usr/include/c++/4.7/sstream /usr/include/c++/4.7/istream \ + /usr/include/c++/4.7/ios /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_zone.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h zmf.h \ + /usr/include/x86_64-linux-gnu/sys/sendfile.h + +/usr/include/fcntl.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/arpa/inet.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/ipc.h: + +/usr/include/x86_64-linux-gnu/bits/ipctypes.h: + +/usr/include/x86_64-linux-gnu/bits/ipc.h: + +/usr/include/x86_64-linux-gnu/sys/msg.h: + +/usr/include/x86_64-linux-gnu/bits/msq.h: + +/usr/include/getopt.h: + +/usr/include/glob.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +zm_db.h: + +zm_time.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/execinfo.h: + +zm_event.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_stream.h: + +zm_monitor.h: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_zone.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: + +zmf.h: + +/usr/include/x86_64-linux-gnu/sys/sendfile.h: diff --git a/src/.deps/zm_exception.Po b/src/.deps/zm_exception.Po new file mode 100644 index 000000000..d726ff59f --- /dev/null +++ b/src/.deps/zm_exception.Po @@ -0,0 +1,271 @@ +zm_exception.o: zm_exception.cpp zm_exception.h zm.h zm_config.h \ + ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h + +zm_exception.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: diff --git a/src/.deps/zm_ffmpeg.Po b/src/.deps/zm_ffmpeg.Po new file mode 100644 index 000000000..98bf6cb96 --- /dev/null +++ b/src/.deps/zm_ffmpeg.Po @@ -0,0 +1 @@ +zm_ffmpeg.o: zm_ffmpeg.cpp diff --git a/src/.deps/zm_ffmpeg_camera.Po b/src/.deps/zm_ffmpeg_camera.Po new file mode 100644 index 000000000..2045c0670 --- /dev/null +++ b/src/.deps/zm_ffmpeg_camera.Po @@ -0,0 +1,516 @@ +zm_ffmpeg_camera.o: zm_ffmpeg_camera.cpp zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_ffmpeg_camera.h zm_camera.h /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_buffer.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/libavutil/attributes.h /usr/include/libavutil/avconfig.h \ + /usr/include/libavutil/mem.h /usr/include/libavutil/error.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/mathematics.h \ + /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_ffmpeg_camera.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_buffer.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: diff --git a/src/.deps/zm_file_camera.Po b/src/.deps/zm_file_camera.Po new file mode 100644 index 000000000..80f377c6a --- /dev/null +++ b/src/.deps/zm_file_camera.Po @@ -0,0 +1,498 @@ +zm_file_camera.o: zm_file_camera.cpp /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/syslog.h \ + /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_file_camera.h zm_camera.h /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/zlib.h \ + /usr/include/zconf.h zm_buffer.h zm_regexp.h /usr/include/pcre.h \ + /usr/include/x86_64-linux-gnu/sys/param.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/linux/param.h /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_file_camera.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_buffer.h: + +zm_regexp.h: + +/usr/include/pcre.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: diff --git a/src/.deps/zm_image.Po b/src/.deps/zm_image.Po new file mode 100644 index 000000000..3e0f05e9e --- /dev/null +++ b/src/.deps/zm_image.Po @@ -0,0 +1,399 @@ +zm_image.o: zm_image.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_font.h zm_image.h zm_jpeg.h /usr/include/setjmp.h jinclude.h \ + /root/zm/libjpeg-turbo-1.2.1/jconfig.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_font.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: diff --git a/src/.deps/zm_image_analyser.Po b/src/.deps/zm_image_analyser.Po new file mode 100644 index 000000000..af11ee9b9 --- /dev/null +++ b/src/.deps/zm_image_analyser.Po @@ -0,0 +1,627 @@ +zm_image_analyser.o: zm_image_analyser.cpp zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/stl_list.h /usr/include/c++/4.7/bits/list.tcc \ + /usr/include/c++/4.7/string /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/postypes.h /usr/include/c++/4.7/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc \ + /usr/include/c++/4.7/stdexcept /usr/include/c++/4.7/iostream \ + /usr/include/c++/4.7/ostream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc \ + /usr/include/c++/4.7/bits/ostream.tcc /usr/include/c++/4.7/istream \ + /usr/include/c++/4.7/bits/istream.tcc /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm.h zm_config.h ../config.h \ + zm_config_defines.h zm_logger.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_detector.h /usr/include/syslog.h \ + /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_image.h zm_jpeg.h /usr/include/setjmp.h jinclude.h \ + /root/zm/libjpeg-turbo-1.2.1/jconfig.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: diff --git a/src/.deps/zm_jpeg.Po b/src/.deps/zm_jpeg.Po new file mode 100644 index 000000000..6baed7c19 --- /dev/null +++ b/src/.deps/zm_jpeg.Po @@ -0,0 +1,295 @@ +zm_jpeg.o: zm_jpeg.cpp zm_jpeg.h /usr/include/setjmp.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h jinclude.h \ + /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_logger.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc /usr/include/c++/4.7/map \ + /usr/include/c++/4.7/bits/stl_tree.h /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h + +zm_jpeg.h: + +/usr/include/setjmp.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: diff --git a/src/.deps/zm_local_camera.Po b/src/.deps/zm_local_camera.Po new file mode 100644 index 000000000..272154c08 --- /dev/null +++ b/src/.deps/zm_local_camera.Po @@ -0,0 +1,563 @@ +zm_local_camera.o: zm_local_camera.cpp zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_local_camera.h zm_camera.h /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h /usr/include/linux/videodev2.h \ + /usr/include/linux/types.h /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/libavutil/attributes.h /usr/include/libavutil/avconfig.h \ + /usr/include/libavutil/mem.h /usr/include/libavutil/error.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/mathematics.h \ + /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_local_camera.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +/usr/include/linux/videodev2.h: + +/usr/include/linux/types.h: + +/usr/include/x86_64-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/x86_64-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/x86_64-linux-gnu/asm/posix_types.h: + +/usr/include/x86_64-linux-gnu/asm/posix_types_64.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: diff --git a/src/.deps/zm_logger.Po b/src/.deps/zm_logger.Po new file mode 100644 index 000000000..015a50955 --- /dev/null +++ b/src/.deps/zm_logger.Po @@ -0,0 +1,370 @@ +zm_logger.o: zm_logger.cpp zm_logger.h /usr/include/unistd.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/xlocale.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc /usr/include/c++/4.7/map \ + /usr/include/c++/4.7/bits/stl_tree.h /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h zm_config.h \ + ../config.h zm_config_defines.h zm_utils.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/syslog.h \ + /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/syscall.h \ + /usr/include/x86_64-linux-gnu/sys/syscall.h \ + /usr/include/x86_64-linux-gnu/asm/unistd.h \ + /usr/include/x86_64-linux-gnu/asm/unistd_64.h \ + /usr/include/x86_64-linux-gnu/bits/syscall.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/syscall.h: + +/usr/include/x86_64-linux-gnu/sys/syscall.h: + +/usr/include/x86_64-linux-gnu/asm/unistd.h: + +/usr/include/x86_64-linux-gnu/asm/unistd_64.h: + +/usr/include/x86_64-linux-gnu/bits/syscall.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: diff --git a/src/.deps/zm_monitor.Po b/src/.deps/zm_monitor.Po new file mode 100644 index 000000000..f5109b778 --- /dev/null +++ b/src/.deps/zm_monitor.Po @@ -0,0 +1,813 @@ +zm_monitor.o: zm_monitor.cpp /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/arpa/inet.h \ + /usr/include/netinet/in.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/glob.h zm.h \ + zm_config.h ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h zm_db.h \ + zm_time.h /usr/include/x86_64-linux-gnu/sys/time.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/libio.h \ + /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_signal.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/execinfo.h \ + zm_monitor.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/c++/4.7/sstream \ + /usr/include/c++/4.7/istream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_coord.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_box.h zm_poly.h \ + zm_mem_utils.h zm_utils.h /usr/include/zlib.h /usr/include/zconf.h \ + zm_zone.h zm_event.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h zm_local_camera.h \ + /usr/include/linux/videodev2.h /usr/include/linux/types.h \ + /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h zm_remote_camera.h \ + /usr/include/netdb.h /usr/include/rpc/netdb.h \ + /usr/include/x86_64-linux-gnu/bits/netdb.h zm_remote_camera_http.h \ + zm_buffer.h zm_regexp.h /usr/include/pcre.h zm_remote_camera_rtsp.h \ + zm_rtsp.h zm_comms.h zm_exception.h zm_thread.h zm_rtp_source.h \ + zm_file_camera.h zm_ffmpeg_camera.h \ + /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/arpa/inet.h: + +/usr/include/netinet/in.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/glob.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +zm_db.h: + +zm_time.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/execinfo.h: + +zm_monitor.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_coord.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_box.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: + +zm_local_camera.h: + +/usr/include/linux/videodev2.h: + +/usr/include/linux/types.h: + +/usr/include/x86_64-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/x86_64-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/x86_64-linux-gnu/asm/posix_types.h: + +/usr/include/x86_64-linux-gnu/asm/posix_types_64.h: + +zm_remote_camera.h: + +/usr/include/netdb.h: + +/usr/include/rpc/netdb.h: + +/usr/include/x86_64-linux-gnu/bits/netdb.h: + +zm_remote_camera_http.h: + +zm_buffer.h: + +zm_regexp.h: + +/usr/include/pcre.h: + +zm_remote_camera_rtsp.h: + +zm_rtsp.h: + +zm_comms.h: + +zm_exception.h: + +zm_thread.h: + +zm_rtp_source.h: + +zm_file_camera.h: + +zm_ffmpeg_camera.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: diff --git a/src/.deps/zm_mpeg.Po b/src/.deps/zm_mpeg.Po new file mode 100644 index 000000000..26750ac9d --- /dev/null +++ b/src/.deps/zm_mpeg.Po @@ -0,0 +1,430 @@ +zm_mpeg.o: zm_mpeg.cpp /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_rgb.h zm_mpeg.h zm_ffmpeg.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/common.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/libio.h \ + /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/libavutil/attributes.h /usr/include/libavutil/avconfig.h \ + /usr/include/libavutil/mem.h /usr/include/libavutil/error.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/mathematics.h \ + /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_rgb.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: diff --git a/src/.deps/zm_plugin.Po b/src/.deps/zm_plugin.Po new file mode 100644 index 000000000..2a1b5978a --- /dev/null +++ b/src/.deps/zm_plugin.Po @@ -0,0 +1,298 @@ +zm_plugin.o: zm_plugin.cpp zm_plugin.h /usr/include/stdlib.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h \ + /usr/include/c++/4.7/stdexcept /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/string /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm.h zm_config.h ../config.h \ + zm_config_defines.h zm_logger.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h + +zm_plugin.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: diff --git a/src/.deps/zm_plugin_manager.Po b/src/.deps/zm_plugin_manager.Po new file mode 100644 index 000000000..5c93a9603 --- /dev/null +++ b/src/.deps/zm_plugin_manager.Po @@ -0,0 +1,655 @@ +zm_plugin_manager.o: zm_plugin_manager.cpp zm_plugin_manager.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc /usr/include/c++/4.7/map \ + /usr/include/c++/4.7/bits/stl_tree.h /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h /usr/include/x86_64-linux-gnu/sys/param.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/linux/param.h /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h zm.h \ + zm_config.h ../config.h zm_config_defines.h zm_logger.h \ + /usr/include/mysql/mysql.h /usr/include/mysql/mysql_version.h \ + /usr/include/mysql/mysql_com.h /usr/include/mysql/mysql_time.h \ + /usr/include/mysql/my_list.h /usr/include/mysql/typelib.h \ + /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_image_analyser.h /usr/include/c++/4.7/list \ + /usr/include/c++/4.7/bits/stl_list.h /usr/include/c++/4.7/bits/list.tcc \ + /usr/include/c++/4.7/stdexcept /usr/include/c++/4.7/iostream \ + /usr/include/c++/4.7/ostream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc \ + /usr/include/c++/4.7/bits/ostream.tcc /usr/include/c++/4.7/istream \ + /usr/include/c++/4.7/bits/istream.tcc /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_image.h zm_jpeg.h /usr/include/setjmp.h jinclude.h \ + /root/zm/libjpeg-turbo-1.2.1/jconfig.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h + +zm_plugin_manager.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +zm_logger.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: diff --git a/src/.deps/zm_poly.Po b/src/.deps/zm_poly.Po new file mode 100644 index 000000000..7a39ab09f --- /dev/null +++ b/src/.deps/zm_poly.Po @@ -0,0 +1,299 @@ +zm_poly.o: zm_poly.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_poly.h zm_coord.h zm_box.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_poly.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: diff --git a/src/.deps/zm_regexp.Po b/src/.deps/zm_regexp.Po new file mode 100644 index 000000000..32df8b282 --- /dev/null +++ b/src/.deps/zm_regexp.Po @@ -0,0 +1,287 @@ +zm_regexp.o: zm_regexp.cpp /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_regexp.h /usr/include/pcre.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_regexp.h: + +/usr/include/pcre.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: diff --git a/src/.deps/zm_remote_camera.Po b/src/.deps/zm_remote_camera.Po new file mode 100644 index 000000000..c11683838 --- /dev/null +++ b/src/.deps/zm_remote_camera.Po @@ -0,0 +1,463 @@ +zm_remote_camera.o: zm_remote_camera.cpp zm_remote_camera.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_image.h zm.h \ + zm_config.h ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/xlocale.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_jpeg.h /usr/include/setjmp.h jinclude.h \ + /root/zm/libjpeg-turbo-1.2.1/jconfig.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h /usr/include/netdb.h \ + /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/rpc/netdb.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/netdb.h + +zm_remote_camera.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_image.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +/usr/include/netdb.h: + +/usr/include/netinet/in.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/rpc/netdb.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/netdb.h: diff --git a/src/.deps/zm_remote_camera_http.Po b/src/.deps/zm_remote_camera_http.Po new file mode 100644 index 000000000..acb25bffe --- /dev/null +++ b/src/.deps/zm_remote_camera_http.Po @@ -0,0 +1,473 @@ +zm_remote_camera_http.o: zm_remote_camera_http.cpp \ + zm_remote_camera_http.h zm_remote_camera.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_image.h zm.h \ + zm_config.h ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/xlocale.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_jpeg.h /usr/include/setjmp.h jinclude.h \ + /root/zm/libjpeg-turbo-1.2.1/jconfig.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h /usr/include/netdb.h \ + /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/rpc/netdb.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/netdb.h zm_buffer.h zm_regexp.h \ + /usr/include/pcre.h + +zm_remote_camera_http.h: + +zm_remote_camera.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_image.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +/usr/include/netdb.h: + +/usr/include/netinet/in.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/rpc/netdb.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/netdb.h: + +zm_buffer.h: + +zm_regexp.h: + +/usr/include/pcre.h: diff --git a/src/.deps/zm_remote_camera_rtsp.Po b/src/.deps/zm_remote_camera_rtsp.Po new file mode 100644 index 000000000..dcf666cd4 --- /dev/null +++ b/src/.deps/zm_remote_camera_rtsp.Po @@ -0,0 +1,582 @@ +zm_remote_camera_rtsp.o: zm_remote_camera_rtsp.cpp zm.h zm_config.h \ + ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_remote_camera_rtsp.h zm_remote_camera.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_coord.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h /usr/include/netdb.h \ + /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/rpc/netdb.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/netdb.h zm_buffer.h zm_rtsp.h \ + zm_ffmpeg.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/common.h /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/libavutil/attributes.h /usr/include/libavutil/avconfig.h \ + /usr/include/libavutil/mem.h /usr/include/libavutil/error.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/mathematics.h \ + /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_comms.h zm_exception.h \ + /usr/include/x86_64-linux-gnu/sys/un.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_thread.h zm_rtp_source.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_remote_camera_rtsp.h: + +zm_remote_camera.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_coord.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +/usr/include/netdb.h: + +/usr/include/netinet/in.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/rpc/netdb.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/netdb.h: + +zm_buffer.h: + +zm_rtsp.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_comms.h: + +zm_exception.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_thread.h: + +zm_rtp_source.h: diff --git a/src/.deps/zm_rtp.Po b/src/.deps/zm_rtp.Po new file mode 100644 index 000000000..764741cb4 --- /dev/null +++ b/src/.deps/zm_rtp.Po @@ -0,0 +1,271 @@ +zm_rtp.o: zm_rtp.cpp zm_rtp.h zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h + +zm_rtp.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: diff --git a/src/.deps/zm_rtp_ctrl.Po b/src/.deps/zm_rtp_ctrl.Po new file mode 100644 index 000000000..d500e3568 --- /dev/null +++ b/src/.deps/zm_rtp_ctrl.Po @@ -0,0 +1,521 @@ +zm_rtp_ctrl.o: zm_rtp_ctrl.cpp zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_rtp_ctrl.h zm_rtp.h zm_comms.h zm_exception.h /usr/include/netdb.h \ + /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/rpc/netdb.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/netdb.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/sys/un.h /usr/include/string.h \ + /usr/include/c++/4.7/set /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc zm_thread.h zm_utils.h \ + /usr/include/x86_64-linux-gnu/sys/time.h zm_time.h zm_rtsp.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/libio.h \ + /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libavutil/attributes.h /usr/include/libavutil/avconfig.h \ + /usr/include/libavutil/mem.h /usr/include/libavutil/error.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/mathematics.h \ + /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_rtp_source.h zm_buffer.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_rtp_ctrl.h: + +zm_rtp.h: + +zm_comms.h: + +zm_exception.h: + +/usr/include/netdb.h: + +/usr/include/netinet/in.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/rpc/netdb.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/netdb.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/string.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +zm_thread.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +zm_time.h: + +zm_rtsp.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_rtp_source.h: + +zm_buffer.h: diff --git a/src/.deps/zm_rtp_data.Po b/src/.deps/zm_rtp_data.Po new file mode 100644 index 000000000..99ce87dec --- /dev/null +++ b/src/.deps/zm_rtp_data.Po @@ -0,0 +1,521 @@ +zm_rtp_data.o: zm_rtp_data.cpp zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_rtp_data.h zm_thread.h zm_exception.h zm_utils.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc zm_buffer.h /usr/include/string.h \ + zm_rtsp.h zm_ffmpeg.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/common.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/libio.h \ + /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libavutil/attributes.h /usr/include/libavutil/avconfig.h \ + /usr/include/libavutil/mem.h /usr/include/libavutil/error.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/mathematics.h \ + /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_comms.h /usr/include/netdb.h \ + /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/rpc/netdb.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/netdb.h \ + /usr/include/x86_64-linux-gnu/sys/un.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_rtp_source.h \ + /usr/include/arpa/inet.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_rtp_data.h: + +zm_thread.h: + +zm_exception.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +zm_buffer.h: + +/usr/include/string.h: + +zm_rtsp.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_comms.h: + +/usr/include/netdb.h: + +/usr/include/netinet/in.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/rpc/netdb.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/netdb.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_rtp_source.h: + +/usr/include/arpa/inet.h: diff --git a/src/.deps/zm_rtp_source.Po b/src/.deps/zm_rtp_source.Po new file mode 100644 index 000000000..60fae6d12 --- /dev/null +++ b/src/.deps/zm_rtp_source.Po @@ -0,0 +1,344 @@ +zm_rtp_source.o: zm_rtp_source.cpp zm_rtp_source.h zm_buffer.h zm.h \ + zm_config.h ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/string.h zm_thread.h zm_exception.h zm_utils.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc zm_time.h zm_rtp_data.h \ + /usr/include/arpa/inet.h /usr/include/netinet/in.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/in.h + +zm_rtp_source.h: + +zm_buffer.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/string.h: + +zm_thread.h: + +zm_exception.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +zm_time.h: + +zm_rtp_data.h: + +/usr/include/arpa/inet.h: + +/usr/include/netinet/in.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: diff --git a/src/.deps/zm_rtsp.Po b/src/.deps/zm_rtsp.Po new file mode 100644 index 000000000..c3688b036 --- /dev/null +++ b/src/.deps/zm_rtsp.Po @@ -0,0 +1,547 @@ +zm_rtsp.o: zm_rtsp.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_rtsp.h zm_ffmpeg.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/common.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/libio.h \ + /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_comms.h zm_exception.h \ + /usr/include/netdb.h /usr/include/netinet/in.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/in.h /usr/include/rpc/netdb.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/netdb.h \ + /usr/include/x86_64-linux-gnu/sys/un.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc zm_thread.h zm_utils.h \ + /usr/include/x86_64-linux-gnu/sys/time.h zm_rtp_source.h zm_buffer.h \ + zm_rtp_data.h zm_rtp_ctrl.h zm_rtp.h zm_db.h zm_sdp.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_rtsp.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_comms.h: + +zm_exception.h: + +/usr/include/netdb.h: + +/usr/include/netinet/in.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/rpc/netdb.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/netdb.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +zm_thread.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +zm_rtp_source.h: + +zm_buffer.h: + +zm_rtp_data.h: + +zm_rtp_ctrl.h: + +zm_rtp.h: + +zm_db.h: + +zm_sdp.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: diff --git a/src/.deps/zm_sdp.Po b/src/.deps/zm_sdp.Po new file mode 100644 index 000000000..0fa6d7d38 --- /dev/null +++ b/src/.deps/zm_sdp.Po @@ -0,0 +1,453 @@ +zm_sdp.o: zm_sdp.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_sdp.h zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc zm_exception.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/libio.h \ + /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_sdp.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +zm_exception.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: diff --git a/src/.deps/zm_signal.Po b/src/.deps/zm_signal.Po new file mode 100644 index 000000000..81f6b5829 --- /dev/null +++ b/src/.deps/zm_signal.Po @@ -0,0 +1,320 @@ +zm_signal.o: zm_signal.cpp zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_signal.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/execinfo.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/execinfo.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: diff --git a/src/.deps/zm_stream.Po b/src/.deps/zm_stream.Po new file mode 100644 index 000000000..863661909 --- /dev/null +++ b/src/.deps/zm_stream.Po @@ -0,0 +1,692 @@ +zm_stream.o: zm_stream.cpp /usr/include/x86_64-linux-gnu/sys/un.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h /usr/include/string.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_mpeg.h zm_ffmpeg.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/common.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/inttypes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h /usr/include/libio.h \ + /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libavutil/attributes.h /usr/include/libavutil/avconfig.h \ + /usr/include/libavutil/mem.h /usr/include/libavutil/error.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/mathematics.h \ + /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_monitor.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/c++/4.7/sstream \ + /usr/include/c++/4.7/istream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_coord.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_box.h zm_poly.h \ + zm_mem_utils.h zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/inttypes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_monitor.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_coord.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_box.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: diff --git a/src/.deps/zm_thread.Po b/src/.deps/zm_thread.Po new file mode 100644 index 000000000..8a5431b07 --- /dev/null +++ b/src/.deps/zm_thread.Po @@ -0,0 +1,341 @@ +zm_thread.o: zm_thread.cpp zm_thread.h /usr/include/unistd.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/pthread.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/sched.h \ + /usr/include/time.h /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h zm_exception.h zm.h \ + zm_config.h ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/string.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + zm_threaddata.cpp + +zm_thread.h: + +/usr/include/unistd.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/pthread.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +zm_exception.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/string.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +zm_threaddata.cpp: diff --git a/src/.deps/zm_time.Po b/src/.deps/zm_time.Po new file mode 100644 index 000000000..256f73978 --- /dev/null +++ b/src/.deps/zm_time.Po @@ -0,0 +1,274 @@ +zm_time.o: zm_time.cpp zm_time.h zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/sys/time.h + +zm_time.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: diff --git a/src/.deps/zm_timer.Po b/src/.deps/zm_timer.Po new file mode 100644 index 000000000..46f7e6e91 --- /dev/null +++ b/src/.deps/zm_timer.Po @@ -0,0 +1,300 @@ +zm_timer.o: zm_timer.cpp zm_timer.h zm_thread.h /usr/include/unistd.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/pthread.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/sched.h \ + /usr/include/time.h /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h zm_exception.h zm.h \ + zm_config.h ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc + +zm_timer.h: + +zm_thread.h: + +/usr/include/unistd.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/pthread.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +zm_exception.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: diff --git a/src/.deps/zm_user.Po b/src/.deps/zm_user.Po new file mode 100644 index 000000000..c04ac182e --- /dev/null +++ b/src/.deps/zm_user.Po @@ -0,0 +1,342 @@ +zm_user.o: zm_user.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h zm_user.h /usr/include/gnutls/openssl.h \ + /usr/include/gnutls/gnutls.h /usr/include/gnutls/compat.h \ + /usr/include/gcrypt.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/gpg-error.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/gcrypt-module.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: + +zm_user.h: + +/usr/include/gnutls/openssl.h: + +/usr/include/gnutls/gnutls.h: + +/usr/include/gnutls/compat.h: + +/usr/include/gcrypt.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/gpg-error.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/gcrypt-module.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: diff --git a/src/.deps/zm_utils.Po b/src/.deps/zm_utils.Po new file mode 100644 index 000000000..3d4ce2c45 --- /dev/null +++ b/src/.deps/zm_utils.Po @@ -0,0 +1,307 @@ +zm_utils.o: zm_utils.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/string.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/string.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: diff --git a/src/.deps/zm_zone.Po b/src/.deps/zm_zone.Po new file mode 100644 index 000000000..80a119ab8 --- /dev/null +++ b/src/.deps/zm_zone.Po @@ -0,0 +1,693 @@ +zm_zone.o: zm_zone.cpp zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/xlocale.h /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h zm_zone.h zm_rgb.h zm_coord.h zm_poly.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_mem_utils.h zm_utils.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_event.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_monitor.h \ + /usr/include/c++/4.7/sstream /usr/include/c++/4.7/istream \ + /usr/include/c++/4.7/ios /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: + +zm_zone.h: + +zm_rgb.h: + +zm_coord.h: + +zm_poly.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_event.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_monitor.h: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: diff --git a/src/.deps/zma.Po b/src/.deps/zma.Po new file mode 100644 index 000000000..6c508ba1c --- /dev/null +++ b/src/.deps/zma.Po @@ -0,0 +1,718 @@ +zma.o: zma.cpp /usr/include/getopt.h /usr/include/ctype.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h zm.h zm_config.h \ + ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/c++/4.7/map \ + /usr/include/c++/4.7/bits/stl_tree.h /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h zm_signal.h /usr/include/execinfo.h zm_monitor.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/c++/4.7/sstream \ + /usr/include/c++/4.7/istream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_coord.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: + +zm_signal.h: + +/usr/include/execinfo.h: + +zm_monitor.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_coord.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: diff --git a/src/.deps/zmc.Po b/src/.deps/zmc.Po new file mode 100644 index 000000000..311cdfb36 --- /dev/null +++ b/src/.deps/zmc.Po @@ -0,0 +1,726 @@ +zmc.o: zmc.cpp /usr/include/getopt.h /usr/include/ctype.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/values.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/float.h zm.h zm_config.h \ + ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/c++/4.7/map \ + /usr/include/c++/4.7/bits/stl_tree.h /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h zm_time.h /usr/include/x86_64-linux-gnu/sys/time.h zm_signal.h \ + /usr/include/execinfo.h zm_monitor.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/c++/4.7/sstream \ + /usr/include/c++/4.7/istream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_coord.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/string.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/values.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/float.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: + +zm_time.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +zm_signal.h: + +/usr/include/execinfo.h: + +zm_monitor.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_coord.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/string.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: diff --git a/src/.deps/zmf.Po b/src/.deps/zmf.Po new file mode 100644 index 000000000..cc2a60300 --- /dev/null +++ b/src/.deps/zmf.Po @@ -0,0 +1,722 @@ +zmf.o: zmf.cpp /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/sys/un.h /usr/include/string.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h zm.h zm_config.h \ + ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h zm_signal.h /usr/include/execinfo.h zm_monitor.h \ + /usr/include/c++/4.7/vector /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/c++/4.7/sstream \ + /usr/include/c++/4.7/istream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_coord.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h zm_mpeg.h \ + zm_ffmpeg.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/common.h /usr/include/inttypes.h \ + /usr/include/libavutil/attributes.h /usr/include/libavutil/avconfig.h \ + /usr/include/libavutil/mem.h /usr/include/libavutil/error.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/mathematics.h \ + /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h zmf.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/string.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: + +zm_signal.h: + +/usr/include/execinfo.h: + +zm_monitor.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_coord.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: + +zmf.h: diff --git a/src/.deps/zmfix.Po b/src/.deps/zmfix.Po new file mode 100644 index 000000000..28075c479 --- /dev/null +++ b/src/.deps/zmfix.Po @@ -0,0 +1,347 @@ +zmfix.o: zmfix.cpp /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h zm.h \ + zm_config.h ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: diff --git a/src/.deps/zms.Po b/src/.deps/zms.Po new file mode 100644 index 000000000..7d3f75494 --- /dev/null +++ b/src/.deps/zms.Po @@ -0,0 +1,754 @@ +zms.o: zms.cpp /usr/include/x86_64-linux-gnu/sys/ipc.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/ipctypes.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/include/x86_64-linux-gnu/bits/ipc.h \ + /usr/include/x86_64-linux-gnu/sys/msg.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/msq.h /usr/include/time.h zm.h \ + zm_config.h ../config.h zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/xlocale.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h zm_user.h /usr/include/gnutls/openssl.h \ + /usr/include/gnutls/gnutls.h /usr/include/gnutls/compat.h \ + /usr/include/gcrypt.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/gpg-error.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/gcrypt-module.h \ + zm_signal.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/execinfo.h \ + zm_monitor.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/c++/4.7/sstream \ + /usr/include/c++/4.7/istream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_coord.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h + +/usr/include/x86_64-linux-gnu/sys/ipc.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/ipctypes.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/x86_64-linux-gnu/bits/ipc.h: + +/usr/include/x86_64-linux-gnu/sys/msg.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/msq.h: + +/usr/include/time.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/xlocale.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: + +zm_user.h: + +/usr/include/gnutls/openssl.h: + +/usr/include/gnutls/gnutls.h: + +/usr/include/gnutls/compat.h: + +/usr/include/gcrypt.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/gpg-error.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/gcrypt-module.h: + +zm_signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/execinfo.h: + +zm_monitor.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_coord.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: diff --git a/src/.deps/zmstreamer.Po b/src/.deps/zmstreamer.Po new file mode 100644 index 000000000..0d72970cf --- /dev/null +++ b/src/.deps/zmstreamer.Po @@ -0,0 +1,753 @@ +zmstreamer.o: zmstreamer.cpp /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/sys/ipc.h \ + /usr/include/x86_64-linux-gnu/bits/ipctypes.h \ + /usr/include/x86_64-linux-gnu/bits/ipc.h \ + /usr/include/x86_64-linux-gnu/sys/msg.h \ + /usr/include/x86_64-linux-gnu/bits/msq.h zm.h zm_config.h ../config.h \ + zm_config_defines.h /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/ctype.h \ + /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/c++/4.7/map /usr/include/c++/4.7/bits/stl_tree.h \ + /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h zm_user.h /usr/include/gnutls/openssl.h \ + /usr/include/gnutls/gnutls.h /usr/include/gnutls/compat.h \ + /usr/include/gcrypt.h /usr/include/string.h /usr/include/gpg-error.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/gcrypt-module.h \ + zm_signal.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/execinfo.h \ + zm_monitor.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/c++/4.7/sstream \ + /usr/include/c++/4.7/istream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_coord.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/sys/ipc.h: + +/usr/include/x86_64-linux-gnu/bits/ipctypes.h: + +/usr/include/x86_64-linux-gnu/bits/ipc.h: + +/usr/include/x86_64-linux-gnu/sys/msg.h: + +/usr/include/x86_64-linux-gnu/bits/msq.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: + +zm_user.h: + +/usr/include/gnutls/openssl.h: + +/usr/include/gnutls/gnutls.h: + +/usr/include/gnutls/compat.h: + +/usr/include/gcrypt.h: + +/usr/include/string.h: + +/usr/include/gpg-error.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/gcrypt-module.h: + +zm_signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/execinfo.h: + +zm_monitor.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_coord.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: diff --git a/src/.deps/zmu.Po b/src/.deps/zmu.Po new file mode 100644 index 000000000..9608d5ee1 --- /dev/null +++ b/src/.deps/zmu.Po @@ -0,0 +1,771 @@ +zmu.o: zmu.cpp /usr/include/getopt.h /usr/include/ctype.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + zm.h zm_config.h ../config.h zm_config_defines.h \ + /usr/include/c++/4.7/string \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.7/bits/stringfwd.h \ + /usr/include/c++/4.7/bits/char_traits.h \ + /usr/include/c++/4.7/bits/stl_algobase.h \ + /usr/include/c++/4.7/bits/functexcept.h \ + /usr/include/c++/4.7/bits/exception_defines.h \ + /usr/include/c++/4.7/bits/cpp_type_traits.h \ + /usr/include/c++/4.7/ext/type_traits.h \ + /usr/include/c++/4.7/ext/numeric_traits.h \ + /usr/include/c++/4.7/bits/stl_pair.h /usr/include/c++/4.7/bits/move.h \ + /usr/include/c++/4.7/bits/concept_check.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.7/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.7/bits/stl_iterator.h \ + /usr/include/c++/4.7/debug/debug.h /usr/include/c++/4.7/bits/postypes.h \ + /usr/include/c++/4.7/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h \ + /usr/include/c++/4.7/bits/allocator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.7/ext/new_allocator.h /usr/include/c++/4.7/new \ + /usr/include/c++/4.7/exception \ + /usr/include/c++/4.7/bits/atomic_lockfree_defines.h \ + /usr/include/c++/4.7/bits/localefwd.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h \ + /usr/include/c++/4.7/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.7/iosfwd \ + /usr/include/c++/4.7/cctype /usr/include/c++/4.7/bits/ostream_insert.h \ + /usr/include/c++/4.7/bits/cxxabi_forced.h \ + /usr/include/c++/4.7/bits/stl_function.h \ + /usr/include/c++/4.7/backward/binders.h \ + /usr/include/c++/4.7/bits/range_access.h \ + /usr/include/c++/4.7/bits/basic_string.h \ + /usr/include/c++/4.7/ext/atomicity.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h \ + /usr/include/c++/4.7/bits/basic_string.tcc zm_logger.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/c++/4.7/map \ + /usr/include/c++/4.7/bits/stl_tree.h /usr/include/c++/4.7/bits/stl_map.h \ + /usr/include/c++/4.7/bits/stl_multimap.h /usr/include/mysql/mysql.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h /usr/include/stdint.h \ + zm_db.h zm_user.h /usr/include/gnutls/openssl.h \ + /usr/include/gnutls/gnutls.h /usr/include/gnutls/compat.h \ + /usr/include/gcrypt.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/string.h /usr/include/gpg-error.h \ + /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/gcrypt-module.h \ + zm_signal.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/execinfo.h \ + zm_monitor.h /usr/include/c++/4.7/vector \ + /usr/include/c++/4.7/bits/stl_construct.h \ + /usr/include/c++/4.7/ext/alloc_traits.h \ + /usr/include/c++/4.7/bits/stl_uninitialized.h \ + /usr/include/c++/4.7/bits/stl_vector.h \ + /usr/include/c++/4.7/bits/stl_bvector.h \ + /usr/include/c++/4.7/bits/vector.tcc /usr/include/c++/4.7/sstream \ + /usr/include/c++/4.7/istream /usr/include/c++/4.7/ios \ + /usr/include/c++/4.7/bits/ios_base.h \ + /usr/include/c++/4.7/bits/locale_classes.h \ + /usr/include/c++/4.7/bits/locale_classes.tcc \ + /usr/include/c++/4.7/streambuf /usr/include/c++/4.7/bits/streambuf.tcc \ + /usr/include/c++/4.7/bits/basic_ios.h \ + /usr/include/c++/4.7/bits/locale_facets.h /usr/include/c++/4.7/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h \ + /usr/include/c++/4.7/bits/streambuf_iterator.h \ + /usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h \ + /usr/include/c++/4.7/bits/locale_facets.tcc \ + /usr/include/c++/4.7/bits/basic_ios.tcc /usr/include/c++/4.7/ostream \ + /usr/include/c++/4.7/bits/ostream.tcc \ + /usr/include/c++/4.7/bits/istream.tcc \ + /usr/include/c++/4.7/bits/sstream.tcc zm_coord.h zm_image.h zm_jpeg.h \ + /usr/include/setjmp.h jinclude.h /root/zm/libjpeg-turbo-1.2.1/jconfig.h \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /root/zm/libjpeg-turbo-1.2.1/jpeglib.h \ + /root/zm/libjpeg-turbo-1.2.1/jmorecfg.h \ + /root/zm/libjpeg-turbo-1.2.1/jerror.h zm_rgb.h zm_box.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h zm_poly.h zm_mem_utils.h \ + zm_utils.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/zlib.h /usr/include/zconf.h zm_zone.h zm_event.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/c++/4.7/set \ + /usr/include/c++/4.7/bits/stl_set.h \ + /usr/include/c++/4.7/bits/stl_multiset.h zm_stream.h \ + /usr/include/x86_64-linux-gnu/sys/un.h zm_mpeg.h zm_ffmpeg.h \ + /usr/include/libavutil/avutil.h /usr/include/libavutil/common.h \ + /usr/include/inttypes.h /usr/include/libavutil/attributes.h \ + /usr/include/libavutil/avconfig.h /usr/include/libavutil/mem.h \ + /usr/include/libavutil/error.h /usr/include/libavutil/avutil.h \ + /usr/include/libavutil/mathematics.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/intfloat_readwrite.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavcodec/avcodec.h \ + /usr/include/libavutil/samplefmt.h /usr/include/libavutil/cpu.h \ + /usr/include/libavutil/dict.h /usr/include/libavutil/log.h \ + /usr/include/libavutil/pixfmt.h /usr/include/libavutil/rational.h \ + /usr/include/libavutil/audioconvert.h /usr/include/libavcodec/version.h \ + /usr/include/libavformat/avformat.h /usr/include/libavformat/avio.h \ + /usr/include/libavutil/common.h /usr/include/libavformat/version.h \ + /usr/include/libswscale/swscale.h zm_camera.h \ + /usr/include/x86_64-linux-gnu/sys/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctls.h \ + /usr/include/x86_64-linux-gnu/asm/ioctls.h \ + /usr/include/asm-generic/ioctls.h /usr/include/linux/ioctl.h \ + /usr/include/x86_64-linux-gnu/asm/ioctl.h \ + /usr/include/asm-generic/ioctl.h \ + /usr/include/x86_64-linux-gnu/bits/ioctl-types.h \ + /usr/include/x86_64-linux-gnu/sys/ttydefaults.h zm_plugin_manager.h \ + /usr/include/x86_64-linux-gnu/sys/dir.h /usr/include/dirent.h \ + /usr/include/x86_64-linux-gnu/bits/dirent.h \ + /usr/include/x86_64-linux-gnu/sys/param.h /usr/include/linux/param.h \ + /usr/include/x86_64-linux-gnu/asm/param.h \ + /usr/include/asm-generic/param.h zm_image_analyser.h \ + /usr/include/c++/4.7/list /usr/include/c++/4.7/bits/stl_list.h \ + /usr/include/c++/4.7/bits/list.tcc /usr/include/c++/4.7/stdexcept \ + /usr/include/c++/4.7/iostream /usr/include/c++/4.7/memory \ + /usr/include/c++/4.7/bits/stl_tempbuf.h \ + /usr/include/c++/4.7/bits/stl_raw_storage_iter.h \ + /usr/include/c++/4.7/backward/auto_ptr.h zm_detector.h \ + /usr/include/syslog.h /usr/include/x86_64-linux-gnu/sys/syslog.h \ + /usr/include/x86_64-linux-gnu/bits/syslog-path.h /usr/include/libgen.h \ + zm_plugin.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h zm_local_camera.h \ + /usr/include/linux/videodev2.h /usr/include/linux/types.h \ + /usr/include/x86_64-linux-gnu/asm/types.h \ + /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \ + /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ + /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \ + /usr/include/linux/stddef.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types.h \ + /usr/include/x86_64-linux-gnu/asm/posix_types_64.h + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +zm.h: + +zm_config.h: + +../config.h: + +zm_config_defines.h: + +/usr/include/c++/4.7/string: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.7/bits/stringfwd.h: + +/usr/include/c++/4.7/bits/char_traits.h: + +/usr/include/c++/4.7/bits/stl_algobase.h: + +/usr/include/c++/4.7/bits/functexcept.h: + +/usr/include/c++/4.7/bits/exception_defines.h: + +/usr/include/c++/4.7/bits/cpp_type_traits.h: + +/usr/include/c++/4.7/ext/type_traits.h: + +/usr/include/c++/4.7/ext/numeric_traits.h: + +/usr/include/c++/4.7/bits/stl_pair.h: + +/usr/include/c++/4.7/bits/move.h: + +/usr/include/c++/4.7/bits/concept_check.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.7/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.7/bits/stl_iterator.h: + +/usr/include/c++/4.7/debug/debug.h: + +/usr/include/c++/4.7/bits/postypes.h: + +/usr/include/c++/4.7/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stddef.h: + +/usr/include/c++/4.7/bits/allocator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.7/ext/new_allocator.h: + +/usr/include/c++/4.7/new: + +/usr/include/c++/4.7/exception: + +/usr/include/c++/4.7/bits/atomic_lockfree_defines.h: + +/usr/include/c++/4.7/bits/localefwd.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/c++locale.h: + +/usr/include/c++/4.7/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.7/iosfwd: + +/usr/include/c++/4.7/cctype: + +/usr/include/c++/4.7/bits/ostream_insert.h: + +/usr/include/c++/4.7/bits/cxxabi_forced.h: + +/usr/include/c++/4.7/bits/stl_function.h: + +/usr/include/c++/4.7/backward/binders.h: + +/usr/include/c++/4.7/bits/range_access.h: + +/usr/include/c++/4.7/bits/basic_string.h: + +/usr/include/c++/4.7/ext/atomicity.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/atomic_word.h: + +/usr/include/c++/4.7/bits/basic_string.tcc: + +zm_logger.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/c++/4.7/map: + +/usr/include/c++/4.7/bits/stl_tree.h: + +/usr/include/c++/4.7/bits/stl_map.h: + +/usr/include/c++/4.7/bits/stl_multimap.h: + +/usr/include/mysql/mysql.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include/stdint.h: + +/usr/include/stdint.h: + +zm_db.h: + +zm_user.h: + +/usr/include/gnutls/openssl.h: + +/usr/include/gnutls/gnutls.h: + +/usr/include/gnutls/compat.h: + +/usr/include/gcrypt.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/string.h: + +/usr/include/gpg-error.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/gcrypt-module.h: + +zm_signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/execinfo.h: + +zm_monitor.h: + +/usr/include/c++/4.7/vector: + +/usr/include/c++/4.7/bits/stl_construct.h: + +/usr/include/c++/4.7/ext/alloc_traits.h: + +/usr/include/c++/4.7/bits/stl_uninitialized.h: + +/usr/include/c++/4.7/bits/stl_vector.h: + +/usr/include/c++/4.7/bits/stl_bvector.h: + +/usr/include/c++/4.7/bits/vector.tcc: + +/usr/include/c++/4.7/sstream: + +/usr/include/c++/4.7/istream: + +/usr/include/c++/4.7/ios: + +/usr/include/c++/4.7/bits/ios_base.h: + +/usr/include/c++/4.7/bits/locale_classes.h: + +/usr/include/c++/4.7/bits/locale_classes.tcc: + +/usr/include/c++/4.7/streambuf: + +/usr/include/c++/4.7/bits/streambuf.tcc: + +/usr/include/c++/4.7/bits/basic_ios.h: + +/usr/include/c++/4.7/bits/locale_facets.h: + +/usr/include/c++/4.7/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_base.h: + +/usr/include/c++/4.7/bits/streambuf_iterator.h: + +/usr/include/c++/4.7/x86_64-linux-gnu/bits/ctype_inline.h: + +/usr/include/c++/4.7/bits/locale_facets.tcc: + +/usr/include/c++/4.7/bits/basic_ios.tcc: + +/usr/include/c++/4.7/ostream: + +/usr/include/c++/4.7/bits/ostream.tcc: + +/usr/include/c++/4.7/bits/istream.tcc: + +/usr/include/c++/4.7/bits/sstream.tcc: + +zm_coord.h: + +zm_image.h: + +zm_jpeg.h: + +/usr/include/setjmp.h: + +jinclude.h: + +/root/zm/libjpeg-turbo-1.2.1/jconfig.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/root/zm/libjpeg-turbo-1.2.1/jpeglib.h: + +/root/zm/libjpeg-turbo-1.2.1/jmorecfg.h: + +/root/zm/libjpeg-turbo-1.2.1/jerror.h: + +zm_rgb.h: + +zm_box.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +zm_poly.h: + +zm_mem_utils.h: + +zm_utils.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +zm_zone.h: + +zm_event.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/c++/4.7/set: + +/usr/include/c++/4.7/bits/stl_set.h: + +/usr/include/c++/4.7/bits/stl_multiset.h: + +zm_stream.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +zm_mpeg.h: + +zm_ffmpeg.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/common.h: + +/usr/include/inttypes.h: + +/usr/include/libavutil/attributes.h: + +/usr/include/libavutil/avconfig.h: + +/usr/include/libavutil/mem.h: + +/usr/include/libavutil/error.h: + +/usr/include/libavutil/avutil.h: + +/usr/include/libavutil/mathematics.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/intfloat_readwrite.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavcodec/avcodec.h: + +/usr/include/libavutil/samplefmt.h: + +/usr/include/libavutil/cpu.h: + +/usr/include/libavutil/dict.h: + +/usr/include/libavutil/log.h: + +/usr/include/libavutil/pixfmt.h: + +/usr/include/libavutil/rational.h: + +/usr/include/libavutil/audioconvert.h: + +/usr/include/libavcodec/version.h: + +/usr/include/libavformat/avformat.h: + +/usr/include/libavformat/avio.h: + +/usr/include/libavutil/common.h: + +/usr/include/libavformat/version.h: + +/usr/include/libswscale/swscale.h: + +zm_camera.h: + +/usr/include/x86_64-linux-gnu/sys/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctls.h: + +/usr/include/x86_64-linux-gnu/asm/ioctls.h: + +/usr/include/asm-generic/ioctls.h: + +/usr/include/linux/ioctl.h: + +/usr/include/x86_64-linux-gnu/asm/ioctl.h: + +/usr/include/asm-generic/ioctl.h: + +/usr/include/x86_64-linux-gnu/bits/ioctl-types.h: + +/usr/include/x86_64-linux-gnu/sys/ttydefaults.h: + +zm_plugin_manager.h: + +/usr/include/x86_64-linux-gnu/sys/dir.h: + +/usr/include/dirent.h: + +/usr/include/x86_64-linux-gnu/bits/dirent.h: + +/usr/include/x86_64-linux-gnu/sys/param.h: + +/usr/include/linux/param.h: + +/usr/include/x86_64-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +zm_image_analyser.h: + +/usr/include/c++/4.7/list: + +/usr/include/c++/4.7/bits/stl_list.h: + +/usr/include/c++/4.7/bits/list.tcc: + +/usr/include/c++/4.7/stdexcept: + +/usr/include/c++/4.7/iostream: + +/usr/include/c++/4.7/memory: + +/usr/include/c++/4.7/bits/stl_tempbuf.h: + +/usr/include/c++/4.7/bits/stl_raw_storage_iter.h: + +/usr/include/c++/4.7/backward/auto_ptr.h: + +zm_detector.h: + +/usr/include/syslog.h: + +/usr/include/x86_64-linux-gnu/sys/syslog.h: + +/usr/include/x86_64-linux-gnu/bits/syslog-path.h: + +/usr/include/libgen.h: + +zm_plugin.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: + +zm_local_camera.h: + +/usr/include/linux/videodev2.h: + +/usr/include/linux/types.h: + +/usr/include/x86_64-linux-gnu/asm/types.h: + +/usr/include/asm-generic/types.h: + +/usr/include/asm-generic/int-ll64.h: + +/usr/include/x86_64-linux-gnu/asm/bitsperlong.h: + +/usr/include/asm-generic/bitsperlong.h: + +/usr/include/linux/posix_types.h: + +/usr/include/linux/stddef.h: + +/usr/include/x86_64-linux-gnu/asm/posix_types.h: + +/usr/include/x86_64-linux-gnu/asm/posix_types_64.h: diff --git a/src/Makefile.am b/src/Makefile.am index abf6f90a3..d3ea70180 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,6 @@ AUTOMAKE_OPTIONS = gnu -AM_CPPFLAGS = @MYSQL_CFLAGS@ @FFMPEG_CFLAGS@ -Wall -Wno-sign-compare -fno-inline +AM_CPPFLAGS = @MYSQL_CFLAGS@ @FFMPEG_CFLAGS@ -Wall -finline-functions -fomit-frame-pointer #AM_CXXFLAGS = -frepo CLEANFILES = *.rpo @@ -58,7 +58,11 @@ zm_SOURCES = \ zm_timer.cpp \ zm_user.cpp \ zm_utils.cpp \ - zm_zone.cpp + zm_zone.cpp \ + zm_detector.cpp \ + zm_plugin.cpp \ + zm_plugin_manager.cpp \ + zm_image_analyser.cpp zmc_SOURCES = zmc.cpp $(zm_SOURCES) zma_SOURCES = zma.cpp $(zm_SOURCES) @@ -113,7 +117,11 @@ noinst_HEADERS = \ zm_timer.h \ zm_user.h \ zm_utils.h \ - zm_zone.h + zm_zone.h \ + zm_detector.h \ + zm_plugin.h \ + zm_plugin_manager.h \ + zm_image_analyser.h EXTRA_DIST = \ zm_config.h.in \ diff --git a/src/zm_buffer.cpp b/src/zm_buffer.cpp index 74c79f8dd..384f45bcc 100644 --- a/src/zm_buffer.cpp +++ b/src/zm_buffer.cpp @@ -43,9 +43,9 @@ unsigned int Buffer::expand( unsigned int count ) int headSpace = mHead - mStorage; int tailSpace = spare - headSpace; int width = mTail - mHead; - if ( spare > count ) + if ( spare > (int)count ) { - if ( tailSpace < count ) + if ( tailSpace < (int)count ) { memmove( mStorage, mHead, mSize ); mHead = mStorage; diff --git a/src/zm_config.h b/src/zm_config.h new file mode 100644 index 000000000..10928a82e --- /dev/null +++ b/src/zm_config.h @@ -0,0 +1,135 @@ +// +// ZoneMinder Configuration, $Date$, $Revision$ +// Copyright (C) 2001-2008 Philip Coombes +// +// 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. +// + +#ifndef ZM_CONFIG_H +#define ZM_CONFIG_H + +#include "config.h" +#include "zm_config_defines.h" + +#include + +#define ZM_CONFIG "/etc/zm/zm.conf" // Path to config file +#define ZM_VERSION "1.25.0" // ZoneMinder Version + +#define ZM_HAS_V4L1 0 +#define ZM_HAS_V4L2 1 +#define ZM_HAS_V4L 1 + +#ifdef HAVE_LIBAVFORMAT +#define ZM_HAS_FFMPEG 1 +#endif // HAVE_LIBAVFORMAT + +#define ZM_MAX_IMAGE_WIDTH 2048 // The largest image we imagine ever handling +#define ZM_MAX_IMAGE_HEIGHT 1536 // The largest image we imagine ever handling +#define ZM_MAX_IMAGE_COLOURS 4 // The largest image we imagine ever handling +#define ZM_MAX_IMAGE_DIM (ZM_MAX_IMAGE_WIDTH*ZM_MAX_IMAGE_HEIGHT) +#define ZM_MAX_IMAGE_SIZE (ZM_MAX_IMAGE_DIM*ZM_MAX_IMAGE_COLOURS) + +#define ZM_SCALE_BASE 100 // The factor by which we bump up 'scale' to simulate FP +#define ZM_RATE_BASE 100 // The factor by which we bump up 'rate' to simulate FP + +#define ZM_SQL_SML_BUFSIZ 256 // Size of SQL buffer +#define ZM_SQL_MED_BUFSIZ 1024 // Size of SQL buffer +#define ZM_SQL_LGE_BUFSIZ 8192 // Size of SQL buffer + +#define ZM_NETWORK_BUFSIZ 32768 // Size of network buffer + +#define ZM_MAX_FPS 30 // The maximum frame rate we expect to handle +#define ZM_SAMPLE_RATE int(1000000/ZM_MAX_FPS) // A general nyquist sample frequency for delays etc +#define ZM_SUSPENDED_RATE int(1000000/4) // A slower rate for when disabled etc + +extern void zmLoadConfig(); + +struct StaticConfig +{ + std::string DB_HOST; + std::string DB_NAME; + std::string DB_USER; + std::string DB_PASS; + std::string PATH_WEB; +}; + +extern StaticConfig staticConfig; + +class ConfigItem +{ +private: + char *name; + char *value; + char *type; + + mutable enum { CFG_BOOLEAN, CFG_INTEGER, CFG_DECIMAL, CFG_STRING } cfg_type; + mutable union + { + bool boolean_value; + int integer_value; + double decimal_value; + char *string_value; + } cfg_value; + mutable bool accessed; + +public: + ConfigItem( const char *p_name, const char *p_value, const char *const p_type ); + ~ConfigItem(); + void ConvertValue() const; + bool BooleanValue() const; + int IntegerValue() const; + double DecimalValue() const; + const char *StringValue() const; + + inline operator bool() const + { + return( BooleanValue() ); + } + inline operator int() const + { + return( IntegerValue() ); + } + inline operator double() const + { + return( DecimalValue() ); + } + inline operator const char *() const + { + return( StringValue() ); + } +}; + +class Config +{ +public: + ZM_CFG_DECLARE_LIST + +private: + int n_items; + ConfigItem **items; + +public: + Config(); + ~Config(); + + void Load(); + void Assign(); + const ConfigItem &Item( int id ); +}; + +extern Config config; + +#endif // ZM_CONFIG_H diff --git a/src/zm_config_defines.h b/src/zm_config_defines.h index 572ee589f..e16183ea9 100644 --- a/src/zm_config_defines.h +++ b/src/zm_config_defines.h @@ -217,9 +217,14 @@ #define ZM_EYEZM_H264_DEFAULT_EVBR 213 #define ZM_EYEZM_H264_TIMEOUT 214 #define ZM_EYEZM_SEG_DURATION 215 +#define ZM_PATH_PLUGINS 216 +#define ZM_PLUGIN_EXTENSION 217 +#define ZM_PLUGINS_CONFIG_PATH 218 +#define ZM_LOAD_PLUGINS 219 +#define ZM_TURNOFF_NATIVE_ANALYSIS 220 -#define ZM_MAX_CFG_ID 215 +#define ZM_MAX_CFG_ID 220 #define ZM_CFG_DECLARE_LIST \ const char *lang_default;\ @@ -438,6 +443,11 @@ const char *eyezm_h264_default_evbr;\ const char *eyezm_h264_timeout;\ const char *eyezm_seg_duration;\ + const char *path_plugins;\ + const char *plugin_extension;\ + const char *plugins_config_path;\ + bool load_plugins;\ + bool turnoff_native_analysis;\ #define ZM_CFG_ASSIGN_LIST \ @@ -657,5 +667,10 @@ eyezm_h264_default_evbr = (const char *)config.Item( ZM_EYEZM_H264_DEFAULT_EVBR );\ eyezm_h264_timeout = (const char *)config.Item( ZM_EYEZM_H264_TIMEOUT );\ eyezm_seg_duration = (const char *)config.Item( ZM_EYEZM_SEG_DURATION );\ + path_plugins = (const char *)config.Item( ZM_PATH_PLUGINS );\ + plugin_extension = (const char *)config.Item( ZM_PLUGIN_EXTENSION );\ + plugins_config_path = (const char *)config.Item( ZM_PLUGINS_CONFIG_PATH );\ + load_plugins = (bool)config.Item( ZM_LOAD_PLUGINS );\ + turnoff_native_analysis = (bool)config.Item( ZM_TURNOFF_NATIVE_ANALYSIS );\ diff --git a/src/zm_detector.cpp b/src/zm_detector.cpp new file mode 100644 index 000000000..0ec360c66 --- /dev/null +++ b/src/zm_detector.cpp @@ -0,0 +1,200 @@ +#include "zm_detector.h" + + + +/*!\fn Detector::Detector(const Detector& source) + * \param source is the object to copy + */ +Detector::Detector(const Detector& source) + : m_sDetectionCause(source.m_sDetectionCause), + m_fMinAlarmScore(source.m_fMinAlarmScore), + m_fMaxAlarmScore(source.m_fMaxAlarmScore), + m_fImageScaleFactor(source.m_fImageScaleFactor), + m_nNewWidth(source.m_nNewWidth), + m_nNewHeight(source.m_nNewHeight), + m_sLogPrefix(source.m_sLogPrefix), + m_sConfigSectionName(source.m_sConfigSectionName) +{ + //setlogmask (LOG_UPTO (LOG_LEVEL)); + //openlog(m_sLogPrefix.c_str(), LOG_PID|LOG_CONS, LOG_USER); +} + + + +/*!\fn Detector& ImageAnalyser::Detector::operator=(const ImageAnalyser::Detector& source) + * \param source is the object to copy + */ +Detector& Detector::operator=(const Detector& source) +{ + m_sDetectionCause = source.m_sDetectionCause; + m_fMinAlarmScore = source.m_fMinAlarmScore; + m_fMaxAlarmScore = source.m_fMaxAlarmScore; + m_fImageScaleFactor = source.m_fImageScaleFactor; + m_sLogPrefix = source.m_sLogPrefix; + m_nNewWidth = source.m_nNewWidth; + m_nNewHeight = source.m_nNewHeight; + m_sConfigSectionName = source.m_sConfigSectionName; + + //setlogmask (LOG_UPTO (LOG_LEVEL)); + //openlog(m_sLogPrefix.c_str(), LOG_PID|LOG_CONS, LOG_USER); + + return *this; +} + + + +/*!\fn Detector::getDetectionCause() + * return detection cause as string + */ +string Detector::getDetectionCause() +{ + return m_sDetectionCause; +} + + + + +/*! \fn Detector::log(int nLogLevel, string sMessage) + */ +void Detector::log(int nLogLevel, string sMessage) +{ + string sMessageToLog = m_sLogPrefix + string(" : ") + sMessage; + syslog(nLogLevel, "%s", sMessageToLog.c_str()); +} + + +//Detector::~Detector() {} + + + + +/*! \fn int FaceDetectorPlugin::Detect(const Image &image, Event::StringSet &zoneSet) + * \param image is an image to detect faces on + * \param zoneSet is set of zone names (see zm_zone.h) + * \return detection score + */ +int Detector::Detect(const Image &zmImage, Zone** zones, int n_numZones, Event::StringSet &zoneSet) +{ + //log(LOG_LEVEL, "Detection invoking."); + bool alarm = false; + char szMessage[50]; + unsigned int score = 0; + + if (n_numZones <= 0) return (alarm); + + +// // Blank out all exclusion zones +// for ( int n_zone = 0; n_zone < n_zones; n_zone++ ) +// { +// Zone *zone = zones[n_zone]; +// zone->ClearAlarm(); +// if ( !zone->IsInactive() ) +// { +// continue; +// } +// Debug( 3, "Blanking inactive zone %s", zone->Label() ); +// delta_image->Fill( RGB_BLACK, zone->GetPolygon() ); +// } + + // Check preclusive zones first + for (int n_zone = 0; n_zone < n_numZones; n_zone++) + { + Zone *zone = zones[n_zone]; + if (!zone->IsPreclusive()) + { + continue; + } + sprintf(szMessage, "Checking preclusive zone %s", zone->Label()); + log(LOG_DEBUG, szMessage); + if (checkZone(zone, &zmImage)) + { + alarm = true; + score += zone->Score(); + zone->SetAlarm(); + sprintf(szMessage, "Zone is alarmed, zone score = %d", zone->Score()); + log(LOG_DEBUG, szMessage); + zoneSet.insert(zone->Label()); + } + } + + if ( alarm ) + { + alarm = false; + score = 0; + } + else + { + // Find all alarm pixels in active zones + for (int n_zone = 0; n_zone < n_numZones; n_zone++) + { + Zone *zone = zones[n_zone]; + if (!zone->IsActive()) + { + continue; + } + //sprintf(szMessage, "Checking active zone %s", zone->Label()); + //log(LOG_DEBUG, szMessage); + if (checkZone(zone, &zmImage)) + { + alarm = true; + score += zone->Score(); + zone->SetAlarm(); + sprintf(szMessage, "Zone is alarmed, zone score = %d", zone->Score()); + log(LOG_DEBUG, szMessage); + zoneSet.insert(zone->Label()); + } + } + + if ( alarm ) + { + // Checking inclusive zones + for (int n_zone = 0; n_zone < n_numZones; n_zone++) + { + Zone *zone = zones[n_zone]; + if (!zone->IsInclusive()) + { + continue; + } + sprintf(szMessage, "Checking inclusive zone %s", zone->Label()); + log(LOG_DEBUG, szMessage); + if (checkZone(zone, &zmImage)) + { + alarm = true; + score += zone->Score(); + zone->SetAlarm(); + sprintf(szMessage, "Zone is alarmed, zone score = %d", zone->Score()); + log(LOG_DEBUG, szMessage); + zoneSet.insert(zone->Label()); + } + } + } + else + { + // Find all alarm pixels in exclusive zones + for (int n_zone = 0; n_zone < n_numZones; n_zone++) + { + Zone *zone = zones[n_zone]; + if (!zone->IsExclusive()) + { + continue; + } + sprintf(szMessage, "Checking exclusive zone %s", zone->Label()); + log(LOG_DEBUG, szMessage); + if (checkZone(zone, &zmImage)) + { + alarm = true; + score += zone->Score(); + zone->SetAlarm(); + sprintf(szMessage, "Zone is alarmed, zone score = %d", zone->Score()); + log(LOG_DEBUG, szMessage); + zoneSet.insert(zone->Label()); + } + } + } //else if(alarm) : exclusive + } //else if(alarm) + + + return(score?score:alarm); +} + + diff --git a/src/zm_detector.h b/src/zm_detector.h new file mode 100644 index 000000000..b1902577c --- /dev/null +++ b/src/zm_detector.h @@ -0,0 +1,129 @@ +#ifndef ZM_DETECTOR_H +#define ZM_DETECTOR_H + + +#include +#include +#include + +#include "zm_image.h" +#include "zm_zone.h" +#include "zm_event.h" + + + +#define DEFAULT_DETECTION_CAUSE "Object Detected" +#define DEFAULT_MIN_ALARM_SCORE 1.0 +#define DEFAULT_MAX_ALARM_SCORE 99.0 +#define DEFAULT_IMAGE_SCALE_FACTOR 1.0 + +#define DEFAULT_LOG_PREFIX "ZM PLUGIN" +#define LOG_LEVEL LOG_NOTICE +#define DEFAULT_CONFIGFILE_SECTION "libzm_vscvl_plugin" + +using namespace std; + + +//! Base class for object detectors, defined in plugins. +class Detector +{ + +public: + + //! Destructor + virtual ~Detector() { closelog(); } + + //! Default constructor + Detector() +{ + m_sLogPrefix = DEFAULT_LOG_PREFIX; + + //setlogmask (LOG_UPTO (LOG_LEVEL)); + //openlog(m_sLogPrefix.c_str(), LOG_PID|LOG_CONS, LOG_USER); + + m_sDetectionCause = DEFAULT_DETECTION_CAUSE; + m_fMinAlarmScore = DEFAULT_MIN_ALARM_SCORE; + m_fMaxAlarmScore = DEFAULT_MAX_ALARM_SCORE; + m_fImageScaleFactor = DEFAULT_IMAGE_SCALE_FACTOR; + m_sConfigSectionName = DEFAULT_CONFIGFILE_SECTION; + m_nNewWidth = 0; + m_nNewHeight = 0; +} + + //! Constructor with section name parameter. + Detector(string sPluginFileName) +{ + m_sLogPrefix = DEFAULT_LOG_PREFIX; + + char* szPluginFileName = strdup(sPluginFileName.c_str()); + + string sPluginFileNameName = string(basename(szPluginFileName)); + + size_t idx = sPluginFileNameName.rfind('.'); + + if (idx == string::npos) + m_sConfigSectionName = sPluginFileNameName; + else + m_sConfigSectionName = sPluginFileNameName.substr(0, idx); + + m_sDetectionCause = DEFAULT_DETECTION_CAUSE; + m_fMinAlarmScore = DEFAULT_MIN_ALARM_SCORE; + m_fMaxAlarmScore = DEFAULT_MAX_ALARM_SCORE; + m_fImageScaleFactor = DEFAULT_IMAGE_SCALE_FACTOR; + m_nNewWidth = 0; + m_nNewHeight = 0; +} + + //! Copy constructor + Detector(const Detector& source); + + //! Assignment operator + Detector& operator=(const Detector& source); + + //! Detect (in an image later) + int Detect(const Image &image, Zone** zones, int n_numZones, Event::StringSet &zoneSet); + + //! Load detector's parameters from a config file. + virtual void loadConfig(string sConfigFileName) = 0; + + //! Returns detection case string. + string getDetectionCause(); + +protected: + + //! Do detection inside one given zone. + virtual bool checkZone(Zone *zone, const Image *zmImage) = 0; + + //! Log messages to the SYSLOG. + void log(int, string sMessage); + + //! String to be shown as detection cause for event. + string m_sDetectionCause; + + //! Minimum score value to consider frame as to be alarmed. + double m_fMinAlarmScore; + + //! Maximum score value to consider frame as to be alarmed. + double m_fMaxAlarmScore; + + //! Maximum allowed width of frame image. + double m_fImageScaleFactor; + + //! Width of image to resize. + int m_nNewWidth; + + //! Height of image to resize. + int m_nNewHeight; +// +// //! Output stream for logging errors. +// ofstream m_outStream; + + //! String prefix for SYSLOG messages. + string m_sLogPrefix; + + //! Name of config file section to search parameters. + string m_sConfigSectionName; +}; + + +#endif // ZM_DETECTOR_H diff --git a/src/zm_event.cpp b/src/zm_event.cpp index 0fd203cdd..a43f31a66 100644 --- a/src/zm_event.cpp +++ b/src/zm_event.cpp @@ -107,7 +107,7 @@ Event::Event( Monitor *p_monitor, struct timeval p_start_time, const std::string char date_path[PATH_MAX] = ""; char time_path[PATH_MAX] = ""; char *time_path_ptr = time_path; - for ( int i = 0; i < sizeof(dt_parts)/sizeof(*dt_parts); i++ ) + for ( unsigned int i = 0; i < sizeof(dt_parts)/sizeof(*dt_parts); i++ ) { path_ptr += snprintf( path_ptr, sizeof(path)-(path_ptr-path), "/%02d", dt_parts[i] ); @@ -589,7 +589,7 @@ void Event::AddFrame( Image *image, struct timeval timestamp, int score, Image * alarm_frames++; tot_score += score; - if ( score > max_score ) + if ( score > (int)max_score ) max_score = score; if ( alarm_image ) @@ -683,7 +683,7 @@ bool EventStream::loadInitialEventData( int monitor_id, time_t event_time ) curr_frame_id = 1; if ( event_time >= event_data->start_time ) { - for ( int i = 0; i < event_data->frame_count; i++ ) + for (unsigned int i = 0; i < event_data->frame_count; i++ ) { //Info( "eft %d > et %d", event_data->frames[i].timestamp, event_time ); if ( event_data->frames[i].timestamp >= event_time ) @@ -1122,7 +1122,7 @@ void EventStream::checkEventLoaded() snprintf( sql, sizeof(sql), "select Id from Events where MonitorId = %ld and Id < %ld order by Id desc limit 1", event_data->monitor_id, event_data->event_id ); reload_event = true; } - else if ( curr_frame_id > event_data->frame_count ) + else if ( (unsigned int)curr_frame_id > event_data->frame_count ) { snprintf( sql, sizeof(sql), "select Id from Events where MonitorId = %ld and Id > %ld order by Id asc limit 1", event_data->monitor_id, event_data->event_id ); reload_event = true; diff --git a/src/zm_ffmpeg.h b/src/zm_ffmpeg.h index 7c5301638..059f88b39 100644 --- a/src/zm_ffmpeg.h +++ b/src/zm_ffmpeg.h @@ -37,12 +37,21 @@ extern "C" { #if HAVE_LIBSWSCALE #if HAVE_LIBSWSCALE_SWSCALE_H #include +#include // this is a fix for error: ‘av_rescale_q’ was not declared in this scope #endif #endif // HAVE_LIBSWSCALE #ifdef __cplusplus } #endif +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) + #if defined(AVIO_WRONLY) + #define AVIO_FLAG_WRITE AVIO_WRONLY + #else + #define AVIO_FLAG_WRITE URL_WRONLY + #endif +#endif + #if FFMPEG_VERSION_INT == 0x000408 #define ZM_FFMPEG_048 1 #elif FFMPEG_VERSION_INT == 0x000409 diff --git a/src/zm_ffmpeg_camera.cpp b/src/zm_ffmpeg_camera.cpp index 42927f6b1..c69907d9c 100644 --- a/src/zm_ffmpeg_camera.cpp +++ b/src/zm_ffmpeg_camera.cpp @@ -79,7 +79,11 @@ FfmpegCamera::~FfmpegCamera() } if ( mFormatContext ) { +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) av_close_input_file( mFormatContext ); +#else + avformat_close_input( &mFormatContext ); +#endif mFormatContext = NULL; } @@ -108,16 +112,24 @@ int FfmpegCamera::PrimeCapture() Info( "Priming capture from %s", mPath.c_str() ); // Open the input, not necessarily a file +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) if ( av_open_input_file( &mFormatContext, mPath.c_str(), NULL, 0, NULL ) !=0 ) +#else + if ( avformat_open_input( &mFormatContext, mPath.c_str(), NULL, NULL ) !=0 ) +#endif Fatal( "Unable to open input %s due to: %s", mPath.c_str(), strerror(errno) ); // Locate stream info from input +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) if ( av_find_stream_info( mFormatContext ) < 0 ) +#else + if ( avformat_find_stream_info( mFormatContext, 0 ) < 0 ) +#endif Fatal( "Unable to find stream info from %s due to: %s", mPath.c_str(), strerror(errno) ); // Find first video stream present mVideoStreamId = -1; - for ( int i=0; i < mFormatContext->nb_streams; i++ ) + for (unsigned int i=0; i < mFormatContext->nb_streams; i++ ) { #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) if ( mFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO ) @@ -139,7 +151,11 @@ int FfmpegCamera::PrimeCapture() Fatal( "Can't find codec for video stream from %s", mPath.c_str() ); // Open the codec +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 7, 0) if ( avcodec_open( mCodecContext, mCodec ) < 0 ) +#else + if ( avcodec_open2( mCodecContext, mCodec, 0 ) < 0 ) +#endif Fatal( "Unable to open codec for video stream from %s", mPath.c_str() ); // Allocate space for the native video frame @@ -152,7 +168,7 @@ int FfmpegCamera::PrimeCapture() Fatal( "Unable to allocate frame for %s", mPath.c_str() ); int pSize = avpicture_get_size( imagePixFormat, width, height ); - if( pSize != imagesize) { + if( (unsigned int)pSize != imagesize) { Fatal("Image size mismatch. Required: %d Available: %d",pSize,imagesize); } diff --git a/src/zm_image.cpp b/src/zm_image.cpp index 179baf8c8..829303f29 100644 --- a/src/zm_image.cpp +++ b/src/zm_image.cpp @@ -340,7 +340,7 @@ void Image::AssignDirect( const int p_width, const int p_height, const int p_col return; } - if(buffer_size < ((p_width*p_height)*p_colours)) { + if(buffer_size < (unsigned int)((p_width*p_height)*p_colours)) { Error("Attempt to directly assign buffer from an undersized buffer of size: %zu",buffer_size); return; } @@ -356,7 +356,7 @@ void Image::AssignDirect( const int p_width, const int p_height, const int p_col } if(holdbuffer && buffer) { - if(((p_height*p_width)*p_colours) > allocation) { + if((unsigned int)((p_height*p_width)*p_colours) > allocation) { Error("Held buffer is undersized for assigned buffer"); return; } else { @@ -668,7 +668,7 @@ bool Image::ReadJpeg( const char *filename, int p_colours, int p_subpixelorder) zm_use_std_huff_tables(cinfo); } - if ( cinfo->image_width != width || cinfo->image_height != height) + if ( cinfo->image_width != (unsigned int)width || cinfo->image_height != (unsigned int)height) { width = cinfo->image_width; height = cinfo->image_height; @@ -748,7 +748,7 @@ bool Image::ReadJpeg( const char *filename, int p_colours, int p_subpixelorder) if(buffer == NULL) { AllocImgBuffer(size); } else { - if(allocation < size) { + if(allocation < (unsigned int)size) { if(holdbuffer) { Error("Held buffer is undersized for the requested image"); return (false); @@ -920,7 +920,7 @@ bool Image::DecodeJpeg( const JOCTET *inbuffer, int inbuffer_size, int p_colours zm_use_std_huff_tables(cinfo); } - if ( cinfo->image_width != width || cinfo->image_height != height) + if ( cinfo->image_width != (unsigned int)width || cinfo->image_height != (unsigned int)height) { width = cinfo->image_width; height = cinfo->image_height; @@ -999,7 +999,7 @@ bool Image::DecodeJpeg( const JOCTET *inbuffer, int inbuffer_size, int p_colours if(buffer == NULL) { AllocImgBuffer(size); } else { - if(allocation < size) { + if(allocation < (unsigned int)size) { if(holdbuffer) { Error("Held buffer is undersized for the requested image"); return (false); @@ -1136,7 +1136,7 @@ bool Image::Unzip( const Bytef *inbuffer, unsigned long inbuffer_size ) Error( "Unzip failed, result = %d", result ); return( false ); } - if ( zip_size != size ) + if ( zip_size != (unsigned int)size ) { Error( "Unzip failed, size mismatch, expected %d bytes, got %ld", size, zip_size ); return( false ); @@ -1906,7 +1906,7 @@ void Image::Colourise(const int p_reqcolours, const int p_reqsubpixelorder) uint8_t *pdest = new_buffer; const uint8_t *psrc = buffer; - for(unsigned int i=0;i> 1; } } /* Special case for the last line */ pcurrent = buffer + ((height-1) * width); pabove = buffer + ((height-2) * width); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { *pcurrent++ = *pabove++; } } else if ( colours == ZM_COLOUR_RGB24 ) { - for (unsigned int y = 1; y < (height-1); y += 2) + for (unsigned int y = 1; y < (unsigned int)(height-1); y += 2) { pabove = buffer + (((y-1) * width) * 3); pbelow = buffer + (((y+1) * width) * 3); pcurrent = buffer + ((y * width) * 3); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { *pcurrent++ = (*pabove++ + *pbelow++) >> 1; *pcurrent++ = (*pabove++ + *pbelow++) >> 1; *pcurrent++ = (*pabove++ + *pbelow++) >> 1; @@ -2778,7 +2778,7 @@ void Image::Deinterlace_Linear() /* Special case for the last line */ pcurrent = buffer + (((height-1) * width) * 3); pabove = buffer + (((height-2) * width) * 3); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { *pcurrent++ = *pabove++; *pcurrent++ = *pabove++; *pcurrent++ = *pabove++; @@ -2786,12 +2786,12 @@ void Image::Deinterlace_Linear() } else if ( colours == ZM_COLOUR_RGB32 ) { - for (unsigned int y = 1; y < (height-1); y += 2) + for (unsigned int y = 1; y < (unsigned int)(height-1); y += 2) { pabove = buffer + (((y-1) * width) << 2); pbelow = buffer + (((y+1) * width) << 2); pcurrent = buffer + ((y * width) << 2); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { *pcurrent++ = (*pabove++ + *pbelow++) >> 1; *pcurrent++ = (*pabove++ + *pbelow++) >> 1; *pcurrent++ = (*pabove++ + *pbelow++) >> 1; @@ -2801,7 +2801,7 @@ void Image::Deinterlace_Linear() /* Special case for the last line */ pcurrent = buffer + (((height-1) * width) << 2); pabove = buffer + (((height-2) * width) << 2); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { *pcurrent++ = *pabove++; *pcurrent++ = *pabove++; *pcurrent++ = *pabove++; @@ -2821,11 +2821,11 @@ void Image::Deinterlace_Blend() if ( colours == ZM_COLOUR_GRAY8 ) { - for (unsigned int y = 1; y < height; y += 2) + for (unsigned int y = 1; y < (unsigned int)height; y += 2) { pabove = buffer + ((y-1) * width); pcurrent = buffer + (y * width); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { *pabove = (*pabove + *pcurrent) >> 1; *pcurrent++ = *pabove++; } @@ -2833,11 +2833,11 @@ void Image::Deinterlace_Blend() } else if ( colours == ZM_COLOUR_RGB24 ) { - for (unsigned int y = 1; y < height; y += 2) + for (unsigned int y = 1; y < (unsigned int)height; y += 2) { pabove = buffer + (((y-1) * width) * 3); pcurrent = buffer + ((y * width) * 3); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { *pabove = (*pabove + *pcurrent) >> 1; *pcurrent++ = *pabove++; *pabove = (*pabove + *pcurrent) >> 1; @@ -2849,11 +2849,11 @@ void Image::Deinterlace_Blend() } else if ( colours == ZM_COLOUR_RGB32 ) { - for (unsigned int y = 1; y < height; y += 2) + for (unsigned int y = 1; y < (unsigned int)height; y += 2) { pabove = buffer + (((y-1) * width) << 2); pcurrent = buffer + ((y * width) << 2); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { *pabove = (*pabove + *pcurrent) >> 1; *pcurrent++ = *pabove++; *pabove = (*pabove + *pcurrent) >> 1; @@ -2887,11 +2887,11 @@ void Image::Deinterlace_Blend_CustomRatio(int divider) if ( colours == ZM_COLOUR_GRAY8 ) { - for (unsigned int y = 1; y < height; y += 2) + for (unsigned int y = 1; y < (unsigned int)height; y += 2) { pabove = buffer + ((y-1) * width); pcurrent = buffer + (y * width); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { subpix1 = ((*pabove - *pcurrent)>>divider) + *pcurrent; subpix2 = ((*pcurrent - *pabove)>>divider) + *pabove; *pcurrent++ = subpix1; @@ -2901,11 +2901,11 @@ void Image::Deinterlace_Blend_CustomRatio(int divider) } else if ( colours == ZM_COLOUR_RGB24 ) { - for (unsigned int y = 1; y < height; y += 2) + for (unsigned int y = 1; y < (unsigned int)height; y += 2) { pabove = buffer + (((y-1) * width) * 3); pcurrent = buffer + ((y * width) * 3); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { subpix1 = ((*pabove - *pcurrent)>>divider) + *pcurrent; subpix2 = ((*pcurrent - *pabove)>>divider) + *pabove; *pcurrent++ = subpix1; @@ -2923,11 +2923,11 @@ void Image::Deinterlace_Blend_CustomRatio(int divider) } else if ( colours == ZM_COLOUR_RGB32 ) { - for (unsigned int y = 1; y < height; y += 2) + for (unsigned int y = 1; y < (unsigned int)height; y += 2) { pabove = buffer + (((y-1) * width) << 2); pcurrent = buffer + ((y * width) << 2); - for (unsigned int x = 0; x < width; x++) { + for (unsigned int x = 0; x < (unsigned int)width; x++) { subpix1 = ((*pabove - *pcurrent)>>divider) + *pcurrent; subpix2 = ((*pcurrent - *pabove)>>divider) + *pabove; *pcurrent++ = subpix1; @@ -4222,7 +4222,7 @@ __attribute__((noinline)) void std_deinterlace_4field_gray8(uint8_t* col1, uint8 { max_ptr2 = pcurrent + width; while(pcurrent < max_ptr2) { - if(((abs(*pnabove - *pabove) + abs(*pncurrent - *pcurrent)) >> 1) >= threshold) { + if((unsigned int)((abs(*pnabove - *pabove) + abs(*pncurrent - *pcurrent)) >> 1) >= threshold) { *pcurrent = (*pabove + *pbelow) >> 1; } pabove++; @@ -4242,7 +4242,7 @@ __attribute__((noinline)) void std_deinterlace_4field_gray8(uint8_t* col1, uint8 /* Special case for the last line */ max_ptr2 = pcurrent + width; while(pcurrent < max_ptr2) { - if(((abs(*pnabove - *pabove) + abs(*pncurrent - *pcurrent)) >> 1) >= threshold) { + if((unsigned int)((abs(*pnabove - *pabove) + abs(*pncurrent - *pcurrent)) >> 1) >= threshold) { *pcurrent = *pabove; } pabove++; diff --git a/src/zm_image_analyser.cpp b/src/zm_image_analyser.cpp new file mode 100644 index 000000000..ee598a5a6 --- /dev/null +++ b/src/zm_image_analyser.cpp @@ -0,0 +1,87 @@ +#include "zm_image_analyser.h" + + + +/*!\fn ImageAnalyser::ImageAnalyser(const ImageAnalyser& source) + * \param source is the object to copy + */ +ImageAnalyser::ImageAnalyser(const ImageAnalyser& source) +{ + m_Detectors = source.m_Detectors; +} + + + +/*!\fn ImageAnalyser::operator=(const ImageAnalyser& source) + * \param source is the object to copy + */ +ImageAnalyser& ImageAnalyser::operator=(const ImageAnalyser& source) +{ + m_Detectors = source.m_Detectors; + return *this; +} + + + +ImageAnalyser::~ImageAnalyser() +{ + for(DetectorsList::reverse_iterator It = m_Detectors.rbegin(); + It != m_Detectors.rend(); + ++It) + delete *It; +} + + + +/*!\fn ImageAnalyser::DoDetection(const Image &comp_image, Zone** zones, int n_numZones, Event::StringSetMap noteSetMap, std::string& det_cause) + * \param comp_image is the image to analyse + * \param zones is the zones array to analyse + * \param n_numZones is the number of zones + * \param noteSetMap is the map of events descriptions + * \param det_cause is a string describing detection cause + */ +int ImageAnalyser::DoDetection(const Image &comp_image, Zone** zones, int n_numZones, Event::StringSetMap noteSetMap, std::string& det_cause) +{ + Event::StringSet zoneSet; + int score = 0; + + for(DetectorsList::iterator It = m_Detectors.begin(); + It != m_Detectors.end(); + ++It) + { + int detect_score = (*It)->Detect(comp_image, zones, n_numZones, zoneSet); + if (detect_score) + { + score += detect_score; + noteSetMap[(*It)->getDetectionCause()] = zoneSet; + if (det_cause.length()) + det_cause += ", "; + det_cause += (*It)->getDetectionCause(); + } + } + return score; +} + + + +/*!\fn ImageAnalyser::configurePlugins(string sConfigFileName) + * \param sConfigFileName is the path to the configuration file, where parameters for all plugins are given. + */ +void ImageAnalyser::configurePlugins(string sConfigFileName) +{ + for(DetectorsList::iterator It = m_Detectors.begin(); + It != m_Detectors.end(); + ++It) + { + try + { + (*It)->loadConfig(sConfigFileName); + } + catch(...) + { + //Info("ERROR: Plugin \"%s\" couldn\'t load config file \"%s\".", (*It)->getDetectionCause().c_str(), sConfigFileName.c_str()); + Info("ERROR: Plugin couldn\'t load config file ."); + } + } + +} diff --git a/src/zm_image_analyser.h b/src/zm_image_analyser.h new file mode 100644 index 000000000..644e97fbf --- /dev/null +++ b/src/zm_image_analyser.h @@ -0,0 +1,65 @@ +#ifndef ZM_IMAGE_ANALYSER_H +#define ZM_IMAGE_ANALYSER_H + + + +#include +#include +#include +#include +#include + +#include "zm.h" +#include "zm_detector.h" +#include "zm_image.h" +#include "zm_zone.h" +#include "zm_event.h" + + + +using namespace std; + + +//! List of available detectors. +typedef std::list DetectorsList; + + +//! Class for handling image detection. +/*! Contains all detectors loaded from plugins. + */ +class ImageAnalyser { + public: + + //!Default constructor. + ImageAnalyser() {}; + + //! Destructor. + ~ImageAnalyser(); + + //! Copy constructor. + ImageAnalyser(const ImageAnalyser& source); + + //! Overloaded operator=. + ImageAnalyser& operator=(const ImageAnalyser& source); + + //! Adds new plugin's detector to the list of detectors. + void addDetector(std::auto_ptr Det) + { + m_Detectors.push_back(Det.release()); + } + + //! Do detection in an image by calling all available detectors. + int DoDetection(const Image &comp_image, Zone** zones, int n_numZones, Event::StringSetMap noteSetMap, std::string& det_cause); + + //! Configure all loaded plugins using given configuration file. + void configurePlugins(string sConfigFileName); + +private: + + //! All available detectors. + DetectorsList m_Detectors; +}; + + + +#endif //ZM_IMAGE_ANALYSER_H diff --git a/src/zm_local_camera.cpp b/src/zm_local_camera.cpp index dfcb495f4..04cf3f925 100644 --- a/src/zm_local_camera.cpp +++ b/src/zm_local_camera.cpp @@ -612,7 +612,7 @@ LocalCamera::LocalCamera( int p_id, const std::string &p_device, int p_channel, Fatal( "Could not allocate temporary picture" ); int pSize = avpicture_get_size( imagePixFormat, width, height ); - if( pSize != imagesize) { + if( (unsigned int)pSize != imagesize) { Fatal("Image size mismatch. Required: %d Available: %d",pSize,imagesize); } @@ -810,7 +810,7 @@ void LocalCamera::Initialise() #if HAVE_LIBSWSCALE capturePictures = new AVFrame *[v4l2_data.reqbufs.count]; #endif // HAVE_LIBSWSCALE - for ( int i = 0; i < v4l2_data.reqbufs.count; i++ ) + for ( unsigned int i = 0; i < v4l2_data.reqbufs.count; i++ ) { struct v4l2_buffer vid_buf; @@ -1048,12 +1048,13 @@ void LocalCamera::Terminate() { Debug( 3, "Terminating video stream" ); //enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + // enum v4l2_buf_type type = v4l2_data.fmt.type; enum v4l2_buf_type type = (v4l2_buf_type)v4l2_data.fmt.type; if ( vidioctl( vid_fd, VIDIOC_STREAMOFF, &type ) < 0 ) Error( "Failed to stop capture stream: %s", strerror(errno) ); Debug( 3, "Unmapping video buffers" ); - for ( int i = 0; i < v4l2_data.reqbufs.count; i++ ) { + for ( unsigned int i = 0; i < v4l2_data.reqbufs.count; i++ ) { #if HAVE_LIBSWSCALE /* Free capture pictures */ av_free(capturePictures[i]); @@ -1099,7 +1100,7 @@ uint32_t LocalCamera::AutoSelectFormat(int p_colours) { uint32_t fmt_fcc[64]; v4l2_fmtdesc fmtinfo; unsigned int nIndex = 0; - int nRet = 0; + //int nRet = 0; // compiler say it isn't used int enum_fd; /* Open the device */ @@ -1142,7 +1143,7 @@ uint32_t LocalCamera::AutoSelectFormat(int p_colours) { preferedformats = prefered_rgb24_formats; n_preferedformats = sizeof(prefered_rgb24_formats) / sizeof(uint32_t); } - for( unsigned int i=0; i < n_preferedformats && nIndexUsed < 0; i++ ) { + for( unsigned int i=0; i < (unsigned int)n_preferedformats && nIndexUsed < 0; i++ ) { for( unsigned int j=0; j < nIndex; j++ ) { if( preferedformats[i] == fmt_fcc[j] ) { /* Found a format! */ @@ -1914,7 +1915,7 @@ int LocalCamera::PrimeCapture() if ( v4l_version == 2 ) { Debug( 3, "Queueing buffers" ); - for ( int frame = 0; frame < v4l2_data.reqbufs.count; frame++ ) + for ( unsigned int frame = 0; frame < v4l2_data.reqbufs.count; frame++ ) { struct v4l2_buffer vid_buf; @@ -1931,6 +1932,7 @@ int LocalCamera::PrimeCapture() Debug( 3, "Starting video stream" ); //enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + //enum v4l2_buf_type type = v4l2_data.fmt.type; enum v4l2_buf_type type = (v4l2_buf_type)v4l2_data.fmt.type; if ( vidioctl( vid_fd, VIDIOC_STREAMON, &type ) < 0 ) Fatal( "Failed to start capture stream: %s", strerror(errno) ); diff --git a/src/zm_logger.cpp b/src/zm_logger.cpp index a9adbfc28..6507191cd 100644 --- a/src/zm_logger.cpp +++ b/src/zm_logger.cpp @@ -41,6 +41,7 @@ Logger *Logger::smInstance = 0; Logger::StringMap Logger::smCodes; Logger::IntMap Logger::smSyslogPriorities; +#if 0 static void subtractTime( struct timeval * const tp1, struct timeval * const tp2 ) { tp1->tv_sec -= tp2->tv_sec; @@ -54,6 +55,7 @@ static void subtractTime( struct timeval * const tp1, struct timeval * const tp2 tp1->tv_usec = tp1->tv_usec - tp2->tv_usec; } } +#endif void Logger::usrHandler( int sig ) { @@ -179,7 +181,7 @@ void Logger::initialise( const std::string &id, const Options &options ) if ( config.log_debug ) { StringVector targets = split( config.log_debug_target, "|" ); - for ( int i = 0; i < targets.size(); i++ ) + for ( unsigned int i = 0; i < targets.size(); i++ ) { const std::string &target = targets[i]; if ( target == mId || target == "_"+mId || target == "_"+mIdRoot || target == "_"+mIdRoot || target == "" ) diff --git a/src/zm_mem_utils.h b/src/zm_mem_utils.h index 04e313330..8ce1ceea1 100644 --- a/src/zm_mem_utils.h +++ b/src/zm_mem_utils.h @@ -63,7 +63,7 @@ inline char *mempbrk( register const char *s, const char *accept, size_t limit ) if ( limit <= 0 || !s || !accept || !*accept ) return( 0 ); - register int i,j; + register unsigned int i,j; size_t acc_len = strlen( accept ); for ( i = 0; i < limit; s++, i++ ) @@ -87,7 +87,7 @@ inline char *memstr( register const char *s, const char *n, size_t limit ) if ( !*n ) return( (char *)s ); - register int i,j,k; + register unsigned int i,j,k; size_t n_len = strlen( n ); for ( i = 0; i < limit; i++, s++ ) @@ -112,7 +112,7 @@ inline size_t memspn( register const char *s, const char *accept, size_t limit ) if ( limit <= 0 || !s || !accept || !*accept ) return( 0 ); - register int i,j; + register unsigned int i,j; size_t acc_len = strlen( accept ); for ( i = 0; i < limit; s++, i++ ) @@ -142,7 +142,7 @@ inline size_t memcspn( register const char *s, const char *reject, size_t limit if ( !*reject ) return( limit ); - register int i,j; + register unsigned int i,j; size_t rej_len = strlen( reject ); for ( i = 0; i < limit; s++, i++ ) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index 298ad2b3a..1531ac9cb 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -49,6 +49,35 @@ #include #endif // ZM_MEM_MAPPED +//============================================================================= +std::string trimSpaces(std::string str) +{ + // Trim Both leading and trailing spaces + size_t startpos = str.find_first_not_of(" \t"); // Find the first character position after excluding leading blank spaces + size_t endpos = str.find_last_not_of(" \t"); // Find the first character position from reverse af + + // if all spaces or empty return an empty string + if(( std::string::npos == startpos ) || ( std::string::npos == endpos)) + { + return std::string(""); + } + else + return str.substr( startpos, endpos-startpos+1 ); +} + +std::vector split(const std::string &s, char delim) { + std::vector elems; + std::stringstream ss(s); + std::string item; + while(std::getline(ss, item, delim)) { + elems.push_back(trimSpaces(item)); + } + return elems; +} +//============================================================================= + + + Monitor::MonitorLink::MonitorLink( int p_id, const char *p_name ) : id( p_id ) { strncpy( name, p_name, sizeof(name) ); @@ -228,7 +257,7 @@ bool Monitor::MonitorLink::hasAlarmed() { return( true ); } - else if( shared_data->last_event != last_event ) + else if( shared_data->last_event != (unsigned int)last_event ) { last_event = shared_data->last_event; return( true ); @@ -264,7 +293,9 @@ Monitor::Monitor( Rgb p_signal_check_colour, Purpose p_purpose, int p_n_zones, - Zone *p_zones[] + Zone *p_zones[], + std::string p_sPlugins, + int p_DoNativeMotDet ) : id( p_id ), function( (Function)p_function ), enabled( p_enabled ), @@ -292,7 +323,8 @@ Monitor::Monitor( purpose( p_purpose ), camera( p_camera ), n_zones( p_n_zones ), - zones( p_zones ) + zones( p_zones ), + iDoNativeMotDet(p_DoNativeMotDet) { strncpy( name, p_name, sizeof(name) ); @@ -401,6 +433,13 @@ Monitor::Monitor( Debug(3,"Aligning shared memory images to the next 16 byte boundary"); shared_images = (uint8_t*)((unsigned long)shared_images + (16 - ((unsigned long)shared_images % 16))); } + + //======================================================================================== + // Get from string with plugins names particular names. + m_sPluginNames = split(p_sPlugins, ';'); + + //======================================================================================== + if ( purpose == CAPTURE ) { @@ -436,6 +475,32 @@ Monitor::Monitor( shared_data->last_read_time = 0; shared_data->alarm_x = -1; shared_data->alarm_y = -1; + //======================================================================================== + Info("In the constructor of Monitor class with ID=%d:", p_id); + if (config.load_plugins) + { + Info("Load plugins from the directory %s ... ", config.path_plugins); + std::string sPluginExt = std::string(config.plugin_extension); + ThePluginManager.setPluginExt(sPluginExt); + for (std::vector::iterator it = m_sPluginNames.begin() ; it < m_sPluginNames.end(); it++ ) + { + std::string sFullPluginPath = join_paths(config.path_plugins, *it + config.plugin_extension); + Info("Plugin path %s", sFullPluginPath.c_str()); + ThePluginManager.loadPlugin(sFullPluginPath); + } + +// int count_plugins = ThePluginManager.findPlugins(config.path_plugins); +// Info("Number of found plugins is %d", count_plugins); +// if (count_plugins > 0) +// { + std::string sPluginsConfig = std::string(config.plugins_config_path); + Info("Configure plugins with \'%s\' config file.", config.plugins_config_path); + ThePluginManager.configurePlugins(sPluginsConfig); +// } + + } + //======================================================================================== + } if ( !shared_data->valid ) @@ -517,7 +582,8 @@ Monitor::Monitor( Fatal( "Can't change to parent directory: %s", strerror(errno) ); } - while( shared_data->last_write_index == image_buffer_count && shared_data->last_write_time == 0) + while( shared_data->last_write_index == (unsigned int)image_buffer_count + && shared_data->last_write_time == 0) { Warning( "Waiting for capture daemon" ); sleep( 1 ); @@ -660,12 +726,12 @@ struct timeval Monitor::GetTimestamp( int index ) const unsigned int Monitor::GetLastReadIndex() const { - return( shared_data->last_read_index!=image_buffer_count?shared_data->last_read_index:-1 ); + return( shared_data->last_read_index!=(unsigned int)image_buffer_count?shared_data->last_read_index:-1 ); } unsigned int Monitor::GetLastWriteIndex() const { - return( shared_data->last_write_index!=image_buffer_count?shared_data->last_write_index:-1 ); + return( shared_data->last_write_index!=(unsigned int)image_buffer_count?shared_data->last_write_index:-1 ); } unsigned int Monitor::GetLastEvent() const @@ -1267,23 +1333,56 @@ bool Monitor::Analyse() } else if ( signal && Active() && (function == MODECT || function == MOCORD) ) { - Event::StringSet zoneSet; - int motion_score = DetectMotion( *snap_image, zoneSet ); - if ( motion_score ) + if ((config.turnoff_native_analysis && !config.load_plugins) || (!config.turnoff_native_analysis && (iDoNativeMotDet || (!iDoNativeMotDet && !config.load_plugins))) ) + { - if ( !event ) + Event::StringSet zoneSet; + int motion_score = DetectMotion( *snap_image, zoneSet ); + //int motion_score = DetectBlack( *snap_image, zoneSet ); + if ( motion_score ) { - score += motion_score; - if ( cause.length() ) - cause += ", "; - cause += MOTION_CAUSE; + if ( !event ) + { + score += motion_score; + if ( cause.length() ) + cause += ", "; + cause += MOTION_CAUSE; + } + else + { + score += motion_score; + } + noteSetMap[MOTION_CAUSE] = zoneSet; + } - else - { - score += motion_score; - } - noteSetMap[MOTION_CAUSE] = zoneSet; } + //==================================================================== + else + { + + for ( int n_zone = 0; n_zone < n_zones; n_zone++ ) + { + zones[n_zone]->ResetStats(); + } + } + + if (config.load_plugins) + { + std::string det_cause; // detection cause to fill in plugin's detectors + score += ThePluginManager.getImageAnalyser().DoDetection(*snap_image, zones, n_zones, noteSetMap, det_cause); + if (!event) + { + if (det_cause.length()) + { + if (cause.length()) + cause += ", "; + cause += det_cause; + } + + } + } + //==================================================================== + shared_data->active = signal; } if ( (!signal_change && signal) && n_linked_monitors > 0 ) @@ -1596,7 +1695,8 @@ void Monitor::Reload() closeEvent(); static char sql[ZM_SQL_MED_BUFSIZ]; - snprintf( sql, sizeof(sql), "select Function+0, Enabled, LinkedMonitors, EventPrefix, LabelFormat, LabelX, LabelY, WarmupCount, PreEventCount, PostEventCount, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Id = '%d'", id ); + snprintf( sql, sizeof(sql), "select Function+0, Enabled, LinkedMonitors, EventPrefix, LabelFormat, LabelX, LabelY, WarmupCount, PreEventCount, PostEventCount, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet, SignalCheckColour from Monitors where Id = '%d'", id ); + if ( mysql_query( &dbconn, sql ) ) { Error( "Can't run query: %s", mysql_error( &dbconn ) ); @@ -1636,6 +1736,14 @@ void Monitor::Reload() fps_report_interval = atoi(dbrow[index++]); ref_blend_perc = atoi(dbrow[index++]); track_motion = atoi(dbrow[index++]); + + //============================================================================ + std::string plugins = dbrow[index]; index++; + m_sPluginNames = split(plugins ,';'); + iDoNativeMotDet = atoi(dbrow[index++]); + //============================================================================ + + if ( dbrow[index][0] == '#' ) signal_check_colour = strtol(dbrow[index]+1,0,16); else @@ -1690,7 +1798,7 @@ void Monitor::ReloadLinkedMonitors( const char *p_linked_monitors ) if ( p_linked_monitors ) { int n_link_ids = 0; - int link_ids[256]; + unsigned int link_ids[256]; char link_id_str[8]; char *dest_ptr = link_id_str; @@ -1700,7 +1808,7 @@ void Monitor::ReloadLinkedMonitors( const char *p_linked_monitors ) dest_ptr = link_id_str; while( *src_ptr >= '0' && *src_ptr <= '9' ) { - if ( (dest_ptr-link_id_str) < (sizeof(link_id_str)-1) ) + if ( (dest_ptr-link_id_str) < (unsigned int)(sizeof(link_id_str)-1) ) { *dest_ptr++ = *src_ptr++; } @@ -1713,7 +1821,7 @@ void Monitor::ReloadLinkedMonitors( const char *p_linked_monitors ) if ( dest_ptr != link_id_str ) { *dest_ptr = '\0'; - int link_id = atoi(link_id_str); + unsigned int link_id = atoi(link_id_str); if ( link_id > 0 && link_id != id) { Debug( 3, "Found linked monitor id %d", link_id ); @@ -1783,11 +1891,11 @@ int Monitor::LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose static char sql[ZM_SQL_MED_BUFSIZ]; if ( !device[0] ) { - strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' order by Device, Channel", sizeof(sql) ); + strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' order by Device, Channel", sizeof(sql) ); } else { - snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' and Device = '%s' order by Channel", device ); + snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' and Device = '%s' order by Channel", device ); } if ( mysql_query( &dbconn, sql ) ) { @@ -1850,6 +1958,11 @@ int Monitor::LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose int fps_report_interval = atoi(dbrow[col]); col++; int ref_blend_perc = atoi(dbrow[col]); col++; int track_motion = atoi(dbrow[col]); col++; + //============================================================================ + std::string plugins = dbrow[col]; col++; + int doNativeMotDet = atoi(dbrow[col]); col++; + //============================================================================ + int signal_check_colour; if ( dbrow[col][0] == '#' ) signal_check_colour = strtol(dbrow[col]+1,0,16); @@ -1906,7 +2019,11 @@ int Monitor::LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose ref_blend_perc, track_motion, signal_check_colour, - purpose + purpose, + 0, + 0, + plugins, + doNativeMotDet ); Zone **zones = 0; int n_zones = Zone::Load( monitors[i], zones ); @@ -1930,11 +2047,11 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c static char sql[ZM_SQL_MED_BUFSIZ]; if ( !protocol ) { - strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Remote'", sizeof(sql) ); + strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet from Monitors where Function != 'None' and Type = 'Remote'", sizeof(sql) ); } else { - snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Remote' and Protocol = '%s' and Host = '%s' and Port = '%s' and Path = '%s'", protocol, host, port, path ); + snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet from Monitors where Function != 'None' and Type = 'Remote' and Protocol = '%s' and Host = '%s' and Port = '%s' and Path = '%s'", protocol, host, port, path ); } if ( mysql_query( &dbconn, sql ) ) { @@ -1999,6 +2116,12 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c int ref_blend_perc = atoi(dbrow[col]); col++; int track_motion = atoi(dbrow[col]); col++; + //============================================================================ + std::string plugins = dbrow[col]; col++; + int doNativeMotDet = atoi(dbrow[col]); col++; + //============================================================================ + + int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width); int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height); @@ -2072,7 +2195,12 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c ref_blend_perc, track_motion, RGB_WHITE, - purpose + purpose, + 0, + 0, + plugins, + doNativeMotDet + ); Zone **zones = 0; int n_zones = Zone::Load( monitors[i], zones ); @@ -2095,11 +2223,11 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu static char sql[ZM_SQL_MED_BUFSIZ]; if ( !file[0] ) { - strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'File'", sizeof(sql) ); + strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet from Monitors where Function != 'None' and Type = 'File'", sizeof(sql) ); } else { - snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'File' and Path = '%s'", file ); + snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet from Monitors where Function != 'None' and Type = 'File' and Path = '%s'", file ); } if ( mysql_query( &dbconn, sql ) ) { @@ -2159,6 +2287,11 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu int fps_report_interval = atoi(dbrow[col]); col++; int ref_blend_perc = atoi(dbrow[col]); col++; int track_motion = atoi(dbrow[col]); col++; + //============================================================================ + std::string plugins = dbrow[col]; col++; + int doNativeMotDet = atoi(dbrow[col]); col++; + + //============================================================================ int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width); int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height); @@ -2202,7 +2335,12 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu ref_blend_perc, track_motion, RGB_WHITE, - purpose + purpose, + 0, + 0, + plugins, + doNativeMotDet + ); Zone **zones = 0; int n_zones = Zone::Load( monitors[i], zones ); @@ -2226,11 +2364,11 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose static char sql[ZM_SQL_MED_BUFSIZ]; if ( !file[0] ) { - strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Ffmpeg'", sizeof(sql) ); + strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet from Monitors where Function != 'None' and Type = 'Ffmpeg'", sizeof(sql) ); } else { - snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Ffmpeg' and Path = '%s'", file ); + snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet from Monitors where Function != 'None' and Type = 'Ffmpeg' and Path = '%s'", file ); } if ( mysql_query( &dbconn, sql ) ) { @@ -2290,6 +2428,11 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose int fps_report_interval = atoi(dbrow[col]); col++; int ref_blend_perc = atoi(dbrow[col]); col++; int track_motion = atoi(dbrow[col]); col++; + //============================================================================ + std::string plugins = dbrow[col]; col++; + int doNativeMotDet = atoi(dbrow[col]); col++; + + //============================================================================ int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width); int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height); @@ -2333,7 +2476,11 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose ref_blend_perc, track_motion, RGB_WHITE, - purpose + purpose, + 0, + 0, + plugins, + doNativeMotDet ); Zone **zones = 0; int n_zones = Zone::Load( monitors[i], zones ); @@ -2355,7 +2502,7 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose Monitor *Monitor::Load( int id, bool load_zones, Purpose purpose ) { static char sql[ZM_SQL_MED_BUFSIZ]; - snprintf( sql, sizeof(sql), "select Id, Name, Type, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Id = %d", id ); + snprintf( sql, sizeof(sql), "select Id, Name, Type, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, UsedPl, DoNativeMotDet, SignalCheckColour from Monitors where Id = %d", id ); if ( mysql_query( &dbconn, sql ) ) { Error( "Can't run query: %s", mysql_error( &dbconn ) ); @@ -2422,6 +2569,12 @@ Monitor *Monitor::Load( int id, bool load_zones, Purpose purpose ) int fps_report_interval = atoi(dbrow[col]); col++; int ref_blend_perc = atoi(dbrow[col]); col++; int track_motion = atoi(dbrow[col]); col++; + //============================================================================ + std::string plugins = dbrow[col]; col++; + int doNativeMotDet = atoi(dbrow[col]); col++; + + //============================================================================ + int signal_check_colour; if ( dbrow[col][0] == '#' ) signal_check_colour = strtol(dbrow[col]+1,0,16); @@ -2569,7 +2722,12 @@ Monitor *Monitor::Load( int id, bool load_zones, Purpose purpose ) ref_blend_perc, track_motion, signal_check_colour, - purpose + purpose, + 0, + 0, + plugins, + doNativeMotDet + ); int n_zones = 0; @@ -2680,7 +2838,7 @@ int Monitor::Capture() return( -1 ); } - if ( (index == shared_data->last_read_index) && (function > MONITOR) ) + if ( ((unsigned int)index == shared_data->last_read_index) && (function > MONITOR) ) { Warning( "Buffer overrun at index %d, image %d, slow down capture, speed up analysis or increase ring buffer size", index, image_count ); time_t now = time(0); @@ -2747,7 +2905,7 @@ void Monitor::TimestampImage( Image *ts_image, const struct timeval *ts_time ) c char label_text[1024]; const char *s_ptr = label_time_text; char *d_ptr = label_text; - while ( *s_ptr && ((d_ptr-label_text) < sizeof(label_text)) ) + while ( *s_ptr && ((d_ptr-label_text) < (unsigned int)sizeof(label_text)) ) { if ( *s_ptr == '%' ) { @@ -2795,6 +2953,191 @@ bool Monitor::closeEvent() return( false ); } +//----------------------------------------- + +/* + * NOTE Nextime's comment: + * + * OurCheckAlarms seems to be called only by DetectBlack method, and DetectBlack + * method is only called in a commented line instead of DetectMotion in zm_monitor.cpp. + * + * Probably this is just a dead code used for debugghing purpose, so, instead of fixing it + * it seems to be safe to just comment it out. + * + * Anyway, the issues with this code is that it assumes the image to be an RGB24 image, + * so, as i've discussed on IRC with mastertheknife, changes needed are: + * + * Check if the image is 24 or 32 bits ( pImage->Colours() says 3 for 24 and 4 for 32 bits, + * comparing it with ZM_COLOUR_RGB24 or ZM_COLOUR_RGB32 is the way ), and then + * manage che check using RGB_VAL_RED() and so on macros instead of just RED(). + * + * Be carefull that in 32 bit images we need to check also where the alpha channel is, so, + * (RGBA and BGRA) or (ABGR and ARGB) aren't the same! + * + * To check black pixels in 32 bit images i can do a more efficient way using + * RGBA_ZERO_ALPHA(pixel) == RGBA_ZERO_ALPHA(RGB_BLACK), but before of that i need to + * check where the alpha channel is and maybe convert it. + * Maybe this won't work as they assign "23" to black_thr, so, they are not checking + * if the pixel is black, but just "quasi" black is enough. + * + * Anyway, for the moment, comment out whole part. + */ + +/* +bool Monitor::OurCheckAlarms( Zone *zone, const Image *pImage ) +{ + Info("Entering OurCheckAlarms >>>>>>>>>>>>>>>>>>>>>>>>>>>>"); + unsigned char black_thr = 23; + int min_alarm_score = 10; + int max_alarm_score = 99; + //bool alarm = false; + unsigned int score; + Polygon zone_polygon = zone->GetPolygon(); + Info("Got polygon of a zone. It has %d vertices.", zone_polygon.getNumCoords()); + + zone->ResetStats(); + Info("ResetStats done."); + + if ( !zone->CheckOverloadCount() ) + { + Info("CheckOverloadCount() return false, we'll return false."); + return( false ); + } + + Image *pMaskImage = new Image(pImage->Width(), pImage->Height(), ZM_COLOUR_GRAY8, pImage->SubpixelOrder()); + Info("Mask image created."); + + pMaskImage->Fill(BLACK); + Info("Mask image filled with BLACK."); + if (pImage->Colours() == ZM_COLOUR_GRAY8) + { + Info("Analysed image is not colored! Set score = 0."); + score = 0; + } + else + { + Info("Start processing image."); + //Process image + unsigned char *buffer = (unsigned char*)pImage->Buffer(); + unsigned char *mask_buffer = (unsigned char*)pMaskImage->Buffer(); + + int black_pixels_count = 0; + Info("Loop for black pixels counting and mask filling."); + while (buffer < (pImage->Buffer() + pImage->Size())) + { + if ( (RED(buffer) < black_thr) && (GREEN(buffer) < black_thr) && (BLUE(buffer) < black_thr) ) + { + *mask_buffer = WHITE; + black_pixels_count++; + } + buffer += pImage->Colours(); + mask_buffer++; + } + + if ( !black_pixels_count ) + { + delete pMaskImage; + return( false ); + } + score = (100*black_pixels_count)/zone_polygon.Area(); + Info("Number of black pixels is %d, zone polygon area is %d, score is %d", black_pixels_count, zone_polygon.Area(), score); + + if ( min_alarm_score && ( score < min_alarm_score) ) + { + delete pMaskImage; + return( false ); + } + if ( max_alarm_score && (score > max_alarm_score) ) + { + zone->SetOverloadCount(zone->GetOverloadFrames()); + delete pMaskImage; + return( false ); + } + } + + zone->SetScore(score); + Info("Score have been set in zone."); + //Get mask + Rgb alarm_colour = RGB_RED; + Image *tempImage = pMaskImage->HighlightEdges(alarm_colour, &zone_polygon.Extent() ); + Info("After HighlightEdges"); + + zone->SetAlarmImage(tempImage); + Info("After SetAlarmImage"); + delete pMaskImage; + Info("After Delete pMaskImage"); + delete tempImage; + + Info("Leaving OurCheckAlarms >>>>>>>>>>>>>>>>>>>>>>>>>>>>"); + return true; +} + +unsigned int Monitor::DetectBlack(const Image &comp_image, Event::StringSet &zoneSet ) +{ + Info("Entering DetectBlack >>>>>>>>>>>>>>>>>>>>>>>>>>"); + bool alarm = false; + unsigned int score = 0; + + if ( n_zones <= 0 ) return( alarm ); + +// Coord alarm_centre; +// int top_score = -1; + + // Find all alarm pixels in active zones + Info("Number of zones to process %d", n_zones); + for ( int n_zone = 0; n_zone < n_zones; n_zone++ ) + { + Zone *zone = zones[n_zone]; + if ( !zone->IsActive() ) + { + continue; + } + Debug( 3, "Checking active zone %s", zone->Label() ); + Info( "Checking active zone %s", zone->Label() ); + if ( OurCheckAlarms( zone, &comp_image ) ) + { + Info("OurCheckAlarm is TRUE!!!!!!"); + alarm = true; + score += zone->Score(); + zone->SetAlarm(); + Debug( 3, "Zone is alarmed, zone score = %d", zone->Score() ); + Info( "Zone is alarmed, zone score = %d", zone->Score() ); + zoneSet.insert( zone->Label() ); +// if ( config.opt_control && track_motion ) +// { +// if ( (int)zone->Score() > top_score ) +// { +// top_score = zone->Score(); +// alarm_centre = zone->GetAlarmCentre(); +// } +// } + } + Info( "Finish checking active zone %s", zone->Label() ); + } + + +// if ( top_score > 0 ) +// { +// shared_data->alarm_x = alarm_centre.X(); +// shared_data->alarm_y = alarm_centre.Y(); +// +// Info( "Got alarm centre at %d,%d, at count %d", shared_data->alarm_x, shared_data->alarm_y, image_count ); +// } +// else +// { +// shared_data->alarm_x = shared_data->alarm_y = -1; +// } + + // This is a small and innocent hack to prevent scores of 0 being returned in alarm state + Info("Leaving DetectBlack <<<<<<<<<<<<<<<<<<<<<<<<<<<"); + return( score?score:alarm ); +} + +*/ +//----------------------------------------------------------------------------------------------- + + + unsigned int Monitor::DetectMotion( const Image &comp_image, Event::StringSet &zoneSet ) { bool alarm = false; @@ -2912,7 +3255,7 @@ unsigned int Monitor::DetectMotion( const Image &comp_image, Event::StringSet &z zoneSet.insert( zone->Label() ); if ( config.opt_control && track_motion ) { - if ( zone->Score() > top_score ) + if ( zone->Score() > (unsigned int)top_score ) { top_score = zone->Score(); alarm_centre = zone->GetAlarmCentre(); @@ -3593,7 +3936,7 @@ void MonitorStream::runStream() } } - bool frame_sent = false; + //bool frame_sent = false; if ( buffered_playback && delayed ) { if ( temp_read_index == temp_write_index ) @@ -3638,7 +3981,7 @@ void MonitorStream::runStream() if ( !sendFrame( temp_image_buffer[temp_index].file_name, &temp_image_buffer[temp_index].timestamp ) ) zm_terminate = true; memcpy( &last_frame_timestamp, &(swap_image->timestamp), sizeof(last_frame_timestamp) ); - frame_sent = true; + //frame_sent = true; } temp_read_index = MOD_ADD( temp_read_index, (replay_rate>0?1:-1), temp_image_buffer_count ); } @@ -3654,7 +3997,7 @@ void MonitorStream::runStream() if ( !sendFrame( temp_image_buffer[temp_read_index].file_name, &temp_image_buffer[temp_read_index].timestamp ) ) zm_terminate = true; memcpy( &last_frame_timestamp, &(swap_image->timestamp), sizeof(last_frame_timestamp) ); - frame_sent = true; + //frame_sent = true; step = 0; } else @@ -3669,7 +4012,7 @@ void MonitorStream::runStream() // Send the next frame if ( !sendFrame( temp_image_buffer[temp_index].file_name, &temp_image_buffer[temp_index].timestamp ) ) zm_terminate = true; - frame_sent = true; + //frame_sent = true; } } } @@ -3684,7 +4027,7 @@ void MonitorStream::runStream() replay_rate = ZM_RATE_BASE; } } - if ( last_read_index != monitor->shared_data->last_write_index ) + if ( (unsigned int)last_read_index != monitor->shared_data->last_write_index ) { int index = monitor->shared_data->last_write_index%monitor->image_buffer_count; last_read_index = monitor->shared_data->last_write_index; @@ -3699,7 +4042,7 @@ void MonitorStream::runStream() if ( !sendFrame( snap->image, snap->timestamp ) ) zm_terminate = true; memcpy( &last_frame_timestamp, snap->timestamp, sizeof(last_frame_timestamp) ); - frame_sent = true; + //frame_sent = true; temp_read_index = temp_write_index; } @@ -3795,7 +4138,7 @@ void MonitorStream::runStream() } else { - for ( int i = 0; i < pglob.gl_pathc; i++ ) + for ( unsigned int i = 0; i < pglob.gl_pathc; i++ ) { if ( unlink( pglob.gl_pathv[i] ) < 0 ) { diff --git a/src/zm_monitor.cpp.orig b/src/zm_monitor.cpp.orig new file mode 100644 index 000000000..298ad2b3a --- /dev/null +++ b/src/zm_monitor.cpp.orig @@ -0,0 +1,3889 @@ +// +// ZoneMinder Monitor Class Implementation, $Date$, $Revision$ +// Copyright (C) 2001-2008 Philip Coombes +// +// 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. +// + +#include +#include +#include +#include + +#include "zm.h" +#include "zm_db.h" +#include "zm_time.h" +#include "zm_mpeg.h" +#include "zm_signal.h" +#include "zm_monitor.h" +#if ZM_HAS_V4L +#include "zm_local_camera.h" +#endif // ZM_HAS_V4L +#include "zm_remote_camera.h" +#include "zm_remote_camera_http.h" +#if HAVE_LIBAVFORMAT +#include "zm_remote_camera_rtsp.h" +#endif // HAVE_LIBAVFORMAT +#include "zm_file_camera.h" +#if HAVE_LIBAVFORMAT +#include "zm_ffmpeg_camera.h" +#endif // HAVE_LIBAVFORMAT + +#if ZM_MEM_MAPPED +#include +#include +#else // ZM_MEM_MAPPED +#include +#include +#endif // ZM_MEM_MAPPED + +Monitor::MonitorLink::MonitorLink( int p_id, const char *p_name ) : id( p_id ) +{ + strncpy( name, p_name, sizeof(name) ); + +#if ZM_MEM_MAPPED + map_fd = -1; + snprintf( mem_file, sizeof(mem_file), "%s/zm.mmap.%d", config.path_map, id ); +#else // ZM_MEM_MAPPED + shm_id = 0; +#endif // ZM_MEM_MAPPED + mem_size = 0; + mem_ptr = 0; + + last_event = 0; + last_state = IDLE; + + last_connect_time = 0; + connected = false; +} + +Monitor::MonitorLink::~MonitorLink() +{ + disconnect(); +} + +bool Monitor::MonitorLink::connect() +{ + if ( !last_connect_time || (time( 0 ) - last_connect_time) > 60 ) + { + last_connect_time = time( 0 ); + + mem_size = sizeof(SharedData) + sizeof(TriggerData); + + Debug( 1, "link.mem.size=%d", mem_size ); +#if ZM_MEM_MAPPED + map_fd = open( mem_file, O_RDWR, (mode_t)0600 ); + if ( map_fd < 0 ) + { + Debug( 3, "Can't open linked memory map file %s: %s", mem_file, strerror(errno) ); + disconnect(); + return( false ); + } + + struct stat map_stat; + if ( fstat( map_fd, &map_stat ) < 0 ) + { + Error( "Can't stat linked memory map file %s: %s", mem_file, strerror(errno) ); + disconnect(); + return( false ); + } + + if ( map_stat.st_size == 0 ) + { + Error( "Linked memory map file %s is empty: %s", mem_file, strerror(errno) ); + disconnect(); + return( false ); + } + else if ( map_stat.st_size < mem_size ) + { + Error( "Got unexpected memory map file size %ld, expected %d", map_stat.st_size, mem_size ); + disconnect(); + return( false ); + } + + mem_ptr = (unsigned char *)mmap( NULL, mem_size, PROT_READ|PROT_WRITE, MAP_SHARED, map_fd, 0 ); + if ( mem_ptr == MAP_FAILED ) + { + Error( "Can't map file %s (%d bytes) to memory: %s", mem_file, mem_size, strerror(errno) ); + disconnect(); + return( false ); + } +#else // ZM_MEM_MAPPED + shm_id = shmget( (config.shm_key&0xffff0000)|id, mem_size, 0700 ); + if ( shm_id < 0 ) + { + Debug( 3, "Can't shmget link memory: %s", strerror(errno) ); + connected = false; + return( false ); + } + mem_ptr = (unsigned char *)shmat( shm_id, 0, 0 ); + if ( mem_ptr < 0 ) + { + Debug( 3, "Can't shmat link memory: %s", strerror(errno) ); + connected = false; + return( false ); + } +#endif // ZM_MEM_MAPPED + + shared_data = (SharedData *)mem_ptr; + trigger_data = (TriggerData *)((char *)shared_data + sizeof(SharedData)); + + if ( !shared_data->valid ) + { + Debug( 3, "Linked memory not initialised by capture daemon" ); + disconnect(); + return( false ); + } + + last_state = shared_data->state; + last_event = shared_data->last_event; + connected = true; + + return( true ); + } + return( false ); +} + +bool Monitor::MonitorLink::disconnect() +{ + if ( connected ) + { + connected = false; + +#if ZM_MEM_MAPPED + if ( mem_ptr > 0 ) + { + msync( mem_ptr, mem_size, MS_ASYNC ); + munmap( mem_ptr, mem_size ); + } + if ( map_fd >= 0 ) + close( map_fd ); + + map_fd = -1; +#else // ZM_MEM_MAPPED + struct shmid_ds shm_data; + if ( shmctl( shm_id, IPC_STAT, &shm_data ) < 0 ) + { + Debug( 3, "Can't shmctl: %s", strerror(errno) ); + return( false ); + } + + shm_id = 0; + + if ( shm_data.shm_nattch <= 1 ) + { + if ( shmctl( shm_id, IPC_RMID, 0 ) < 0 ) + { + Debug( 3, "Can't shmctl: %s", strerror(errno) ); + return( false ); + } + } + + if ( shmdt( mem_ptr ) < 0 ) + { + Debug( 3, "Can't shmdt: %s", strerror(errno) ); + return( false ); + } + +#endif // ZM_MEM_MAPPED + mem_size = 0; + mem_ptr = 0; + } + return( true ); +} + +bool Monitor::MonitorLink::isAlarmed() +{ + if ( !connected ) + { + return( false ); + } + return( shared_data->state == ALARM ); +} + +bool Monitor::MonitorLink::inAlarm() +{ + if ( !connected ) + { + return( false ); + } + return( shared_data->state == ALARM || shared_data->state == ALERT ); +} + +bool Monitor::MonitorLink::hasAlarmed() +{ + if ( shared_data->state == ALARM ) + { + return( true ); + } + else if( shared_data->last_event != last_event ) + { + last_event = shared_data->last_event; + return( true ); + } + return( false ); +} + +Monitor::Monitor( + int p_id, + const char *p_name, + int p_function, + bool p_enabled, + const char *p_linked_monitors, + Camera *p_camera, + int p_orientation, + unsigned int p_deinterlacing, + const char *p_event_prefix, + const char *p_label_format, + const Coord &p_label_coord, + int p_image_buffer_count, + int p_warmup_count, + int p_pre_event_count, + int p_post_event_count, + int p_stream_replay_buffer, + int p_alarm_frame_count, + int p_section_length, + int p_frame_skip, + int p_capture_delay, + int p_alarm_capture_delay, + int p_fps_report_interval, + int p_ref_blend_perc, + bool p_track_motion, + Rgb p_signal_check_colour, + Purpose p_purpose, + int p_n_zones, + Zone *p_zones[] +) : id( p_id ), + function( (Function)p_function ), + enabled( p_enabled ), + width( (p_orientation==ROTATE_90||p_orientation==ROTATE_270)?p_camera->Height():p_camera->Width() ), + height( (p_orientation==ROTATE_90||p_orientation==ROTATE_270)?p_camera->Width():p_camera->Height() ), + orientation( (Orientation)p_orientation ), + deinterlacing( p_deinterlacing ), + label_coord( p_label_coord ), + image_buffer_count( p_image_buffer_count ), + warmup_count( p_warmup_count ), + pre_event_count( p_pre_event_count ), + post_event_count( p_post_event_count ), + stream_replay_buffer( p_stream_replay_buffer ), + section_length( p_section_length ), + frame_skip( p_frame_skip ), + capture_delay( p_capture_delay ), + alarm_capture_delay( p_alarm_capture_delay ), + alarm_frame_count( p_alarm_frame_count ), + fps_report_interval( p_fps_report_interval ), + ref_blend_perc( p_ref_blend_perc ), + track_motion( p_track_motion ), + signal_check_colour( p_signal_check_colour ), + delta_image( width, height, ZM_COLOUR_GRAY8, ZM_SUBPIX_ORDER_NONE ), + ref_image( width, height, p_camera->Colours(), p_camera->SubpixelOrder() ), + purpose( p_purpose ), + camera( p_camera ), + n_zones( p_n_zones ), + zones( p_zones ) +{ + strncpy( name, p_name, sizeof(name) ); + + strncpy( event_prefix, p_event_prefix, sizeof(event_prefix) ); + strncpy( label_format, p_label_format, sizeof(label_format) ); + + // Change \n to actual line feeds + char *token_ptr = label_format; + const char *token_string = "\n"; + while( ( token_ptr = strstr( token_ptr, token_string ) ) ) + { + if ( *(token_ptr+1) ) + { + *token_ptr = '\n'; + token_ptr++; + strcpy( token_ptr, token_ptr+1 ); + } + else + { + *token_ptr = '\0'; + break; + } + } + + fps = 0.0; + event_count = 0; + image_count = 0; + ready_count = warmup_count; + first_alarm_count = 0; + last_alarm_count = 0; + state = IDLE; + + if ( alarm_frame_count < 1 ) + alarm_frame_count = 1; + else if ( alarm_frame_count > MAX_PRE_ALARM_FRAMES ) + alarm_frame_count = MAX_PRE_ALARM_FRAMES; + + auto_resume_time = 0; + + if ( strcmp( config.event_close_mode, "time" ) == 0 ) + event_close_mode = CLOSE_TIME; + else if ( strcmp( config.event_close_mode, "alarm" ) == 0 ) + event_close_mode = CLOSE_ALARM; + else + event_close_mode = CLOSE_IDLE; + + Debug( 1, "monitor purpose=%d", purpose ); + + mem_size = sizeof(SharedData) + + sizeof(TriggerData) + + (image_buffer_count*sizeof(struct timeval)) + + (image_buffer_count*camera->ImageSize()) + + 64; /* Padding used to permit aligning the images buffer to 16 byte boundary */ + + Debug( 1, "mem.size=%d", mem_size ); +#if ZM_MEM_MAPPED + snprintf( mem_file, sizeof(mem_file), "%s/zm.mmap.%d", config.path_map, id ); + map_fd = open( mem_file, O_RDWR|O_CREAT, (mode_t)0600 ); + if ( map_fd < 0 ) + Fatal( "Can't open memory map file %s, probably not enough space free: %s", mem_file, strerror(errno) ); + struct stat map_stat; + if ( fstat( map_fd, &map_stat ) < 0 ) + Fatal( "Can't stat memory map file %s: %s", mem_file, strerror(errno) ); + if ( map_stat.st_size != mem_size && purpose == CAPTURE ) + { + // Allocate the size + if ( ftruncate( map_fd, mem_size ) < 0 ) + Fatal( "Can't extend memory map file %s to %d bytes: %s", mem_file, mem_size, strerror(errno) ); + } + else if ( map_stat.st_size != mem_size ) + { + Error( "Got unexpected memory map file size %ld, expected %d", map_stat.st_size, mem_size ); + } + + mem_ptr = (unsigned char *)mmap( NULL, mem_size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, map_fd, 0 ); + if ( mem_ptr == MAP_FAILED ) + if ( errno == EAGAIN ) + { + Debug( 1, "Unable to map file %s (%d bytes) to locked memory, trying unlocked", mem_file, mem_size ); + mem_ptr = (unsigned char *)mmap( NULL, mem_size, PROT_READ|PROT_WRITE, MAP_SHARED, map_fd, 0 ); + } + if ( mem_ptr == MAP_FAILED ) + Fatal( "Can't map file %s (%d bytes) to memory: %s(%d)", mem_file, mem_size, strerror(errno), errno ); +#else // ZM_MEM_MAPPED + shm_id = shmget( (config.shm_key&0xffff0000)|id, mem_size, IPC_CREAT|0700 ); + if ( shm_id < 0 ) + { + Error( "Can't shmget, probably not enough shared memory space free: %s", strerror(errno)); + exit( -1 ); + } + mem_ptr = (unsigned char *)shmat( shm_id, 0, 0 ); + if ( mem_ptr < 0 ) + { + Error( "Can't shmat: %s", strerror(errno)); + exit( -1 ); + } +#endif // ZM_MEM_MAPPED + + shared_data = (SharedData *)mem_ptr; + trigger_data = (TriggerData *)((char *)shared_data + sizeof(SharedData)); + struct timeval *shared_timestamps = (struct timeval *)((char *)trigger_data + sizeof(TriggerData)); + unsigned char *shared_images = (unsigned char *)((char *)shared_timestamps + (image_buffer_count*sizeof(struct timeval))); + + if(((unsigned long)shared_images % 16) != 0) { + /* Align images buffer to nearest 16 byte boundary */ + Debug(3,"Aligning shared memory images to the next 16 byte boundary"); + shared_images = (uint8_t*)((unsigned long)shared_images + (16 - ((unsigned long)shared_images % 16))); + } + + if ( purpose == CAPTURE ) + { + memset( mem_ptr, 0, mem_size ); + shared_data->size = sizeof(SharedData); + shared_data->active = enabled; + shared_data->signal = false; + shared_data->state = IDLE; + shared_data->last_write_index = image_buffer_count; + shared_data->last_read_index = image_buffer_count; + shared_data->last_write_time = 0; + shared_data->last_event = 0; + shared_data->action = (Action)0; + shared_data->brightness = -1; + shared_data->hue = -1; + shared_data->colour = -1; + shared_data->contrast = -1; + shared_data->alarm_x = -1; + shared_data->alarm_y = -1; + shared_data->format = camera->SubpixelOrder(); + shared_data->imagesize = camera->ImageSize(); + trigger_data->size = sizeof(TriggerData); + trigger_data->trigger_state = TRIGGER_CANCEL; + trigger_data->trigger_score = 0; + trigger_data->trigger_cause[0] = 0; + trigger_data->trigger_text[0] = 0; + trigger_data->trigger_showtext[0] = 0; + shared_data->valid = true; + } + else if ( purpose == ANALYSIS ) + { + shared_data->state = IDLE; + shared_data->last_read_time = 0; + shared_data->alarm_x = -1; + shared_data->alarm_y = -1; + } + + if ( !shared_data->valid ) + { + if ( purpose != QUERY ) + { + Error( "Shared data not initialised by capture daemon" ); + exit( -1 ); + } + else + { + Warning( "Shared data not initialised by capture daemon, some query functions may not be available or produce invalid results" ); + } + } + + image_buffer = new Snapshot[image_buffer_count]; + for ( int i = 0; i < image_buffer_count; i++ ) + { + image_buffer[i].timestamp = &(shared_timestamps[i]); + image_buffer[i].image = new Image( width, height, camera->Colours(), camera->SubpixelOrder(), &(shared_images[i*camera->ImageSize()]) ); + image_buffer[i].image->HoldBuffer(true); /* Don't release the internal buffer or replace it with another */ + } + if ( (deinterlacing & 0xff) == 4) + { + /* Four field motion adaptive deinterlacing in use */ + /* Allocate a buffer for the next image */ + next_buffer.image = new Image( width, height, camera->Colours(), camera->SubpixelOrder()); + next_buffer.timestamp = new struct timeval; + } + if ( !n_zones ) + { + n_zones = 1; + zones = new Zone *[1]; + Coord coords[4] = { Coord( 0, 0 ), Coord( width-1, 0 ), Coord( width-1, height-1 ), Coord( 0, height-1 ) }; + zones[0] = new Zone( this, 0, "All", Zone::ACTIVE, Polygon( sizeof(coords)/sizeof(*coords), coords ), RGB_RED, Zone::BLOBS ); + } + start_time = last_fps_time = time( 0 ); + + event = 0; + + Debug( 1, "Monitor %s has function %d", name, function ); + Debug( 1, "Monitor %s LBF = '%s', LBX = %d, LBY = %d", name, label_format, label_coord.X(), label_coord.Y() ); + Debug( 1, "Monitor %s IBC = %d, WUC = %d, pEC = %d, PEC = %d, EAF = %d, FRI = %d, RBP = %d, FM = %d", name, image_buffer_count, warmup_count, pre_event_count, post_event_count, alarm_frame_count, fps_report_interval, ref_blend_perc, track_motion ); + + if ( purpose == ANALYSIS ) + { + static char path[PATH_MAX]; + + strncpy( path, config.dir_events, sizeof(path) ); + + struct stat statbuf; + errno = 0; + stat( path, &statbuf ); + if ( errno == ENOENT || errno == ENOTDIR ) + { + if ( mkdir( path, 0755 ) ) + { + Error( "Can't make %s: %s", path, strerror(errno)); + } + } + + snprintf( path, sizeof(path), "%s/%d", config.dir_events, id ); + + errno = 0; + stat( path, &statbuf ); + if ( errno == ENOENT || errno == ENOTDIR ) + { + if ( mkdir( path, 0755 ) ) + { + Error( "Can't make %s: %s", path, strerror(errno)); + } + char temp_path[PATH_MAX]; + snprintf( temp_path, sizeof(temp_path), "%d", id ); + if ( chdir( config.dir_events ) < 0 ) + Fatal( "Can't change directory to '%s': %s", config.dir_events, strerror(errno) ); + if ( symlink( temp_path, name ) < 0 ) + Fatal( "Can't symlink '%s' to '%s': %s", temp_path, name, strerror(errno) ); + if ( chdir( ".." ) < 0 ) + Fatal( "Can't change to parent directory: %s", strerror(errno) ); + } + + while( shared_data->last_write_index == image_buffer_count && shared_data->last_write_time == 0) + { + Warning( "Waiting for capture daemon" ); + sleep( 1 ); + } + ref_image.Assign( width, height, camera->Colours(), camera->SubpixelOrder(), image_buffer[shared_data->last_write_index].image->Buffer(), camera->ImageSize()); + + n_linked_monitors = 0; + linked_monitors = 0; + ReloadLinkedMonitors( p_linked_monitors ); + } +} + +Monitor::~Monitor() +{ + if ( event ) + Info( "%s: %03d - Closing event %d, shutting down", name, image_count, event->Id() ); + closeEvent(); + + if ( (deinterlacing & 0xff) == 4) + { + delete next_buffer.image; + delete next_buffer.timestamp; + } + for ( int i = 0; i < image_buffer_count; i++ ) + { + delete image_buffer[i].image; + } + delete[] image_buffer; + + for ( int i = 0; i < n_zones; i++ ) + { + delete zones[i]; + } + delete[] zones; + + delete camera; + + if ( purpose == ANALYSIS ) + { + shared_data->state = state = IDLE; + shared_data->last_read_index = image_buffer_count; + shared_data->last_read_time = 0; + } + else if ( purpose == CAPTURE ) + { + shared_data->valid = false; + memset( mem_ptr, 0, mem_size ); + } + +#if ZM_MEM_MAPPED + if ( msync( mem_ptr, mem_size, MS_SYNC ) < 0 ) + Error( "Can't msync: %s", strerror(errno) ); + if ( munmap( mem_ptr, mem_size ) < 0 ) + Fatal( "Can't munmap: %s", strerror(errno) ); + close( map_fd ); +#else // ZM_MEM_MAPPED + struct shmid_ds shm_data; + if ( shmctl( shm_id, IPC_STAT, &shm_data ) < 0 ) + { + Error( "Can't shmctl: %s", strerror(errno) ); + exit( -1 ); + } + if ( shm_data.shm_nattch <= 1 ) + { + if ( shmctl( shm_id, IPC_RMID, 0 ) < 0 ) + { + Error( "Can't shmctl: %s", strerror(errno) ); + exit( -1 ); + } + } +#endif // ZM_MEM_MAPPED +} + +void Monitor::AddZones( int p_n_zones, Zone *p_zones[] ) +{ + for ( int i = 0; i < n_zones; i++ ) + delete zones[i]; + delete[] zones; + n_zones = p_n_zones; + zones = p_zones; +} + +Monitor::State Monitor::GetState() const +{ + return( (State)shared_data->state ); +} + +int Monitor::GetImage( int index, int scale ) const +{ + if ( index < 0 || index > image_buffer_count ) + { + index = shared_data->last_write_index; + } + + if ( index != image_buffer_count ) + { + Snapshot *snap = &image_buffer[index]; + Image snap_image( *(snap->image) ); + + if ( scale != ZM_SCALE_BASE ) + { + snap_image.Scale( scale ); + } + + static char filename[PATH_MAX]; + snprintf( filename, sizeof(filename), "Monitor%d.jpg", id ); + if ( !config.timestamp_on_capture ) + { + TimestampImage( &snap_image, snap->timestamp ); + } + snap_image.WriteJpeg( filename ); + } + else + { + Error( "Unable to generate image, no images in buffer" ); + } + return( 0 ); +} + +struct timeval Monitor::GetTimestamp( int index ) const +{ + if ( index < 0 || index > image_buffer_count ) + { + index = shared_data->last_write_index; + } + + if ( index != image_buffer_count ) + { + Snapshot *snap = &image_buffer[index]; + + return( *(snap->timestamp) ); + } + else + { + static struct timeval null_tv = { 0, 0 }; + + return( null_tv ); + } +} + +unsigned int Monitor::GetLastReadIndex() const +{ + return( shared_data->last_read_index!=image_buffer_count?shared_data->last_read_index:-1 ); +} + +unsigned int Monitor::GetLastWriteIndex() const +{ + return( shared_data->last_write_index!=image_buffer_count?shared_data->last_write_index:-1 ); +} + +unsigned int Monitor::GetLastEvent() const +{ + return( shared_data->last_event ); +} + +double Monitor::GetFPS() const +{ + int index1 = shared_data->last_write_index; + if ( index1 == image_buffer_count ) + { + return( 0.0 ); + } + Snapshot *snap1 = &image_buffer[index1]; + if ( !snap1->timestamp || !snap1->timestamp->tv_sec ) + { + return( 0.0 ); + } + struct timeval time1 = *snap1->timestamp; + + int image_count = image_buffer_count; + int index2 = (index1+1)%image_buffer_count; + if ( index2 == image_buffer_count ) + { + return( 0.0 ); + } + Snapshot *snap2 = &image_buffer[index2]; + while ( !snap2->timestamp || !snap2->timestamp->tv_sec ) + { + if ( index1 == index2 ) + { + return( 0.0 ); + } + index2 = (index2+1)%image_buffer_count; + snap2 = &image_buffer[index2]; + image_count--; + } + struct timeval time2 = *snap2->timestamp; + + double time_diff = tvDiffSec( time2, time1 ); + + double curr_fps = image_count/time_diff; + + if ( curr_fps < 0.0 ) + { + //Error( "Negative FPS %f, time_diff = %lf (%d:%ld.%ld - %d:%ld.%ld), ibc: %d", curr_fps, time_diff, index2, time2.tv_sec, time2.tv_usec, index1, time1.tv_sec, time1.tv_usec, image_buffer_count ); + return( 0.0 ); + } + return( curr_fps ); +} + +void Monitor::ForceAlarmOn( int force_score, const char *force_cause, const char *force_text ) +{ + trigger_data->trigger_state = TRIGGER_ON; + trigger_data->trigger_score = force_score; + strncpy( trigger_data->trigger_cause, force_cause, sizeof(trigger_data->trigger_cause) ); + strncpy( trigger_data->trigger_text, force_text, sizeof(trigger_data->trigger_text) ); +} + +void Monitor::ForceAlarmOff() +{ + trigger_data->trigger_state = TRIGGER_OFF; +} + +void Monitor::CancelForced() +{ + trigger_data->trigger_state = TRIGGER_CANCEL; +} + +void Monitor::actionReload() +{ + shared_data->action |= RELOAD; +} + +void Monitor::actionEnable() +{ + shared_data->action |= RELOAD; + + static char sql[ZM_SQL_SML_BUFSIZ]; + snprintf( sql, sizeof(sql), "update Monitors set Enabled = 1 where Id = '%d'", id ); + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } +} + +void Monitor::actionDisable() +{ + shared_data->action |= RELOAD; + + static char sql[ZM_SQL_SML_BUFSIZ]; + snprintf( sql, sizeof(sql), "update Monitors set Enabled = 0 where Id = '%d'", id ); + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } +} + +void Monitor::actionSuspend() +{ + shared_data->action |= SUSPEND; +} + +void Monitor::actionResume() +{ + shared_data->action |= RESUME; +} + +int Monitor::actionBrightness( int p_brightness ) +{ + if ( purpose != CAPTURE ) + { + if ( p_brightness >= 0 ) + { + shared_data->brightness = p_brightness; + shared_data->action |= SET_SETTINGS; + int wait_loops = 10; + while ( shared_data->action & SET_SETTINGS ) + { + if ( wait_loops-- ) + usleep( 100000 ); + else + { + Warning( "Timed out waiting to set brightness" ); + return( -1 ); + } + } + } + else + { + shared_data->action |= GET_SETTINGS; + int wait_loops = 10; + while ( shared_data->action & GET_SETTINGS ) + { + if ( wait_loops-- ) + usleep( 100000 ); + else + { + Warning( "Timed out waiting to get brightness" ); + return( -1 ); + } + } + } + return( shared_data->brightness ); + } + return( camera->Brightness( p_brightness ) ); +} + +int Monitor::actionContrast( int p_contrast ) +{ + if ( purpose != CAPTURE ) + { + if ( p_contrast >= 0 ) + { + shared_data->contrast = p_contrast; + shared_data->action |= SET_SETTINGS; + int wait_loops = 10; + while ( shared_data->action & SET_SETTINGS ) + { + if ( wait_loops-- ) + usleep( 100000 ); + else + { + Warning( "Timed out waiting to set contrast" ); + return( -1 ); + } + } + } + else + { + shared_data->action |= GET_SETTINGS; + int wait_loops = 10; + while ( shared_data->action & GET_SETTINGS ) + { + if ( wait_loops-- ) + usleep( 100000 ); + else + { + Warning( "Timed out waiting to get contrast" ); + return( -1 ); + } + } + } + return( shared_data->contrast ); + } + return( camera->Contrast( p_contrast ) ); +} + +int Monitor::actionHue( int p_hue ) +{ + if ( purpose != CAPTURE ) + { + if ( p_hue >= 0 ) + { + shared_data->hue = p_hue; + shared_data->action |= SET_SETTINGS; + int wait_loops = 10; + while ( shared_data->action & SET_SETTINGS ) + { + if ( wait_loops-- ) + usleep( 100000 ); + else + { + Warning( "Timed out waiting to set hue" ); + return( -1 ); + } + } + } + else + { + shared_data->action |= GET_SETTINGS; + int wait_loops = 10; + while ( shared_data->action & GET_SETTINGS ) + { + if ( wait_loops-- ) + usleep( 100000 ); + else + { + Warning( "Timed out waiting to get hue" ); + return( -1 ); + } + } + } + return( shared_data->hue ); + } + return( camera->Hue( p_hue ) ); +} + +int Monitor::actionColour( int p_colour ) +{ + if ( purpose != CAPTURE ) + { + if ( p_colour >= 0 ) + { + shared_data->colour = p_colour; + shared_data->action |= SET_SETTINGS; + int wait_loops = 10; + while ( shared_data->action & SET_SETTINGS ) + { + if ( wait_loops-- ) + usleep( 100000 ); + else + { + Warning( "Timed out waiting to set colour" ); + return( -1 ); + } + } + } + else + { + shared_data->action |= GET_SETTINGS; + int wait_loops = 10; + while ( shared_data->action & GET_SETTINGS ) + { + if ( wait_loops-- ) + usleep( 100000 ); + else + { + Warning( "Timed out waiting to get colour" ); + return( -1 ); + } + } + } + return( shared_data->colour ); + } + return( camera->Colour( p_colour ) ); +} + +void Monitor::DumpZoneImage( const char *zone_string ) +{ + int exclude_id = 0; + int extra_colour = 0; + Polygon extra_zone; + + if ( zone_string ) + { + if ( !Zone::ParseZoneString( zone_string, exclude_id, extra_colour, extra_zone ) ) + { + Error( "Failed to parse zone string, ignoring" ); + } + } + + int index = shared_data->last_write_index; + Snapshot *snap = &image_buffer[index]; + Image *snap_image = snap->image; + + Image zone_image( *snap_image ); + if(zone_image.Colours() == ZM_COLOUR_GRAY8) { + zone_image.Colourise(ZM_COLOUR_RGB24, ZM_SUBPIX_ORDER_RGB ); + } + + for( int i = 0; i < n_zones; i++ ) + { + if ( exclude_id && (!extra_colour || extra_zone.getNumCoords()) && zones[i]->Id() == exclude_id ) + continue; + + Rgb colour; + if ( exclude_id && !extra_zone.getNumCoords() && zones[i]->Id() == exclude_id ) + { + colour = extra_colour; + } + else + { + if ( zones[i]->IsActive() ) + { + colour = RGB_RED; + } + else if ( zones[i]->IsInclusive() ) + { + colour = RGB_ORANGE; + } + else if ( zones[i]->IsExclusive() ) + { + colour = RGB_PURPLE; + } + else if ( zones[i]->IsPreclusive() ) + { + colour = RGB_BLUE; + } + else + { + colour = RGB_WHITE; + } + } + zone_image.Fill( colour, 2, zones[i]->GetPolygon() ); + zone_image.Outline( colour, zones[i]->GetPolygon() ); + } + + if ( extra_zone.getNumCoords() ) + { + zone_image.Fill( extra_colour, 2, extra_zone ); + zone_image.Outline( extra_colour, extra_zone ); + } + + static char filename[PATH_MAX]; + snprintf( filename, sizeof(filename), "Zones%d.jpg", id ); + zone_image.WriteJpeg( filename ); +} + +void Monitor::DumpImage( Image *dump_image ) const +{ + if ( image_count && !(image_count%10) ) + { + static char filename[PATH_MAX]; + static char new_filename[PATH_MAX]; + snprintf( filename, sizeof(filename), "Monitor%d.jpg", id ); + snprintf( new_filename, sizeof(new_filename), "Monitor%d-new.jpg", id ); + dump_image->WriteJpeg( new_filename ); + rename( new_filename, filename ); + } +} + +bool Monitor::CheckSignal( const Image *image ) +{ + static bool static_undef = true; + /* RGB24 colors */ + static uint8_t red_val; + static uint8_t green_val; + static uint8_t blue_val; + static uint8_t grayscale_val; /* 8bit grayscale color */ + static Rgb colour_val; /* RGB32 color */ + static int usedsubpixorder; + + if ( config.signal_check_points > 0 ) + { + if ( static_undef ) + { + static_undef = false; + usedsubpixorder = camera->SubpixelOrder(); + colour_val = rgb_convert(signal_check_colour, ZM_SUBPIX_ORDER_BGR); /* HTML colour code is actually BGR in memory, we want RGB */ + colour_val = rgb_convert(colour_val, usedsubpixorder); + red_val = RED_VAL_BGRA(signal_check_colour); + green_val = GREEN_VAL_BGRA(signal_check_colour); + blue_val = BLUE_VAL_BGRA(signal_check_colour); + grayscale_val = signal_check_colour & 0xff; /* Clear all bytes but lowest byte */ + } + + const uint8_t *buffer = image->Buffer(); + int pixels = image->Pixels(); + int width = image->Width(); + int colours = image->Colours(); + + int index = 0; + for ( int i = 0; i < config.signal_check_points; i++ ) + { + while( true ) + { + index = (int)(((long long)rand()*(long long)(pixels-1))/RAND_MAX); + if ( !config.timestamp_on_capture || !label_format[0] ) + break; + // Avoid sampling the rows with timestamp in + if ( index < (label_coord.Y()*width) || index >= (label_coord.Y()+Image::LINE_HEIGHT)*width ) + break; + } + + if(colours == ZM_COLOUR_GRAY8) { + if ( *(buffer+index) != grayscale_val ) + return true; + + } else if(colours == ZM_COLOUR_RGB24) { + const uint8_t *ptr = buffer+(index*colours); + + if ( usedsubpixorder == ZM_SUBPIX_ORDER_BGR) { + if ( (RED_PTR_BGRA(ptr) != red_val) || (GREEN_PTR_BGRA(ptr) != green_val) || (BLUE_PTR_BGRA(ptr) != blue_val) ) + return true; + } else { + /* Assume RGB */ + if ( (RED_PTR_RGBA(ptr) != red_val) || (GREEN_PTR_RGBA(ptr) != green_val) || (BLUE_PTR_RGBA(ptr) != blue_val) ) + return true; + } + + } else if(colours == ZM_COLOUR_RGB32) { + if ( usedsubpixorder == ZM_SUBPIX_ORDER_ARGB || usedsubpixorder == ZM_SUBPIX_ORDER_ABGR) { + if ( ARGB_ABGR_ZEROALPHA(*(((const Rgb*)buffer)+index)) != ARGB_ABGR_ZEROALPHA(colour_val) ) + return true; + } else { + /* Assume RGBA or BGRA */ + if ( RGBA_BGRA_ZEROALPHA(*(((const Rgb*)buffer)+index)) != RGBA_BGRA_ZEROALPHA(colour_val) ) + return true; + } + } + + } + return( false ); + } + return( true ); +} + +bool Monitor::Analyse() +{ + if ( shared_data->last_read_index == shared_data->last_write_index ) + { + return( false ); + } + + struct timeval now; + gettimeofday( &now, NULL ); + + if ( image_count && fps_report_interval && !(image_count%fps_report_interval) ) + { + fps = double(fps_report_interval)/(now.tv_sec-last_fps_time); + Info( "%s: %d - Processing at %.2f fps", name, image_count, fps ); + last_fps_time = now.tv_sec; + } + + int index; + if ( config.opt_adaptive_skip ) + { + int read_margin = shared_data->last_read_index - shared_data->last_write_index; + if ( read_margin < 0 ) read_margin += image_buffer_count; + + int step = 1; + if ( read_margin > 0 ) + { + step = (9*image_buffer_count)/(5*read_margin); + } + + int pending_frames = shared_data->last_write_index - shared_data->last_read_index; + if ( pending_frames < 0 ) pending_frames += image_buffer_count; + + Debug( 4, "RI:%d, WI: %d, PF = %d, RM = %d, Step = %d", shared_data->last_read_index, shared_data->last_write_index, pending_frames, read_margin, step ); + if ( step <= pending_frames ) + { + index = (shared_data->last_read_index+step)%image_buffer_count; + } + else + { + if ( pending_frames ) + { + Warning( "Approaching buffer overrun, consider slowing capture, simplifying analysis or increasing ring buffer size" ); + } + index = shared_data->last_write_index%image_buffer_count; + } + } + else + { + index = shared_data->last_write_index%image_buffer_count; + } + + Snapshot *snap = &image_buffer[index]; + struct timeval *timestamp = snap->timestamp; + Image *snap_image = snap->image; + + if ( shared_data->action ) + { + if ( shared_data->action & RELOAD ) + { + Info( "Received reload indication at count %d", image_count ); + shared_data->action &= ~RELOAD; + Reload(); + } + if ( shared_data->action & SUSPEND ) + { + if ( Active() ) + { + Info( "Received suspend indication at count %d", image_count ); + shared_data->active = false; + //closeEvent(); + } + if ( config.max_suspend_time ) + { + auto_resume_time = now.tv_sec + config.max_suspend_time; + } + shared_data->action &= ~SUSPEND; + } + if ( shared_data->action & RESUME ) + { + if ( Enabled() && !Active() ) + { + Info( "Received resume indication at count %d", image_count ); + shared_data->active = true; + ref_image = *snap_image; + ready_count = image_count+(warmup_count/2); + shared_data->alarm_x = shared_data->alarm_y = -1; + } + shared_data->action &= ~RESUME; + } + } + if ( auto_resume_time && (now.tv_sec >= auto_resume_time) ) + { + Info( "Auto resuming at count %d", image_count ); + shared_data->active = true; + ref_image = *snap_image; + ready_count = image_count+(warmup_count/2); + auto_resume_time = 0; + } + + static bool static_undef = true; + static struct timeval **timestamps; + static Image **images; + static int last_section_mod = 0; + static bool last_signal; + + if ( static_undef ) + { + static_undef = false; + timestamps = new struct timeval *[pre_event_count]; + images = new Image *[pre_event_count]; + last_signal = shared_data->signal; + } + + if ( Enabled() ) + { + bool signal = shared_data->signal; + bool signal_change = (signal != last_signal); + if ( trigger_data->trigger_state != TRIGGER_OFF ) + { + unsigned int score = 0; + if ( Ready() ) + { + std::string cause; + Event::StringSetMap noteSetMap; + + if ( trigger_data->trigger_state == TRIGGER_ON ) + { + score += trigger_data->trigger_score; + if ( !event ) + { + if ( cause.length() ) + cause += ", "; + cause += trigger_data->trigger_cause; + } + Event::StringSet noteSet; + noteSet.insert( trigger_data->trigger_text ); + noteSetMap[trigger_data->trigger_cause] = noteSet; + } + if ( signal_change ) + { + const char *signalText; + if ( !signal ) + signalText = "Lost"; + else + { + signalText = "Reacquired"; + score += 100; + } + Warning( "%s: %s", SIGNAL_CAUSE, signalText ); + if ( event && !signal ) + { + Info( "%s: %03d - Closing event %d, signal loss", name, image_count, event->Id() ); + closeEvent(); + last_section_mod = 0; + } + if ( !event ) + { + if ( cause.length() ) + cause += ", "; + cause += SIGNAL_CAUSE; + } + Event::StringSet noteSet; + noteSet.insert( signalText ); + noteSetMap[SIGNAL_CAUSE] = noteSet; + shared_data->state = state = IDLE; + shared_data->active = signal; + ref_image = *snap_image; + } + else if ( signal && Active() && (function == MODECT || function == MOCORD) ) + { + Event::StringSet zoneSet; + int motion_score = DetectMotion( *snap_image, zoneSet ); + if ( motion_score ) + { + if ( !event ) + { + score += motion_score; + if ( cause.length() ) + cause += ", "; + cause += MOTION_CAUSE; + } + else + { + score += motion_score; + } + noteSetMap[MOTION_CAUSE] = zoneSet; + } + shared_data->active = signal; + } + if ( (!signal_change && signal) && n_linked_monitors > 0 ) + { + bool first_link = true; + Event::StringSet noteSet; + for ( int i = 0; i < n_linked_monitors; i++ ) + { + if ( linked_monitors[i]->isConnected() ) + { + if ( linked_monitors[i]->hasAlarmed() ) + { + if ( !event ) + { + if ( first_link ) + { + if ( cause.length() ) + cause += ", "; + cause += LINKED_CAUSE; + first_link = false; + } + } + noteSet.insert( linked_monitors[i]->Name() ); + score += 50; + } + } + else + { + linked_monitors[i]->connect(); + } + } + if ( noteSet.size() > 0 ) + noteSetMap[LINKED_CAUSE] = noteSet; + } + if ( (!signal_change && signal) && (function == RECORD || function == MOCORD) ) + { + if ( event ) + { + int section_mod = timestamp->tv_sec%section_length; + if ( section_mod < last_section_mod ) + { + if ( state == IDLE || state == TAPE || event_close_mode == CLOSE_TIME ) + { + if ( state == TAPE ) + { + shared_data->state = state = IDLE; + Info( "%s: %03d - Closing event %d, section end", name, image_count, event->Id() ) + } + else + Info( "%s: %03d - Closing event %d, section end forced ", name, image_count, event->Id() ); + closeEvent(); + last_section_mod = 0; + } + } + else + { + last_section_mod = section_mod; + } + } + if ( !event ) + { + + // Create event + event = new Event( this, *timestamp, "Continuous", noteSetMap ); + shared_data->last_event = event->Id(); + + Info( "%s: %03d - Opening new event %d, section start", name, image_count, event->Id() ); + + /* To prevent cancelling out an existing alert\prealarm\alarm state */ + if ( state == IDLE ) + { + shared_data->state = state = TAPE; + } + + //if ( config.overlap_timed_events ) + if ( false ) + { + int pre_index = ((index+image_buffer_count)-pre_event_count)%image_buffer_count; + int pre_event_images = pre_event_count; + while ( pre_event_images && !image_buffer[pre_index].timestamp->tv_sec ) + { + pre_index = (pre_index+1)%image_buffer_count; + pre_event_images--; + } + + if ( pre_event_images ) + { + for ( int i = 0; i < pre_event_images; i++ ) + { + timestamps[i] = image_buffer[pre_index].timestamp; + images[i] = image_buffer[pre_index].image; + + pre_index = (pre_index+1)%image_buffer_count; + } + event->AddFrames( pre_event_images, images, timestamps ); + } + } + } + } + if ( score ) + { + if ( (state == IDLE || state == TAPE || state == PREALARM ) ) + { + if ( Event::PreAlarmCount() >= (alarm_frame_count-1) ) + { + Info( "%s: %03d - Gone into alarm state", name, image_count ); + shared_data->state = state = ALARM; + if ( signal_change || (function != MOCORD && state != ALERT) ) + { + int pre_index; + if ( alarm_frame_count > 1 ) + pre_index = ((index+image_buffer_count)-((alarm_frame_count-1)+pre_event_count))%image_buffer_count; + else + pre_index = ((index+image_buffer_count)-pre_event_count)%image_buffer_count; + + int pre_event_images = pre_event_count; + while ( pre_event_images && !image_buffer[pre_index].timestamp->tv_sec ) + { + pre_index = (pre_index+1)%image_buffer_count; + pre_event_images--; + } + + event = new Event( this, *(image_buffer[pre_index].timestamp), cause, noteSetMap ); + shared_data->last_event = event->Id(); + + Info( "%s: %03d - Opening new event %d, alarm start", name, image_count, event->Id() ); + + if ( pre_event_images ) + { + for ( int i = 0; i < pre_event_images; i++ ) + { + timestamps[i] = image_buffer[pre_index].timestamp; + images[i] = image_buffer[pre_index].image; + + pre_index = (pre_index+1)%image_buffer_count; + } + event->AddFrames( pre_event_images, images, timestamps ); + } + if ( alarm_frame_count ) + { + event->SavePreAlarmFrames(); + } + } + } + else if ( state != PREALARM ) + { + Info( "%s: %03d - Gone into prealarm state", name, image_count ); + shared_data->state = state = PREALARM; + } + } + else if ( state == ALERT ) + { + Info( "%s: %03d - Gone back into alarm state", name, image_count ); + shared_data->state = state = ALARM; + } + last_alarm_count = image_count; + } + else + { + if ( state == ALARM ) + { + Info( "%s: %03d - Gone into alert state", name, image_count ); + shared_data->state = state = ALERT; + } + else if ( state == ALERT ) + { + if ( image_count-last_alarm_count > post_event_count ) + { + Info( "%s: %03d - Left alarm state (%d) - %d(%d) images", name, image_count, event->Id(), event->Frames(), event->AlarmFrames() ); + //if ( function != MOCORD || event_close_mode == CLOSE_ALARM || event->Cause() == SIGNAL_CAUSE ) + if ( function != MOCORD || event_close_mode == CLOSE_ALARM ) + { + shared_data->state = state = IDLE; + Info( "%s: %03d - Closing event %d, alarm end%s", name, image_count, event->Id(), (function==MOCORD)?", section truncated":"" ); + closeEvent(); + } + else + { + shared_data->state = state = TAPE; + } + } + } + if ( state == PREALARM ) + { + if ( function != MOCORD ) + { + shared_data->state = state = IDLE; + } + else + { + shared_data->state = state = TAPE; + } + } + if ( Event::PreAlarmCount() ) + Event::EmptyPreAlarmFrames(); + } + if ( state != IDLE ) + { + if ( state == PREALARM || state == ALARM ) + { + if ( config.create_analysis_images ) + { + bool got_anal_image = false; + Image alarm_image( *snap_image ); + for( int i = 0; i < n_zones; i++ ) + { + if ( zones[i]->Alarmed() ) + { + if ( zones[i]->AlarmImage() ) + { + alarm_image.Overlay( *(zones[i]->AlarmImage()) ); + got_anal_image = true; + } + if ( config.record_event_stats && state == ALARM ) + { + zones[i]->RecordStats( event ); + } + } + } + if ( got_anal_image ) + { + if ( state == PREALARM ) + Event::AddPreAlarmFrame( snap_image, *timestamp, score, &alarm_image ); + else + event->AddFrame( snap_image, *timestamp, score, &alarm_image ); + } + else + { + if ( state == PREALARM ) + Event::AddPreAlarmFrame( snap_image, *timestamp, score ); + else + event->AddFrame( snap_image, *timestamp, score ); + } + } + else + { + for( int i = 0; i < n_zones; i++ ) + { + if ( zones[i]->Alarmed() ) + { + if ( config.record_event_stats && state == ALARM ) + { + zones[i]->RecordStats( event ); + } + } + } + if ( state == PREALARM ) + Event::AddPreAlarmFrame( snap_image, *timestamp, score ); + else + event->AddFrame( snap_image, *timestamp, score ); + } + if ( event && noteSetMap.size() > 0 ) + event->updateNotes( noteSetMap ); + } + else if ( state == ALERT ) + { + event->AddFrame( snap_image, *timestamp ); + if ( noteSetMap.size() > 0 ) + event->updateNotes( noteSetMap ); + } + else if ( state == TAPE ) + { + if ( !(image_count%(frame_skip+1)) ) + { + if ( config.bulk_frame_interval > 1 ) + { + event->AddFrame( snap_image, *timestamp, (event->Frames()AddFrame( snap_image, *timestamp ); + } + } + } + } + } + } + else + { + if ( event ) + { + Info( "%s: %03d - Closing event %d, trigger off", name, image_count, event->Id() ); + closeEvent(); + } + shared_data->state = state = IDLE; + last_section_mod = 0; + } + if ( (!signal_change && signal) && (function == MODECT || function == MOCORD) && (config.blend_alarmed_images || state != ALARM) ) + { + ref_image.Blend( *snap_image, ref_blend_perc ); + } + last_signal = signal; + } + + shared_data->last_read_index = index%image_buffer_count; + //shared_data->last_read_time = image_buffer[index].timestamp->tv_sec; + shared_data->last_read_time = now.tv_sec; + image_count++; + + return( true ); +} + +void Monitor::Reload() +{ + Debug( 1, "Reloading monitor %s", name ); + + if ( event ) + Info( "%s: %03d - Closing event %d, reloading", name, image_count, event->Id() ); + + closeEvent(); + + static char sql[ZM_SQL_MED_BUFSIZ]; + snprintf( sql, sizeof(sql), "select Function+0, Enabled, LinkedMonitors, EventPrefix, LabelFormat, LabelX, LabelY, WarmupCount, PreEventCount, PostEventCount, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Id = '%d'", id ); + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + + MYSQL_RES *result = mysql_store_result( &dbconn ); + if ( !result ) + { + Error( "Can't use query result: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + int n_monitors = mysql_num_rows( result ); + if ( n_monitors != 1 ) + { + Error( "Bogus number of monitors, %d, returned. Can't reload", n_monitors ); + return; + } + + if ( MYSQL_ROW dbrow = mysql_fetch_row( result ) ) + { + int index = 0; + function = (Function)atoi(dbrow[index++]); + enabled = atoi(dbrow[index++]); + const char *p_linked_monitors = dbrow[index++]; + strncpy( event_prefix, dbrow[index++], sizeof(event_prefix) ); + strncpy( label_format, dbrow[index++], sizeof(label_format) ); + label_coord = Coord( atoi(dbrow[index]), atoi(dbrow[index+1]) ); index += 2; + warmup_count = atoi(dbrow[index++]); + pre_event_count = atoi(dbrow[index++]); + post_event_count = atoi(dbrow[index++]); + alarm_frame_count = atoi(dbrow[index++]); + section_length = atoi(dbrow[index++]); + frame_skip = atoi(dbrow[index++]); + capture_delay = (dbrow[index]&&atof(dbrow[index])>0.0)?int(DT_PREC_3/atof(dbrow[index])):0; index++; + alarm_capture_delay = (dbrow[index]&&atof(dbrow[index])>0.0)?int(DT_PREC_3/atof(dbrow[index])):0; index++; + fps_report_interval = atoi(dbrow[index++]); + ref_blend_perc = atoi(dbrow[index++]); + track_motion = atoi(dbrow[index++]); + if ( dbrow[index][0] == '#' ) + signal_check_colour = strtol(dbrow[index]+1,0,16); + else + signal_check_colour = strtol(dbrow[index],0,16); + index++; + + shared_data->state = state = IDLE; + shared_data->alarm_x = shared_data->alarm_y = -1; + if ( enabled ) + shared_data->active = true; + ready_count = image_count+warmup_count; + + ReloadLinkedMonitors( p_linked_monitors ); + } + if ( mysql_errno( &dbconn ) ) + { + Error( "Can't fetch row: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + mysql_free_result( result ); + + ReloadZones(); +} + +void Monitor::ReloadZones() +{ + Debug( 1, "Reloading zones for monitor %s", name ); + for( int i = 0; i < n_zones; i++ ) + { + delete zones[i]; + } + delete[] zones; + zones = 0; + n_zones = Zone::Load( this, zones ); + //DumpZoneImage(); +} + +void Monitor::ReloadLinkedMonitors( const char *p_linked_monitors ) +{ + Debug( 1, "Reloading linked monitors for monitor %s, '%s'", name, p_linked_monitors ); + if ( n_linked_monitors ) + { + for( int i = 0; i < n_linked_monitors; i++ ) + { + delete linked_monitors[i]; + } + delete[] linked_monitors; + linked_monitors = 0; + } + + n_linked_monitors = 0; + if ( p_linked_monitors ) + { + int n_link_ids = 0; + int link_ids[256]; + + char link_id_str[8]; + char *dest_ptr = link_id_str; + const char *src_ptr = p_linked_monitors; + while( 1 ) + { + dest_ptr = link_id_str; + while( *src_ptr >= '0' && *src_ptr <= '9' ) + { + if ( (dest_ptr-link_id_str) < (sizeof(link_id_str)-1) ) + { + *dest_ptr++ = *src_ptr++; + } + else + { + break; + } + } + // Add the link monitor + if ( dest_ptr != link_id_str ) + { + *dest_ptr = '\0'; + int link_id = atoi(link_id_str); + if ( link_id > 0 && link_id != id) + { + Debug( 3, "Found linked monitor id %d", link_id ); + int j; + for ( j = 0; j < n_link_ids; j++ ) + { + if ( link_ids[j] == link_id ) + break; + } + if ( j == n_link_ids ) // Not already found + { + link_ids[n_link_ids++] = link_id; + } + } + } + if ( !*src_ptr ) + break; + while( *src_ptr && (*src_ptr < '0' || *src_ptr > '9') ) + src_ptr++; + if ( !*src_ptr ) + break; + } + if ( n_link_ids > 0 ) + { + Debug( 1, "Linking to %d monitors", n_link_ids ); + linked_monitors = new MonitorLink *[n_link_ids]; + int count = 0; + for ( int i = 0; i < n_link_ids; i++ ) + { + Debug( 1, "Checking linked monitor %d", link_ids[i] ); + + static char sql[ZM_SQL_SML_BUFSIZ]; + snprintf( sql, sizeof(sql), "select Id, Name from Monitors where Id = %d and Function != 'None' and Function != 'Monitor' and Enabled = 1", link_ids[i] ); + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + + MYSQL_RES *result = mysql_store_result( &dbconn ); + if ( !result ) + { + Error( "Can't use query result: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + int n_monitors = mysql_num_rows( result ); + if ( n_monitors == 1 ) + { + MYSQL_ROW dbrow = mysql_fetch_row( result ); + Debug( 1, "Linking to monitor %d", link_ids[i] ); + linked_monitors[count++] = new MonitorLink( link_ids[i], dbrow[1] ); + } + else + { + Warning( "Can't link to monitor %d, invalid id, function or not enabled", link_ids[i] ); + } + mysql_free_result( result ); + } + n_linked_monitors = count; + } + } +} + +#if ZM_HAS_V4L +int Monitor::LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose purpose ) +{ + static char sql[ZM_SQL_MED_BUFSIZ]; + if ( !device[0] ) + { + strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' order by Device, Channel", sizeof(sql) ); + } + else + { + snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' and Device = '%s' order by Channel", device ); + } + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + + MYSQL_RES *result = mysql_store_result( &dbconn ); + if ( !result ) + { + Error( "Can't use query result: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + int n_monitors = mysql_num_rows( result ); + Debug( 1, "Got %d monitors", n_monitors ); + delete[] monitors; + monitors = new Monitor *[n_monitors]; + for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ ) + { + int col = 0; + + int id = atoi(dbrow[col]); col++; + const char *name = dbrow[col]; col++; + int function = atoi(dbrow[col]); col++; + int enabled = atoi(dbrow[col]); col++; + const char *linked_monitors = dbrow[col]; col++; + + const char *device = dbrow[col]; col++; + int channel = atoi(dbrow[col]); col++; + int format = atoi(dbrow[col]); col++; + const char *method = dbrow[col]; col++; + + int width = atoi(dbrow[col]); col++; + int height = atoi(dbrow[col]); col++; + int colours = atoi(dbrow[col]); col++; + int palette = atoi(dbrow[col]); col++; + Orientation orientation = (Orientation)atoi(dbrow[col]); col++; + unsigned int deinterlacing = atoi(dbrow[col]); col++; + int brightness = atoi(dbrow[col]); col++; + int contrast = atoi(dbrow[col]); col++; + int hue = atoi(dbrow[col]); col++; + int colour = atoi(dbrow[col]); col++; + + const char *event_prefix = dbrow[col]; col++; + const char *label_format = dbrow[col]; col++; + + int label_x = atoi(dbrow[col]); col++; + int label_y = atoi(dbrow[col]); col++; + + int image_buffer_count = atoi(dbrow[col]); col++; + int warmup_count = atoi(dbrow[col]); col++; + int pre_event_count = atoi(dbrow[col]); col++; + int post_event_count = atoi(dbrow[col]); col++; + int stream_replay_buffer = atoi(dbrow[col]); col++; + int alarm_frame_count = atoi(dbrow[col]); col++; + int section_length = atoi(dbrow[col]); col++; + int frame_skip = atoi(dbrow[col]); col++; + int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int fps_report_interval = atoi(dbrow[col]); col++; + int ref_blend_perc = atoi(dbrow[col]); col++; + int track_motion = atoi(dbrow[col]); col++; + int signal_check_colour; + if ( dbrow[col][0] == '#' ) + signal_check_colour = strtol(dbrow[col]+1,0,16); + else + signal_check_colour = strtol(dbrow[col],0,16); + col++; + + int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width); + int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height); + + int extras = (deinterlacing>>24)&0xff; + + Camera *camera = new LocalCamera( + id, + device, + channel, + format, + method, + cam_width, + cam_height, + colours, + palette, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE, + extras + ); + + monitors[i] = new Monitor( + id, + name, + function, + enabled, + linked_monitors, + camera, + orientation, + deinterlacing, + event_prefix, + label_format, + Coord( label_x, label_y ), + image_buffer_count, + warmup_count, + pre_event_count, + post_event_count, + stream_replay_buffer, + alarm_frame_count, + section_length, + frame_skip, + capture_delay, + alarm_capture_delay, + fps_report_interval, + ref_blend_perc, + track_motion, + signal_check_colour, + purpose + ); + Zone **zones = 0; + int n_zones = Zone::Load( monitors[i], zones ); + monitors[i]->AddZones( n_zones, zones ); + Debug( 1, "Loaded monitor %d(%s), %d zones", id, name, n_zones ); + } + if ( mysql_errno( &dbconn ) ) + { + Error( "Can't fetch row: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + // Yadda yadda + mysql_free_result( result ); + + return( n_monitors ); +} +#endif // ZM_HAS_V4L + +int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const char *port, const char *path, Monitor **&monitors, Purpose purpose ) +{ + static char sql[ZM_SQL_MED_BUFSIZ]; + if ( !protocol ) + { + strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Remote'", sizeof(sql) ); + } + else + { + snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Remote' and Protocol = '%s' and Host = '%s' and Port = '%s' and Path = '%s'", protocol, host, port, path ); + } + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + + MYSQL_RES *result = mysql_store_result( &dbconn ); + if ( !result ) + { + Error( "Can't use query result: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + int n_monitors = mysql_num_rows( result ); + Debug( 1, "Got %d monitors", n_monitors ); + delete[] monitors; + monitors = new Monitor *[n_monitors]; + for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ ) + { + int col = 0; + + int id = atoi(dbrow[col]); col++; + std::string name = dbrow[col]; col++; + int function = atoi(dbrow[col]); col++; + int enabled = atoi(dbrow[col]); col++; + const char *linked_monitors = dbrow[col]; col++; + + std::string protocol = dbrow[col]; col++; + std::string method = dbrow[col]; col++; + std::string host = dbrow[col]; col++; + std::string port = dbrow[col]; col++; + std::string path = dbrow[col]; col++; + + int width = atoi(dbrow[col]); col++; + int height = atoi(dbrow[col]); col++; + int colours = atoi(dbrow[col]); col++; + /* int palette = atoi(dbrow[col]); */ col++; + Orientation orientation = (Orientation)atoi(dbrow[col]); col++; + unsigned int deinterlacing = atoi(dbrow[col]); col++; + int brightness = atoi(dbrow[col]); col++; + int contrast = atoi(dbrow[col]); col++; + int hue = atoi(dbrow[col]); col++; + int colour = atoi(dbrow[col]); col++; + + std::string event_prefix = dbrow[col]; col++; + std::string label_format = dbrow[col]; col++; + + int label_x = atoi(dbrow[col]); col++; + int label_y = atoi(dbrow[col]); col++; + + int image_buffer_count = atoi(dbrow[col]); col++; + int warmup_count = atoi(dbrow[col]); col++; + int pre_event_count = atoi(dbrow[col]); col++; + int post_event_count = atoi(dbrow[col]); col++; + int stream_replay_buffer = atoi(dbrow[col]); col++; + int alarm_frame_count = atoi(dbrow[col]); col++; + int section_length = atoi(dbrow[col]); col++; + int frame_skip = atoi(dbrow[col]); col++; + int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int fps_report_interval = atoi(dbrow[col]); col++; + int ref_blend_perc = atoi(dbrow[col]); col++; + int track_motion = atoi(dbrow[col]); col++; + + int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width); + int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height); + + Camera *camera = 0; + if ( protocol == "http" ) + { + camera = new RemoteCameraHttp( + id, + method, + host, // Host + port, // Port + path, // Path + cam_width, + cam_height, + colours, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE + ); + } +#if HAVE_LIBAVFORMAT + else if ( protocol == "rtsp" ) + { + camera = new RemoteCameraRtsp( + id, + method, + host, // Host + port, // Port + path, // Path + cam_width, + cam_height, + colours, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE + ); + } +#endif // HAVE_LIBAVFORMAT + else + { + Fatal( "Unexpected remote camera protocol '%s'", protocol.c_str() ); + } + + monitors[i] = new Monitor( + id, + name.c_str(), + function, + enabled, + linked_monitors, + camera, + orientation, + deinterlacing, + event_prefix.c_str(), + label_format.c_str(), + Coord( label_x, label_y ), + image_buffer_count, + warmup_count, + pre_event_count, + post_event_count, + stream_replay_buffer, + alarm_frame_count, + section_length, + frame_skip, + capture_delay, + alarm_capture_delay, + fps_report_interval, + ref_blend_perc, + track_motion, + RGB_WHITE, + purpose + ); + Zone **zones = 0; + int n_zones = Zone::Load( monitors[i], zones ); + monitors[i]->AddZones( n_zones, zones ); + Debug( 1, "Loaded monitor %d(%s), %d zones", id, name.c_str(), n_zones ); + } + if ( mysql_errno( &dbconn ) ) + { + Error( "Can't fetch row: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + // Yadda yadda + mysql_free_result( result ); + + return( n_monitors ); +} + +int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose purpose ) +{ + static char sql[ZM_SQL_MED_BUFSIZ]; + if ( !file[0] ) + { + strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'File'", sizeof(sql) ); + } + else + { + snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'File' and Path = '%s'", file ); + } + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + + MYSQL_RES *result = mysql_store_result( &dbconn ); + if ( !result ) + { + Error( "Can't use query result: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + int n_monitors = mysql_num_rows( result ); + Debug( 1, "Got %d monitors", n_monitors ); + delete[] monitors; + monitors = new Monitor *[n_monitors]; + for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ ) + { + int col = 0; + + int id = atoi(dbrow[col]); col++; + const char *name = dbrow[col]; col++; + int function = atoi(dbrow[col]); col++; + int enabled = atoi(dbrow[col]); col++; + const char *linked_monitors = dbrow[col]; col++; + + const char *path = dbrow[col]; col++; + + int width = atoi(dbrow[col]); col++; + int height = atoi(dbrow[col]); col++; + int colours = atoi(dbrow[col]); col++; + /* int palette = atoi(dbrow[col]); */ col++; + Orientation orientation = (Orientation)atoi(dbrow[col]); col++; + unsigned int deinterlacing = atoi(dbrow[col]); col++; + int brightness = atoi(dbrow[col]); col++; + int contrast = atoi(dbrow[col]); col++; + int hue = atoi(dbrow[col]); col++; + int colour = atoi(dbrow[col]); col++; + + const char *event_prefix = dbrow[col]; col++; + const char *label_format = dbrow[col]; col++; + + int label_x = atoi(dbrow[col]); col++; + int label_y = atoi(dbrow[col]); col++; + + int image_buffer_count = atoi(dbrow[col]); col++; + int warmup_count = atoi(dbrow[col]); col++; + int pre_event_count = atoi(dbrow[col]); col++; + int post_event_count = atoi(dbrow[col]); col++; + int stream_replay_buffer = atoi(dbrow[col]); col++; + int alarm_frame_count = atoi(dbrow[col]); col++; + int section_length = atoi(dbrow[col]); col++; + int frame_skip = atoi(dbrow[col]); col++; + int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int fps_report_interval = atoi(dbrow[col]); col++; + int ref_blend_perc = atoi(dbrow[col]); col++; + int track_motion = atoi(dbrow[col]); col++; + + int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width); + int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height); + + Camera *camera = new FileCamera( + id, + path, // File + cam_width, + cam_height, + colours, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE + ); + + monitors[i] = new Monitor( + id, + name, + function, + enabled, + linked_monitors, + camera, + orientation, + deinterlacing, + event_prefix, + label_format, + Coord( label_x, label_y ), + image_buffer_count, + warmup_count, + pre_event_count, + post_event_count, + stream_replay_buffer, + alarm_frame_count, + section_length, + frame_skip, + capture_delay, + alarm_capture_delay, + fps_report_interval, + ref_blend_perc, + track_motion, + RGB_WHITE, + purpose + ); + Zone **zones = 0; + int n_zones = Zone::Load( monitors[i], zones ); + monitors[i]->AddZones( n_zones, zones ); + Debug( 1, "Loaded monitor %d(%s), %d zones", id, name, n_zones ); + } + if ( mysql_errno( &dbconn ) ) + { + Error( "Can't fetch row: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + // Yadda yadda + mysql_free_result( result ); + + return( n_monitors ); +} + +#if HAVE_LIBAVFORMAT +int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose purpose ) +{ + static char sql[ZM_SQL_MED_BUFSIZ]; + if ( !file[0] ) + { + strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Ffmpeg'", sizeof(sql) ); + } + else + { + snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Ffmpeg' and Path = '%s'", file ); + } + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + + MYSQL_RES *result = mysql_store_result( &dbconn ); + if ( !result ) + { + Error( "Can't use query result: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + int n_monitors = mysql_num_rows( result ); + Debug( 1, "Got %d monitors", n_monitors ); + delete[] monitors; + monitors = new Monitor *[n_monitors]; + for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ ) + { + int col = 0; + + int id = atoi(dbrow[col]); col++; + const char *name = dbrow[col]; col++; + int function = atoi(dbrow[col]); col++; + int enabled = atoi(dbrow[col]); col++; + const char *linked_monitors = dbrow[col]; col++; + + const char *path = dbrow[col]; col++; + + int width = atoi(dbrow[col]); col++; + int height = atoi(dbrow[col]); col++; + int colours = atoi(dbrow[col]); col++; + /* int palette = atoi(dbrow[col]); */ col++; + Orientation orientation = (Orientation)atoi(dbrow[col]); col++; + unsigned int deinterlacing = atoi(dbrow[col]); col++; + int brightness = atoi(dbrow[col]); col++; + int contrast = atoi(dbrow[col]); col++; + int hue = atoi(dbrow[col]); col++; + int colour = atoi(dbrow[col]); col++; + + const char *event_prefix = dbrow[col]; col++; + const char *label_format = dbrow[col]; col++; + + int label_x = atoi(dbrow[col]); col++; + int label_y = atoi(dbrow[col]); col++; + + int image_buffer_count = atoi(dbrow[col]); col++; + int warmup_count = atoi(dbrow[col]); col++; + int pre_event_count = atoi(dbrow[col]); col++; + int post_event_count = atoi(dbrow[col]); col++; + int stream_replay_buffer = atoi(dbrow[col]); col++; + int alarm_frame_count = atoi(dbrow[col]); col++; + int section_length = atoi(dbrow[col]); col++; + int frame_skip = atoi(dbrow[col]); col++; + int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int fps_report_interval = atoi(dbrow[col]); col++; + int ref_blend_perc = atoi(dbrow[col]); col++; + int track_motion = atoi(dbrow[col]); col++; + + int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width); + int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height); + + Camera *camera = new FfmpegCamera( + id, + path, // File + cam_width, + cam_height, + colours, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE + ); + + monitors[i] = new Monitor( + id, + name, + function, + enabled, + linked_monitors, + camera, + orientation, + deinterlacing, + event_prefix, + label_format, + Coord( label_x, label_y ), + image_buffer_count, + warmup_count, + pre_event_count, + post_event_count, + stream_replay_buffer, + alarm_frame_count, + section_length, + frame_skip, + capture_delay, + alarm_capture_delay, + fps_report_interval, + ref_blend_perc, + track_motion, + RGB_WHITE, + purpose + ); + Zone **zones = 0; + int n_zones = Zone::Load( monitors[i], zones ); + monitors[i]->AddZones( n_zones, zones ); + Debug( 1, "Loaded monitor %d(%s), %d zones", id, name, n_zones ); + } + if ( mysql_errno( &dbconn ) ) + { + Error( "Can't fetch row: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + // Yadda yadda + mysql_free_result( result ); + + return( n_monitors ); +} +#endif // HAVE_LIBAVFORMAT + +Monitor *Monitor::Load( int id, bool load_zones, Purpose purpose ) +{ + static char sql[ZM_SQL_MED_BUFSIZ]; + snprintf( sql, sizeof(sql), "select Id, Name, Type, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Id = %d", id ); + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + + MYSQL_RES *result = mysql_store_result( &dbconn ); + if ( !result ) + { + Error( "Can't use query result: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + int n_monitors = mysql_num_rows( result ); + Debug( 1, "Got %d monitors", n_monitors ); + Monitor *monitor = 0; + for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ ) + { + int col = 0; + + int id = atoi(dbrow[col]); col++; + std::string name = dbrow[col]; col++; + std::string type = dbrow[col]; col++; + int function = atoi(dbrow[col]); col++; + int enabled = atoi(dbrow[col]); col++; + std::string linked_monitors = dbrow[col]; col++; + + std::string device = dbrow[col]; col++; + int channel = atoi(dbrow[col]); col++; + int format = atoi(dbrow[col]); col++; + + std::string protocol = dbrow[col]; col++; + std::string method = dbrow[col]; col++; + std::string host = dbrow[col]; col++; + std::string port = dbrow[col]; col++; + std::string path = dbrow[col]; col++; + + int width = atoi(dbrow[col]); col++; + int height = atoi(dbrow[col]); col++; + int colours = atoi(dbrow[col]); col++; + int palette = atoi(dbrow[col]); col++; + Orientation orientation = (Orientation)atoi(dbrow[col]); col++; + unsigned int deinterlacing = atoi(dbrow[col]); col++; + int brightness = atoi(dbrow[col]); col++; + int contrast = atoi(dbrow[col]); col++; + int hue = atoi(dbrow[col]); col++; + int colour = atoi(dbrow[col]); col++; + + std::string event_prefix = dbrow[col]; col++; + std::string label_format = dbrow[col]; col++; + + int label_x = atoi(dbrow[col]); col++; + int label_y = atoi(dbrow[col]); col++; + + int image_buffer_count = atoi(dbrow[col]); col++; + int warmup_count = atoi(dbrow[col]); col++; + int pre_event_count = atoi(dbrow[col]); col++; + int post_event_count = atoi(dbrow[col]); col++; + int stream_replay_buffer = atoi(dbrow[col]); col++; + int alarm_frame_count = atoi(dbrow[col]); col++; + int section_length = atoi(dbrow[col]); col++; + int frame_skip = atoi(dbrow[col]); col++; + int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++; + int fps_report_interval = atoi(dbrow[col]); col++; + int ref_blend_perc = atoi(dbrow[col]); col++; + int track_motion = atoi(dbrow[col]); col++; + int signal_check_colour; + if ( dbrow[col][0] == '#' ) + signal_check_colour = strtol(dbrow[col]+1,0,16); + else + signal_check_colour = strtol(dbrow[col],0,16); + + int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width); + int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height); + + int extras = (deinterlacing>>24)&0xff; + + Camera *camera = 0; + if ( type == "Local" ) + { +#if ZM_HAS_V4L + camera = new LocalCamera( + id, + device.c_str(), + channel, + format, + method, + cam_width, + cam_height, + colours, + palette, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE, + extras + ); +#else // ZM_HAS_V4L + Fatal( "You must have video4linux libraries and headers installed to use local analog or USB cameras for monitor %d", id ); +#endif // ZM_HAS_V4L + } + else if ( type == "Remote" ) + { + if ( protocol == "http" ) + { + camera = new RemoteCameraHttp( + id, + method.c_str(), + host.c_str(), + port.c_str(), + path.c_str(), + cam_width, + cam_height, + colours, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE + ); + } + else if ( protocol == "rtsp" ) + { +#if HAVE_LIBAVFORMAT + camera = new RemoteCameraRtsp( + id, + method.c_str(), + host.c_str(), + port.c_str(), + path.c_str(), + cam_width, + cam_height, + colours, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE + ); +#else // HAVE_LIBAVFORMAT + Fatal( "You must have ffmpeg libraries installed to use remote camera protocol '%s' for monitor %d", protocol.c_str(), id ); +#endif // HAVE_LIBAVFORMAT + } + else + { + Fatal( "Unexpected remote camera protocol '%s' for monitor %d", protocol.c_str(), id ); + } + } + else if ( type == "File" ) + { + camera = new FileCamera( + id, + path.c_str(), + cam_width, + cam_height, + colours, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE + ); + } + else if ( type == "Ffmpeg" ) + { +#if HAVE_LIBAVFORMAT + camera = new FfmpegCamera( + id, + path.c_str(), + cam_width, + cam_height, + colours, + brightness, + contrast, + hue, + colour, + purpose==CAPTURE + ); +#else // HAVE_LIBAVFORMAT + Fatal( "You must have ffmpeg libraries installed to use ffmpeg cameras for monitor %d", id ); +#endif // HAVE_LIBAVFORMAT + } + else + { + Fatal( "Bogus monitor type '%s' for monitor %d", type.c_str(), id ); + } + monitor = new Monitor( + id, + name.c_str(), + function, + enabled, + linked_monitors.c_str(), + camera, + orientation, + deinterlacing, + event_prefix.c_str(), + label_format.c_str(), + Coord( label_x, label_y ), + image_buffer_count, + warmup_count, + pre_event_count, + post_event_count, + stream_replay_buffer, + alarm_frame_count, + section_length, + frame_skip, + capture_delay, + alarm_capture_delay, + fps_report_interval, + ref_blend_perc, + track_motion, + signal_check_colour, + purpose + ); + + int n_zones = 0; + if ( load_zones ) + { + Zone **zones = 0; + n_zones = Zone::Load( monitor, zones ); + monitor->AddZones( n_zones, zones ); + } + Debug( 1, "Loaded monitor %d(%s), %d zones", id, name.c_str(), n_zones ); + } + if ( mysql_errno( &dbconn ) ) + { + Error( "Can't fetch row: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + // Yadda yadda + mysql_free_result( result ); + + return( monitor ); +} + +int Monitor::Capture() +{ + static int FirstCapture = 1; + int captureResult; + + int index = image_count%image_buffer_count; + Image* capture_image = image_buffer[index].image; + + if ( (deinterlacing & 0xff) == 4) { + if ( FirstCapture != 1 ) { + /* Copy the next image into the shared memory */ + capture_image->CopyBuffer(*(next_buffer.image)); + } + + /* Capture a new next image */ + captureResult = camera->Capture(*(next_buffer.image)); + + if ( FirstCapture ) { + FirstCapture = 0; + return 0; + } + + } else { + /* Capture directly into image buffer, avoiding the need to memcpy() */ + captureResult = camera->Capture(*capture_image); + } + + if ( captureResult != 0 ) + { + // Unable to capture image for temporary reason + // Fake a signal loss image + capture_image->Fill( signal_check_colour ); + captureResult = 0; + } else { + captureResult = 1; + } + + if ( captureResult == 1 ) + { + + /* Deinterlacing */ + if ( (deinterlacing & 0xff) == 1 ) { + capture_image->Deinterlace_Discard(); + } else if ( (deinterlacing & 0xff) == 2 ) { + capture_image->Deinterlace_Linear(); + } else if ( (deinterlacing & 0xff) == 3 ) { + capture_image->Deinterlace_Blend(); + } else if ( (deinterlacing & 0xff) == 4 ) { + capture_image->Deinterlace_4Field( next_buffer.image, (deinterlacing>>8)&0xff ); + } else if ( (deinterlacing & 0xff) == 5 ) { + capture_image->Deinterlace_Blend_CustomRatio( (deinterlacing>>8)&0xff ); + } + + + if ( orientation != ROTATE_0 ) + { + switch ( orientation ) + { + case ROTATE_0 : + { + // No action required + break; + } + case ROTATE_90 : + case ROTATE_180 : + case ROTATE_270 : + { + capture_image->Rotate( (orientation-1)*90 ); + break; + } + case FLIP_HORI : + case FLIP_VERT : + { + capture_image->Flip( orientation==FLIP_HORI ); + break; + } + } + } + + } + if ( true ) { + + if ( capture_image->Size() != camera->ImageSize() ) + { + Error( "Captured image does not match expected size, check width, height and colour depth" ); + return( -1 ); + } + + if ( (index == shared_data->last_read_index) && (function > MONITOR) ) + { + Warning( "Buffer overrun at index %d, image %d, slow down capture, speed up analysis or increase ring buffer size", index, image_count ); + time_t now = time(0); + double approxFps = double(image_buffer_count)/double(now-image_buffer[index].timestamp->tv_sec); + time_t last_read_delta = now - shared_data->last_read_time; + if ( last_read_delta > (image_buffer_count/approxFps) ) + { + Warning( "Last image read from shared memory %ld seconds ago, zma may have gone away", last_read_delta ) + shared_data->last_read_index = image_buffer_count; + } + } + + gettimeofday( image_buffer[index].timestamp, NULL ); + if ( config.timestamp_on_capture ) + { + TimestampImage( capture_image, image_buffer[index].timestamp ); + } + shared_data->signal = CheckSignal(capture_image); + shared_data->last_write_index = index; + shared_data->last_write_time = image_buffer[index].timestamp->tv_sec; + + image_count++; + + if ( image_count && fps_report_interval && !(image_count%fps_report_interval) ) + { + time_t now = image_buffer[index].timestamp->tv_sec; + fps = double(fps_report_interval)/(now-last_fps_time); + //Info( "%d -> %d -> %d", fps_report_interval, now, last_fps_time ); + //Info( "%d -> %d -> %lf -> %lf", now-last_fps_time, fps_report_interval/(now-last_fps_time), double(fps_report_interval)/(now-last_fps_time), fps ); + Info( "%s: %d - Capturing at %.2lf fps", name, image_count, fps ); + last_fps_time = now; + } + + if ( shared_data->action & GET_SETTINGS ) + { + shared_data->brightness = camera->Brightness(); + shared_data->hue = camera->Hue(); + shared_data->colour = camera->Colour(); + shared_data->contrast = camera->Contrast(); + shared_data->action &= ~GET_SETTINGS; + } + if ( shared_data->action & SET_SETTINGS ) + { + camera->Brightness( shared_data->brightness ); + camera->Hue( shared_data->hue ); + camera->Colour( shared_data->colour ); + camera->Contrast( shared_data->contrast ); + shared_data->action &= ~SET_SETTINGS; + } + return( 0 ); + } + shared_data->signal = false; + return( -1 ); +} + +void Monitor::TimestampImage( Image *ts_image, const struct timeval *ts_time ) const +{ + if ( label_format[0] ) + { + // Expand the strftime macros first + char label_time_text[256]; + strftime( label_time_text, sizeof(label_time_text), label_format, localtime( &ts_time->tv_sec ) ); + + char label_text[1024]; + const char *s_ptr = label_time_text; + char *d_ptr = label_text; + while ( *s_ptr && ((d_ptr-label_text) < sizeof(label_text)) ) + { + if ( *s_ptr == '%' ) + { + bool found_macro = false; + switch ( *(s_ptr+1) ) + { + case 'N' : + d_ptr += snprintf( d_ptr, sizeof(label_text)-(d_ptr-label_text), "%s", name ); + found_macro = true; + break; + case 'Q' : + d_ptr += snprintf( d_ptr, sizeof(label_text)-(d_ptr-label_text), "%s", trigger_data->trigger_showtext ); + found_macro = true; + break; + case 'f' : + d_ptr += snprintf( d_ptr, sizeof(label_text)-(d_ptr-label_text), "%02ld", ts_time->tv_usec/10000 ); + found_macro = true; + break; + } + if ( found_macro ) + { + s_ptr += 2; + continue; + } + } + *d_ptr++ = *s_ptr++; + } + *d_ptr = '\0'; + ts_image->Annotate( label_text, label_coord ); + } +} + +bool Monitor::closeEvent() +{ + if ( event ) + { + if ( function == RECORD || function == MOCORD ) + { + gettimeofday( &(event->EndTime()), NULL ); + } + delete event; + event = 0; + return( true ); + } + return( false ); +} + +unsigned int Monitor::DetectMotion( const Image &comp_image, Event::StringSet &zoneSet ) +{ + bool alarm = false; + unsigned int score = 0; + + if ( n_zones <= 0 ) return( alarm ); + + if ( config.record_diag_images ) + { + static char diag_path[PATH_MAX] = ""; + if ( !diag_path[0] ) + { + snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-r.jpg", config.dir_events, id ); + } + ref_image.WriteJpeg( diag_path ); + } + + ref_image.Delta( comp_image, &delta_image); + + if ( config.record_diag_images ) + { + static char diag_path[PATH_MAX] = ""; + if ( !diag_path[0] ) + { + snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-d.jpg", config.dir_events, id ); + } + delta_image.WriteJpeg( diag_path ); + } + + // Blank out all exclusion zones + for ( int n_zone = 0; n_zone < n_zones; n_zone++ ) + { + Zone *zone = zones[n_zone]; + zone->ClearAlarm(); + if ( !zone->IsInactive() ) + { + continue; + } + Debug( 3, "Blanking inactive zone %s", zone->Label() ); + delta_image.Fill( RGB_BLACK, zone->GetPolygon() ); + } + + // Check preclusive zones first + for ( int n_zone = 0; n_zone < n_zones; n_zone++ ) + { + Zone *zone = zones[n_zone]; + if ( !zone->IsPreclusive() ) + { + continue; + } + Debug( 3, "Checking preclusive zone %s", zone->Label() ); + if ( zone->CheckAlarms( &delta_image ) ) + { + alarm = true; + score += zone->Score(); + Debug( 3, "Zone is alarmed, zone score = %d", zone->Score() ); + zoneSet.insert( zone->Label() ); + //zone->ResetStats(); + } + } + + Coord alarm_centre; + int top_score = -1; + + if ( alarm ) + { + alarm = false; + score = 0; + } + else + { + // Find all alarm pixels in active zones + for ( int n_zone = 0; n_zone < n_zones; n_zone++ ) + { + Zone *zone = zones[n_zone]; + if ( !zone->IsActive() ) + { + continue; + } + Debug( 3, "Checking active zone %s", zone->Label() ); + if ( zone->CheckAlarms( &delta_image ) ) + { + alarm = true; + score += zone->Score(); + zone->SetAlarm(); + Debug( 3, "Zone is alarmed, zone score = %d", zone->Score() ); + zoneSet.insert( zone->Label() ); + if ( config.opt_control && track_motion ) + { + if ( (int)zone->Score() > top_score ) + { + top_score = zone->Score(); + alarm_centre = zone->GetAlarmCentre(); + } + } + } + } + + if ( alarm ) + { + for ( int n_zone = 0; n_zone < n_zones; n_zone++ ) + { + Zone *zone = zones[n_zone]; + if ( !zone->IsInclusive() ) + { + continue; + } + Debug( 3, "Checking inclusive zone %s", zone->Label() ); + if ( zone->CheckAlarms( &delta_image ) ) + { + alarm = true; + score += zone->Score(); + zone->SetAlarm(); + Debug( 3, "Zone is alarmed, zone score = %d", zone->Score() ); + zoneSet.insert( zone->Label() ); + if ( config.opt_control && track_motion ) + { + if ( zone->Score() > top_score ) + { + top_score = zone->Score(); + alarm_centre = zone->GetAlarmCentre(); + } + } + } + } + } + else + { + // Find all alarm pixels in exclusive zones + for ( int n_zone = 0; n_zone < n_zones; n_zone++ ) + { + Zone *zone = zones[n_zone]; + if ( !zone->IsExclusive() ) + { + continue; + } + Debug( 3, "Checking exclusive zone %s", zone->Label() ); + if ( zone->CheckAlarms( &delta_image ) ) + { + alarm = true; + score += zone->Score(); + zone->SetAlarm(); + Debug( 3, "Zone is alarmed, zone score = %d", zone->Score() ); + zoneSet.insert( zone->Label() ); + } + } + } + } + + if ( top_score > 0 ) + { + shared_data->alarm_x = alarm_centre.X(); + shared_data->alarm_y = alarm_centre.Y(); + + Info( "Got alarm centre at %d,%d, at count %d", shared_data->alarm_x, shared_data->alarm_y, image_count ); + } + else + { + shared_data->alarm_x = shared_data->alarm_y = -1; + } + + // This is a small and innocent hack to prevent scores of 0 being returned in alarm state + return( score?score:alarm ); +} + +bool Monitor::DumpSettings( char *output, bool verbose ) +{ + output[0] = 0; + + sprintf( output+strlen(output), "Id : %d\n", id ); + sprintf( output+strlen(output), "Name : %s\n", name ); + sprintf( output+strlen(output), "Type : %s\n", camera->IsLocal()?"Local":(camera->IsRemote()?"Remote":"File") ); +#if ZM_HAS_V4L + if ( camera->IsLocal() ) + { + sprintf( output+strlen(output), "Device : %s\n", ((LocalCamera *)camera)->Device().c_str() ); + sprintf( output+strlen(output), "Channel : %d\n", ((LocalCamera *)camera)->Channel() ); + sprintf( output+strlen(output), "Standard : %d\n", ((LocalCamera *)camera)->Standard() ); + } + else +#endif // ZM_HAS_V4L + if ( camera->IsRemote() ) + { + sprintf( output+strlen(output), "Protocol : %s\n", ((RemoteCamera *)camera)->Protocol().c_str() ); + sprintf( output+strlen(output), "Host : %s\n", ((RemoteCamera *)camera)->Host().c_str() ); + sprintf( output+strlen(output), "Port : %s\n", ((RemoteCamera *)camera)->Port().c_str() ); + sprintf( output+strlen(output), "Path : %s\n", ((RemoteCamera *)camera)->Path().c_str() ); + } + else if ( camera->IsFile() ) + { + sprintf( output+strlen(output), "Path : %s\n", ((FileCamera *)camera)->Path() ); + } +#if HAVE_LIBAVFORMAT + else if ( camera->IsFfmpeg() ) + { + sprintf( output+strlen(output), "Path : %s\n", ((FfmpegCamera *)camera)->Path().c_str() ); + } +#endif // HAVE_LIBAVFORMAT + sprintf( output+strlen(output), "Width : %d\n", camera->Width() ); + sprintf( output+strlen(output), "Height : %d\n", camera->Height() ); +#if ZM_HAS_V4L + if ( camera->IsLocal() ) + { + sprintf( output+strlen(output), "Palette : %d\n", ((LocalCamera *)camera)->Palette() ); + } +#endif // ZM_HAS_V4L + sprintf( output+strlen(output), "Colours : %d\n", camera->Colours() ); + sprintf( output+strlen(output), "Subpixel Order : %d\n", camera->SubpixelOrder() ); + sprintf( output+strlen(output), "Event Prefix : %s\n", event_prefix ); + sprintf( output+strlen(output), "Label Format : %s\n", label_format ); + sprintf( output+strlen(output), "Label Coord : %d,%d\n", label_coord.X(), label_coord.Y() ); + sprintf( output+strlen(output), "Image Buffer Count : %d\n", image_buffer_count ); + sprintf( output+strlen(output), "Warmup Count : %d\n", warmup_count ); + sprintf( output+strlen(output), "Pre Event Count : %d\n", pre_event_count ); + sprintf( output+strlen(output), "Post Event Count : %d\n", post_event_count ); + sprintf( output+strlen(output), "Stream Replay Buffer : %d\n", stream_replay_buffer ); + sprintf( output+strlen(output), "Alarm Frame Count : %d\n", alarm_frame_count ); + sprintf( output+strlen(output), "Section Length : %d\n", section_length ); + sprintf( output+strlen(output), "Maximum FPS : %.2f\n", capture_delay?DT_PREC_3/capture_delay:0.0 ); + sprintf( output+strlen(output), "Alarm Maximum FPS : %.2f\n", alarm_capture_delay?DT_PREC_3/alarm_capture_delay:0.0 ); + sprintf( output+strlen(output), "Reference Blend %%ge : %d\n", ref_blend_perc ); + sprintf( output+strlen(output), "Track Motion : %d\n", track_motion ); + sprintf( output+strlen(output), "Function: %d - %s\n", function, + function==NONE?"None":( + function==MONITOR?"Monitor Only":( + function==MODECT?"Motion Detection":( + function==RECORD?"Continuous Record":( + function==MOCORD?"Continuous Record with Motion Detection":( + function==NODECT?"Externally Triggered only, no Motion Detection":"Unknown" + )))))); + sprintf( output+strlen(output), "Zones : %d\n", n_zones ); + for ( int i = 0; i < n_zones; i++ ) + { + zones[i]->DumpSettings( output+strlen(output), verbose ); + } + return( true ); +} + +bool MonitorStream::checkSwapPath( const char *path, bool create_path ) +{ + uid_t uid = getuid(); + gid_t gid = getgid(); + + struct stat stat_buf; + if ( stat( path, &stat_buf ) < 0 ) + { + if ( create_path && errno == ENOENT ) + { + Debug( 3, "Swap path '%s' missing, creating", path ); + if ( mkdir( path, 0755 ) ) + { + Error( "Can't mkdir %s: %s", path, strerror(errno)); + return( false ); + } + if ( stat( path, &stat_buf ) < 0 ) + { + Error( "Can't stat '%s': %s", path, strerror(errno) ); + return( false ); + } + } + else + { + Error( "Can't stat '%s': %s", path, strerror(errno) ); + return( false ); + } + } + if ( !S_ISDIR(stat_buf.st_mode) ) + { + Error( "Swap image path '%s' is not a directory", path ); + return( false ); + } + + mode_t mask = 0; + if ( uid == stat_buf.st_uid ) + { + // If we are the owner + mask = 00700; + } + else if ( gid == stat_buf.st_gid ) + { + // If we are in the owner group + mask = 00070; + } + else + { + // We are neither the owner nor in the group + mask = 00007; + } + + if ( (stat_buf.st_mode & mask) != mask ) + { + Error( "Insufficient permissions on swap image path '%s'", path ); + return( false ); + } + return( true ); +} + +void MonitorStream::processCommand( const CmdMsg *msg ) +{ + Debug( 2, "Got message, type %d, msg %d", msg->msg_type, msg->msg_data[0] ); + // Check for incoming command + switch( (MsgCommand)msg->msg_data[0] ) + { + case CMD_PAUSE : + { + Debug( 1, "Got PAUSE command" ); + + // Set paused flag + paused = true; + // Set delayed flag + delayed = true; + last_frame_sent = TV_2_FLOAT( now ); + break; + } + case CMD_PLAY : + { + Debug( 1, "Got PLAY command" ); + if ( paused ) + { + // Clear paused flag + paused = false; + // Set delayed_play flag + delayed = true; + } + replay_rate = ZM_RATE_BASE; + break; + } + case CMD_VARPLAY : + { + Debug( 1, "Got VARPLAY command" ); + if ( paused ) + { + // Clear paused flag + paused = false; + // Set delayed_play flag + delayed = true; + } + replay_rate = ntohs(((unsigned char)msg->msg_data[2]<<8)|(unsigned char)msg->msg_data[1])-32768; + break; + } + case CMD_STOP : + { + Debug( 1, "Got STOP command" ); + + // Clear paused flag + paused = false; + // Clear delayed_play flag + delayed = false; + break; + } + case CMD_FASTFWD : + { + Debug( 1, "Got FAST FWD command" ); + if ( paused ) + { + // Clear paused flag + paused = false; + // Set delayed_play flag + delayed = true; + } + // Set play rate + switch ( replay_rate ) + { + case 2 * ZM_RATE_BASE : + replay_rate = 5 * ZM_RATE_BASE; + break; + case 5 * ZM_RATE_BASE : + replay_rate = 10 * ZM_RATE_BASE; + break; + case 10 * ZM_RATE_BASE : + replay_rate = 25 * ZM_RATE_BASE; + break; + case 25 * ZM_RATE_BASE : + case 50 * ZM_RATE_BASE : + replay_rate = 50 * ZM_RATE_BASE; + break; + default : + replay_rate = 2 * ZM_RATE_BASE; + break; + } + break; + } + case CMD_SLOWFWD : + { + Debug( 1, "Got SLOW FWD command" ); + // Set paused flag + paused = true; + // Set delayed flag + delayed = true; + // Set play rate + replay_rate = ZM_RATE_BASE; + // Set step + step = 1; + break; + } + case CMD_SLOWREV : + { + Debug( 1, "Got SLOW REV command" ); + // Set paused flag + paused = true; + // Set delayed flag + delayed = true; + // Set play rate + replay_rate = ZM_RATE_BASE; + // Set step + step = -1; + break; + } + case CMD_FASTREV : + { + Debug( 1, "Got FAST REV command" ); + if ( paused ) + { + // Clear paused flag + paused = false; + // Set delayed_play flag + delayed = true; + } + // Set play rate + switch ( replay_rate ) + { + case -2 * ZM_RATE_BASE : + replay_rate = -5 * ZM_RATE_BASE; + break; + case -5 * ZM_RATE_BASE : + replay_rate = -10 * ZM_RATE_BASE; + break; + case -10 * ZM_RATE_BASE : + replay_rate = -25 * ZM_RATE_BASE; + break; + case -25 * ZM_RATE_BASE : + case -50 * ZM_RATE_BASE : + replay_rate = -50 * ZM_RATE_BASE; + break; + default : + replay_rate = -2 * ZM_RATE_BASE; + break; + } + break; + } + case CMD_ZOOMIN : + { + x = ((unsigned char)msg->msg_data[1]<<8)|(unsigned char)msg->msg_data[2]; + y = ((unsigned char)msg->msg_data[3]<<8)|(unsigned char)msg->msg_data[4]; + Debug( 1, "Got ZOOM IN command, to %d,%d", x, y ); + switch ( zoom ) + { + case 100: + zoom = 150; + break; + case 150: + zoom = 200; + break; + case 200: + zoom = 300; + break; + case 300: + zoom = 400; + break; + case 400: + default : + zoom = 500; + break; + } + break; + } + case CMD_ZOOMOUT : + { + Debug( 1, "Got ZOOM OUT command" ); + switch ( zoom ) + { + case 500: + zoom = 400; + break; + case 400: + zoom = 300; + break; + case 300: + zoom = 200; + break; + case 200: + zoom = 150; + break; + case 150: + default : + zoom = 100; + break; + } + break; + } + case CMD_PAN : + { + x = ((unsigned char)msg->msg_data[1]<<8)|(unsigned char)msg->msg_data[2]; + y = ((unsigned char)msg->msg_data[3]<<8)|(unsigned char)msg->msg_data[4]; + Debug( 1, "Got PAN command, to %d,%d", x, y ); + break; + } + case CMD_SCALE : + { + scale = ((unsigned char)msg->msg_data[1]<<8)|(unsigned char)msg->msg_data[2]; + Debug( 1, "Got SCALE command, to %d", scale ); + break; + } + case CMD_QUERY : + { + Debug( 1, "Got QUERY command, sending STATUS" ); + break; + } + default : + { + Error( "Got unexpected command %d", msg->msg_data[0] ); + break; + } + } + + struct { + int id; + int state; + double fps; + int buffer_level; + int rate; + double delay; + int zoom; + bool delayed; + bool paused; + bool enabled; + bool forced; + } status_data; + + status_data.id = monitor->Id(); + status_data.fps = monitor->GetFPS(); + status_data.state = monitor->shared_data->state; + if ( playback_buffer > 0 ) + status_data.buffer_level = (MOD_ADD( (temp_write_index-temp_read_index), 0, temp_image_buffer_count )*100)/temp_image_buffer_count; + else + status_data.buffer_level = 0; + status_data.delayed = delayed; + status_data.paused = paused; + status_data.rate = replay_rate; + status_data.delay = TV_2_FLOAT( now ) - TV_2_FLOAT( last_frame_timestamp ); + status_data.zoom = zoom; + //status_data.enabled = monitor->shared_data->active; + status_data.enabled = monitor->trigger_data->trigger_state!=Monitor::TRIGGER_OFF; + status_data.forced = monitor->trigger_data->trigger_state==Monitor::TRIGGER_ON; + Debug( 2, "L:%d, D:%d, P:%d, R:%d, d:%.3f, Z:%d, E:%d F:%d", + status_data.buffer_level, + status_data.delayed, + status_data.paused, + status_data.rate, + status_data.delay, + status_data.zoom, + status_data.enabled, + status_data.forced + ); + + DataMsg status_msg; + status_msg.msg_type = MSG_DATA_WATCH; + memcpy( &status_msg.msg_data, &status_data, sizeof(status_msg.msg_data) ); + int nbytes = 0; + if ( (nbytes = sendto( sd, &status_msg, sizeof(status_msg), MSG_DONTWAIT, (sockaddr *)&rem_addr, sizeof(rem_addr) )) < 0 ) + { + //if ( errno != EAGAIN ) + { + Error( "Can't sendto on sd %d: %s", sd, strerror(errno) ); + //exit( -1 ); + } + } + + updateFrameRate( monitor->GetFPS() ); +} + +bool MonitorStream::sendFrame( const char *filepath, struct timeval *timestamp ) +{ + bool send_raw = ((scale>=ZM_SCALE_BASE)&&(zoom==ZM_SCALE_BASE)); + + if ( type != STREAM_JPEG ) + send_raw = false; + if ( !config.timestamp_on_capture && timestamp ) + send_raw = false; + + if ( !send_raw ) + { + Image temp_image( filepath ); + + return( sendFrame( &temp_image, timestamp ) ); + } + else + { + int img_buffer_size = 0; + static unsigned char img_buffer[ZM_MAX_IMAGE_SIZE]; + + FILE *fdj = NULL; + if ( (fdj = fopen( filepath, "r" )) ) + { + img_buffer_size = fread( img_buffer, 1, sizeof(img_buffer), fdj ); + fclose( fdj ); + } + else + { + Error( "Can't open %s: %s", filepath, strerror(errno) ); + return( false ); + } + + // Calculate how long it takes to actually send the frame + struct timeval frameStartTime; + gettimeofday( &frameStartTime, NULL ); + + fprintf( stdout, "--ZoneMinderFrame\r\n" ); + fprintf( stdout, "Content-Length: %d\r\n", img_buffer_size ); + fprintf( stdout, "Content-Type: image/jpeg\r\n\r\n" ); + if ( fwrite( img_buffer, img_buffer_size, 1, stdout ) != 1 ) + { + if ( !zm_terminate ) + Error( "Unable to send stream frame: %s", strerror(errno) ); + return( false ); + } + fprintf( stdout, "\r\n\r\n" ); + fflush( stdout ); + + struct timeval frameEndTime; + gettimeofday( &frameEndTime, NULL ); + + int frameSendTime = tvDiffMsec( frameStartTime, frameEndTime ); + if ( frameSendTime > 1000/maxfps ) + { + maxfps /= 2; + Error( "Frame send time %d msec too slow, throttling maxfps to %.2f", frameSendTime, maxfps ); + } + + last_frame_sent = TV_2_FLOAT( now ); + + return( true ); + } + return( false ); +} + +bool MonitorStream::sendFrame( Image *image, struct timeval *timestamp ) +{ + Image *send_image = prepareImage( image ); + if ( !config.timestamp_on_capture && timestamp ) + monitor->TimestampImage( send_image, timestamp ); + +#if HAVE_LIBAVCODEC + if ( type == STREAM_MPEG ) + { + if ( !vid_stream ) + { + vid_stream = new VideoStream( "pipe:", format, bitrate, effective_fps, send_image->Colours(), send_image->SubpixelOrder(), send_image->Width(), send_image->Height() ); + fprintf( stdout, "Content-type: %s\r\n\r\n", vid_stream->MimeType() ); + vid_stream->OpenStream(); + } + static struct timeval base_time; + struct DeltaTimeval delta_time; + if ( !frame_count ) + base_time = *timestamp; + DELTA_TIMEVAL( delta_time, *timestamp, base_time, DT_PREC_3 ); + /* double pts = */ vid_stream->EncodeFrame( send_image->Buffer(), send_image->Size(), config.mpeg_timed_frames, delta_time.delta ); + } + else +#endif // HAVE_LIBAVCODEC + { + static unsigned char temp_img_buffer[ZM_MAX_IMAGE_SIZE]; + + int img_buffer_size = 0; + unsigned char *img_buffer = temp_img_buffer; + + // Calculate how long it takes to actually send the frame + struct timeval frameStartTime; + gettimeofday( &frameStartTime, NULL ); + + fprintf( stdout, "--ZoneMinderFrame\r\n" ); + switch( type ) + { + case STREAM_JPEG : + send_image->EncodeJpeg( img_buffer, &img_buffer_size ); + fprintf( stdout, "Content-Type: image/jpeg\r\n" ); + break; + case STREAM_RAW : + fprintf( stdout, "Content-Type: image/x-rgb\r\n" ); + img_buffer = (uint8_t*)send_image->Buffer(); + img_buffer_size = send_image->Size(); + break; + case STREAM_ZIP : + fprintf( stdout, "Content-Type: image/x-rgbz\r\n" ); + unsigned long zip_buffer_size; + send_image->Zip( img_buffer, &zip_buffer_size ); + img_buffer_size = zip_buffer_size; + break; + default : + Fatal( "Unexpected frame type %d", type ); + break; + } + fprintf( stdout, "Content-Length: %d\r\n\r\n", img_buffer_size ); + if ( fwrite( img_buffer, img_buffer_size, 1, stdout ) != 1 ) + { + if ( !zm_terminate ) + Error( "Unable to send stream frame: %s", strerror(errno) ); + return( false ); + } + fprintf( stdout, "\r\n\r\n" ); + fflush( stdout ); + + struct timeval frameEndTime; + gettimeofday( &frameEndTime, NULL ); + + int frameSendTime = tvDiffMsec( frameStartTime, frameEndTime ); + if ( frameSendTime > 1000/maxfps ) + { + maxfps /= 1.5; + Error( "Frame send time %d msec too slow, throttling maxfps to %.2f", frameSendTime, maxfps ); + } + } + last_frame_sent = TV_2_FLOAT( now ); + return( true ); +} + +void MonitorStream::runStream() +{ + if ( type == STREAM_SINGLE ) + { + // Not yet migrated over to stream class + monitor->SingleImage( scale ); + return; + } + + openComms(); + + checkInitialised(); + + updateFrameRate( monitor->GetFPS() ); + + if ( type == STREAM_JPEG ) + fprintf( stdout, "Content-Type: multipart/x-mixed-replace;boundary=ZoneMinderFrame\r\n\r\n" ); + + int last_read_index = monitor->image_buffer_count; + + time_t stream_start_time; + time( &stream_start_time ); + + frame_count = 0; + + temp_image_buffer = 0; + temp_image_buffer_count = playback_buffer; + temp_read_index = temp_image_buffer_count; + temp_write_index = temp_image_buffer_count; + + char swap_path[PATH_MAX] = ""; + bool buffered_playback = false; + + if ( connkey && playback_buffer > 0 ) + { + Debug( 2, "Checking swap image location" ); + Debug( 3, "Checking swap image path" ); + strncpy( swap_path, config.path_swap, sizeof(swap_path) ); + if ( checkSwapPath( swap_path, false ) ) + { + snprintf( &(swap_path[strlen(swap_path)]), sizeof(swap_path)-strlen(swap_path), "/zmswap-m%d", monitor->Id() ); + if ( checkSwapPath( swap_path, true ) ) + { + snprintf( &(swap_path[strlen(swap_path)]), sizeof(swap_path)-strlen(swap_path), "/zmswap-q%06d", connkey ); + if ( checkSwapPath( swap_path, true ) ) + { + buffered_playback = true; + } + } + } + + if ( !buffered_playback ) + { + Error( "Unable to validate swap image path, disabling buffered playback" ); + } + else + { + Debug( 2, "Assigning temporary buffer" ); + temp_image_buffer = new SwapImage[temp_image_buffer_count]; + memset( temp_image_buffer, 0, sizeof(*temp_image_buffer)*temp_image_buffer_count ); + Debug( 2, "Assigned temporary buffer" ); + } + } + + float max_secs_since_last_sent_frame = 10.0; //should be > keep alive amount (5 secs) + while ( !zm_terminate ) + { + bool got_command = false; + if ( feof( stdout ) || ferror( stdout ) || !monitor->ShmValid() ) + { + break; + } + + gettimeofday( &now, NULL ); + + if ( connkey ) + { + while(checkCommandQueue()) { + got_command = true; + } + } + + bool frame_sent = false; + if ( buffered_playback && delayed ) + { + if ( temp_read_index == temp_write_index ) + { + // Go back to live viewing + Debug( 1, "Exceeded temporary streaming buffer" ); + // Clear paused flag + paused = false; + // Clear delayed_play flag + delayed = false; + replay_rate = ZM_RATE_BASE; + } + else + { + if ( !paused ) + { + int temp_index = MOD_ADD( temp_read_index, 0, temp_image_buffer_count ); + //Debug( 3, "tri: %d, ti: %d", temp_read_index, temp_index ); + SwapImage *swap_image = &temp_image_buffer[temp_index]; + + if ( !swap_image->valid ) + { + paused = true; + delayed = true; + temp_read_index = MOD_ADD( temp_read_index, (replay_rate>=0?-1:1), temp_image_buffer_count ); + } + else + { + //Debug( 3, "siT: %f, lfT: %f", TV_2_FLOAT( swap_image->timestamp ), TV_2_FLOAT( last_frame_timestamp ) ); + double expected_delta_time = ((TV_2_FLOAT( swap_image->timestamp ) - TV_2_FLOAT( last_frame_timestamp )) * ZM_RATE_BASE)/replay_rate; + double actual_delta_time = TV_2_FLOAT( now ) - last_frame_sent; + + //Debug( 3, "eDT: %.3lf, aDT: %.3f, lFS:%.3f, NOW:%.3f", expected_delta_time, actual_delta_time, last_frame_sent, TV_2_FLOAT( now ) ); + // If the next frame is due + if ( actual_delta_time > expected_delta_time ) + { + //Debug( 2, "eDT: %.3lf, aDT: %.3f", expected_delta_time, actual_delta_time ); + if ( temp_index%frame_mod == 0 ) + { + Debug( 2, "Sending delayed frame %d", temp_index ); + // Send the next frame + if ( !sendFrame( temp_image_buffer[temp_index].file_name, &temp_image_buffer[temp_index].timestamp ) ) + zm_terminate = true; + memcpy( &last_frame_timestamp, &(swap_image->timestamp), sizeof(last_frame_timestamp) ); + frame_sent = true; + } + temp_read_index = MOD_ADD( temp_read_index, (replay_rate>0?1:-1), temp_image_buffer_count ); + } + } + } + else if ( step != 0 ) + { + temp_read_index = MOD_ADD( temp_read_index, (step>0?1:-1), temp_image_buffer_count ); + + SwapImage *swap_image = &temp_image_buffer[temp_read_index]; + + // Send the next frame + if ( !sendFrame( temp_image_buffer[temp_read_index].file_name, &temp_image_buffer[temp_read_index].timestamp ) ) + zm_terminate = true; + memcpy( &last_frame_timestamp, &(swap_image->timestamp), sizeof(last_frame_timestamp) ); + frame_sent = true; + step = 0; + } + else + { + int temp_index = MOD_ADD( temp_read_index, 0, temp_image_buffer_count ); + + double actual_delta_time = TV_2_FLOAT( now ) - last_frame_sent; + if ( got_command || actual_delta_time > 5 ) + { + // Send keepalive + Debug( 2, "Sending keepalive frame %d", temp_index ); + // Send the next frame + if ( !sendFrame( temp_image_buffer[temp_index].file_name, &temp_image_buffer[temp_index].timestamp ) ) + zm_terminate = true; + frame_sent = true; + } + } + } + if ( temp_read_index == temp_write_index ) + { + // Go back to live viewing + Warning( "Rewound over write index, resuming live play" ); + // Clear paused flag + paused = false; + // Clear delayed_play flag + delayed = false; + replay_rate = ZM_RATE_BASE; + } + } + if ( last_read_index != monitor->shared_data->last_write_index ) + { + int index = monitor->shared_data->last_write_index%monitor->image_buffer_count; + last_read_index = monitor->shared_data->last_write_index; + //Debug( 1, "%d: %x - %x", index, image_buffer[index].image, image_buffer[index].image->buffer ); + if ( (frame_mod == 1) || ((frame_count%frame_mod) == 0) ) + { + if ( !paused && !delayed ) + { + // Send the next frame + Monitor::Snapshot *snap = &monitor->image_buffer[index]; + + if ( !sendFrame( snap->image, snap->timestamp ) ) + zm_terminate = true; + memcpy( &last_frame_timestamp, snap->timestamp, sizeof(last_frame_timestamp) ); + frame_sent = true; + + temp_read_index = temp_write_index; + } + } + if ( buffered_playback ) + { + if ( monitor->shared_data->valid ) + { + if ( monitor->image_buffer[index].timestamp->tv_sec ) + { + int temp_index = temp_write_index%temp_image_buffer_count; + Debug( 2, "Storing frame %d", temp_index ); + if ( !temp_image_buffer[temp_index].valid ) + { + snprintf( temp_image_buffer[temp_index].file_name, sizeof(temp_image_buffer[0].file_name), "%s/zmswap-i%05d.jpg", swap_path, temp_index ); + temp_image_buffer[temp_index].valid = true; + } + memcpy( &(temp_image_buffer[temp_index].timestamp), monitor->image_buffer[index].timestamp, sizeof(temp_image_buffer[0].timestamp) ); + monitor->image_buffer[index].image->WriteJpeg( temp_image_buffer[temp_index].file_name, config.jpeg_file_quality ); + temp_write_index = MOD_ADD( temp_write_index, 1, temp_image_buffer_count ); + if ( temp_write_index == temp_read_index ) + { + // Go back to live viewing + Warning( "Exceeded temporary buffer, resuming live play" ); + // Clear paused flag + paused = false; + // Clear delayed_play flag + delayed = false; + replay_rate = ZM_RATE_BASE; + } + } + else + { + Warning( "Unable to store frame as timestamp invalid" ); + } + } + else + { + Warning( "Unable to store frame as shared memory invalid" ); + } + } + frame_count++; + } + usleep( (unsigned long)((1000000 * ZM_RATE_BASE)/((base_fps?base_fps:1)*abs(replay_rate*2))) ); + if ( ttl ) + { + if ( (now.tv_sec - stream_start_time) > ttl ) + { + break; + } + } + if ( (TV_2_FLOAT( now ) - last_frame_sent) > max_secs_since_last_sent_frame ) + { + Error( "Terminating, last frame sent time %f secs more than maximum of %f", TV_2_FLOAT( now ) - last_frame_sent, max_secs_since_last_sent_frame ); + break; + } + } + if ( buffered_playback ) + { + char swap_path[PATH_MAX] = ""; + + snprintf( swap_path, sizeof(swap_path), "%s/zmswap-m%d/zmswap-q%06d", config.path_swap, monitor->Id(), connkey ); + Debug( 1, "Cleaning swap files from %s", swap_path ); + struct stat stat_buf; + if ( stat( swap_path, &stat_buf ) < 0 ) + { + if ( errno != ENOENT ) + { + Error( "Can't stat '%s': %s", swap_path, strerror(errno) ); + } + } + else if ( !S_ISDIR(stat_buf.st_mode) ) + { + Error( "Swap image path '%s' is not a directory", swap_path ); + } + else + { + char glob_pattern[PATH_MAX] = ""; + + snprintf( glob_pattern, sizeof(glob_pattern), "%s/*.*", swap_path ); + glob_t pglob; + int glob_status = glob( glob_pattern, 0, 0, &pglob ); + if ( glob_status != 0 ) + { + if ( glob_status < 0 ) + { + Error( "Can't glob '%s': %s", glob_pattern, strerror(errno) ); + } + else + { + Debug( 1, "Can't glob '%s': %d", glob_pattern, glob_status ); + } + } + else + { + for ( int i = 0; i < pglob.gl_pathc; i++ ) + { + if ( unlink( pglob.gl_pathv[i] ) < 0 ) + { + Error( "Can't unlink '%s': %s", pglob.gl_pathv[i], strerror(errno) ); + } + } + } + globfree( &pglob ); + if ( rmdir( swap_path ) < 0 ) + { + Error( "Can't rmdir '%s': %s", swap_path, strerror(errno) ); + } + } + } + closeComms(); +} + +void Monitor::SingleImage( int scale) +{ + int img_buffer_size = 0; + static JOCTET img_buffer[ZM_MAX_IMAGE_SIZE]; + Image scaled_image; + int index = shared_data->last_write_index%image_buffer_count; + Snapshot *snap = &image_buffer[index]; + Image *snap_image = snap->image; + + if ( scale != ZM_SCALE_BASE ) + { + scaled_image.Assign( *snap_image ); + scaled_image.Scale( scale ); + snap_image = &scaled_image; + } + if ( !config.timestamp_on_capture ) + { + TimestampImage( snap_image, snap->timestamp ); + } + snap_image->EncodeJpeg( img_buffer, &img_buffer_size ); + + fprintf( stdout, "Content-Length: %d\r\n", img_buffer_size ); + fprintf( stdout, "Content-Type: image/jpeg\r\n\r\n" ); + fwrite( img_buffer, img_buffer_size, 1, stdout ); +} + +void Monitor::SingleImageRaw( int scale) +{ + Image scaled_image; + int index = shared_data->last_write_index%image_buffer_count; + Snapshot *snap = &image_buffer[index]; + Image *snap_image = snap->image; + + if ( scale != ZM_SCALE_BASE ) + { + scaled_image.Assign( *snap_image ); + scaled_image.Scale( scale ); + snap_image = &scaled_image; + } + if ( !config.timestamp_on_capture ) + { + TimestampImage( snap_image, snap->timestamp ); + } + + fprintf( stdout, "Content-Length: %d\r\n", snap_image->Size() ); + fprintf( stdout, "Content-Type: image/x-rgb\r\n\r\n" ); + fwrite( snap_image->Buffer(), snap_image->Size(), 1, stdout ); +} + +void Monitor::SingleImageZip( int scale) +{ + unsigned long img_buffer_size = 0; + static Bytef img_buffer[ZM_MAX_IMAGE_SIZE]; + Image scaled_image; + int index = shared_data->last_write_index%image_buffer_count; + Snapshot *snap = &image_buffer[index]; + Image *snap_image = snap->image; + + if ( scale != ZM_SCALE_BASE ) + { + scaled_image.Assign( *snap_image ); + scaled_image.Scale( scale ); + snap_image = &scaled_image; + } + if ( !config.timestamp_on_capture ) + { + TimestampImage( snap_image, snap->timestamp ); + } + snap_image->Zip( img_buffer, &img_buffer_size ); + + fprintf( stdout, "Content-Length: %ld\r\n", img_buffer_size ); + fprintf( stdout, "Content-Type: image/x-rgbz\r\n\r\n" ); + fwrite( img_buffer, img_buffer_size, 1, stdout ); +} diff --git a/src/zm_monitor.h b/src/zm_monitor.h index cbc5d75ff..e3d09e494 100644 --- a/src/zm_monitor.h +++ b/src/zm_monitor.h @@ -20,6 +20,9 @@ #ifndef ZM_MONITOR_H #define ZM_MONITOR_H +#include +#include + #include "zm.h" #include "zm_coord.h" #include "zm_image.h" @@ -28,6 +31,9 @@ #include "zm_event.h" #include "zm_camera.h" +#include "zm_plugin_manager.h" +#include "zm_image_analyser.h" + #include #include @@ -147,6 +153,11 @@ protected: void* padding; }; + //========================================================================= + PluginManager ThePluginManager; + std::vector m_sPluginNames; + //int iDoNativeMotDet; + class MonitorLink { protected: @@ -274,11 +285,15 @@ protected: int n_zones; Zone **zones; + int iDoNativeMotDet; + int n_linked_monitors; MonitorLink **linked_monitors; public: - Monitor( int p_id, const char *p_name, int p_function, bool p_enabled, const char *p_linked_monitors, Camera *p_camera, int p_orientation, unsigned int p_deinterlacing, const char *p_event_prefix, const char *p_label_format, const Coord &p_label_coord, int p_image_buffer_count, int p_warmup_count, int p_pre_event_count, int p_post_event_count, int p_stream_replay_buffer, int p_alarm_frame_count, int p_section_length, int p_frame_skip, int p_capture_delay, int p_alarm_capture_delay, int p_fps_report_interval, int p_ref_blend_perc, bool p_track_motion, Rgb p_signal_check_colour, Purpose p_purpose, int p_n_zones=0, Zone *p_zones[]=0 ); +// OurCheckAlarms seems to be unused. Check it on zm_monitor.cpp for more info. +//bool OurCheckAlarms( Zone *zone, const Image *pImage ); + Monitor( int p_id, const char *p_name, int p_function, bool p_enabled, const char *p_linked_monitors, Camera *p_camera, int p_orientation, unsigned int p_deinterlacing, const char *p_event_prefix, const char *p_label_format, const Coord &p_label_coord, int p_image_buffer_count, int p_warmup_count, int p_pre_event_count, int p_post_event_count, int p_stream_replay_buffer, int p_alarm_frame_count, int p_section_length, int p_frame_skip, int p_capture_delay, int p_alarm_capture_delay, int p_fps_report_interval, int p_ref_blend_perc, bool p_track_motion, Rgb p_signal_check_colour, Purpose p_purpose, int p_n_zones=0, Zone *p_zones[]=0, std::string plugins = "", int p_DoNativeMotDect = 1 ); ~Monitor(); void AddZones( int p_n_zones, Zone *p_zones[] ); @@ -369,6 +384,8 @@ public: } unsigned int DetectMotion( const Image &comp_image, Event::StringSet &zoneSet ); + // DetectBlack seems to be unused. Check it on zm_monitor.cpp for more info. + //unsigned int DetectBlack( const Image &comp_image, Event::StringSet &zoneSet ); bool CheckSignal( const Image *image ); bool Analyse(); void DumpImage( Image *dump_image ) const; diff --git a/src/zm_monitor.h.orig b/src/zm_monitor.h.orig new file mode 100644 index 000000000..cbc5d75ff --- /dev/null +++ b/src/zm_monitor.h.orig @@ -0,0 +1,458 @@ +// +// ZoneMinder Monitor Class Interfaces, $Date$, $Revision$ +// Copyright (C) 2001-2008 Philip Coombes +// +// 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. +// + +#ifndef ZM_MONITOR_H +#define ZM_MONITOR_H + +#include "zm.h" +#include "zm_coord.h" +#include "zm_image.h" +#include "zm_rgb.h" +#include "zm_zone.h" +#include "zm_event.h" +#include "zm_camera.h" + +#include +#include + +#define SIGNAL_CAUSE "Signal" +#define MOTION_CAUSE "Motion" +#define LINKED_CAUSE "Linked" + +// +// This is the main class for monitors. Each monitor is associated +// with a camera and is effectively a collector for events. +// +class Monitor +{ +friend class MonitorStream; + +public: + typedef enum + { + QUERY=0, + CAPTURE, + ANALYSIS + } Purpose; + + typedef enum + { + NONE=1, + MONITOR, + MODECT, + RECORD, + MOCORD, + NODECT + } Function; + + typedef enum + { + ROTATE_0=1, + ROTATE_90, + ROTATE_180, + ROTATE_270, + FLIP_HORI, + FLIP_VERT + } Orientation; + + typedef enum + { + IDLE, + PREALARM, + ALARM, + ALERT, + TAPE + } State; + +protected: + typedef std::set ZoneSet; + + typedef enum { GET_SETTINGS=0x1, SET_SETTINGS=0x2, RELOAD=0x4, SUSPEND=0x10, RESUME=0x20 } Action; + + typedef enum { CLOSE_TIME, CLOSE_IDLE, CLOSE_ALARM } EventCloseMode; + + /* sizeof(SharedData) expected to be 336 bytes on 32bit and 64bit */ + typedef struct + { + uint32_t size; /* +0 */ + uint32_t last_write_index; /* +4 */ + uint32_t last_read_index; /* +8 */ + uint32_t state; /* +12 */ + uint32_t last_event; /* +16 */ + uint32_t action; /* +20 */ + int32_t brightness; /* +24 */ + int32_t hue; /* +28 */ + int32_t colour; /* +32 */ + int32_t contrast; /* +36 */ + int32_t alarm_x; /* +40 */ + int32_t alarm_y; /* +44 */ + uint8_t valid; /* +48 */ + uint8_t active; /* +49 */ + uint8_t signal; /* +50 */ + uint8_t format; /* +51 */ + uint32_t imagesize; /* +52 */ + uint32_t epadding1; /* +56 */ + uint32_t epadding2; /* +60 */ + /* + ** This keeps 32bit time_t and 64bit time_t identical and compatible as long as time is before 2038. + ** Shared memory layout should be identical for both 32bit and 64bit and is multiples of 16. + */ + union { /* +64 */ + time_t last_write_time; + uint64_t extrapad1; + }; + union { /* +72 */ + time_t last_read_time; + uint64_t extrapad2; + }; + uint8_t control_state[256]; /* +80 */ + + } SharedData; + + typedef enum { TRIGGER_CANCEL, TRIGGER_ON, TRIGGER_OFF } TriggerState; + + /* sizeof(TriggerData) expected to be 560 on 32bit & and 64bit */ + typedef struct + { + uint32_t size; + uint32_t trigger_state; + uint32_t trigger_score; + uint32_t padding; + char trigger_cause[32]; + char trigger_text[256]; + char trigger_showtext[256]; + } TriggerData; + + /* sizeof(Snapshot) expected to be 16 bytes on 32bit and 32 bytes on 64bit */ + struct Snapshot + { + struct timeval *timestamp; + Image *image; + void* padding; + }; + + class MonitorLink + { + protected: + unsigned int id; + char name[64]; + + bool connected; + time_t last_connect_time; + +#if ZM_MEM_MAPPED + int map_fd; + char mem_file[PATH_MAX]; +#else // ZM_MEM_MAPPED + int shm_id; +#endif // ZM_MEM_MAPPED + int mem_size; + unsigned char *mem_ptr; + + volatile SharedData *shared_data; + volatile TriggerData *trigger_data; + + int last_state; + int last_event; + + public: + MonitorLink( int p_id, const char *p_name ); + ~MonitorLink(); + + inline int Id() const + { + return( id ); + } + inline const char *Name() const + { + return( name ); + } + + inline bool isConnected() const + { + return( connected ); + } + inline time_t getLastConnectTime() const + { + return( last_connect_time ); + } + + bool connect(); + bool disconnect(); + + bool isAlarmed(); + bool inAlarm(); + bool hasAlarmed(); + }; + +protected: + // These are read from the DB and thereafter remain unchanged + unsigned int id; + char name[64]; + Function function; // What the monitor is doing + bool enabled; // Whether the monitor is enabled or asleep + unsigned int width; // Normally the same as the camera, but not if partly rotated + unsigned int height; // Normally the same as the camera, but not if partly rotated + Orientation orientation; // Whether the image has to be rotated at all + unsigned int deinterlacing; + int brightness; // The statically saved brightness of the camera + int contrast; // The statically saved contrast of the camera + int hue; // The statically saved hue of the camera + int colour; // The statically saved colour of the camera + char event_prefix[64]; // The prefix applied to event names as they are created + char label_format[64]; // The format of the timestamp on the images + Coord label_coord; // The coordinates of the timestamp on the images + int image_buffer_count; // Size of circular image buffer, at least twice the size of the pre_event_count + int warmup_count; // How many images to process before looking for events + int pre_event_count; // How many images to hold and prepend to an alarm event + int post_event_count; // How many unalarmed images must occur before the alarm state is reset + int stream_replay_buffer; // How many frames to store to support DVR functions, IGNORED from this object, passed directly into zms now + int section_length; // How long events should last in continuous modes + int frame_skip; // How many frames to skip in continuous modes + int capture_delay; // How long we wait between capture frames + int alarm_capture_delay; // How long we wait between capture frames when in alarm state + int alarm_frame_count; // How many alarm frames are required before an event is triggered + int fps_report_interval; // How many images should be captured/processed between reporting the current FPS + int ref_blend_perc; // Percentage of new image going into reference image. + bool track_motion; // Whether this monitor tries to track detected motion + Rgb signal_check_colour; // The colour that the camera will emit when no video signal detected + + double fps; + Image delta_image; + Image ref_image; + + Purpose purpose; // What this monitor has been created to do + int event_count; + int image_count; + int ready_count; + int first_alarm_count; + int last_alarm_count; + int buffer_count; + int prealarm_count; + State state; + time_t start_time; + time_t last_fps_time; + time_t auto_resume_time; + + EventCloseMode event_close_mode; + +#if ZM_MEM_MAPPED + int map_fd; + char mem_file[PATH_MAX]; +#else // ZM_MEM_MAPPED + int shm_id; +#endif // ZM_MEM_MAPPED + int mem_size; + unsigned char *mem_ptr; + + SharedData *shared_data; + TriggerData *trigger_data; + + Snapshot *image_buffer; + Snapshot next_buffer; /* Used by four field deinterlacing */ + + Camera *camera; + + Event *event; + + int n_zones; + Zone **zones; + + int n_linked_monitors; + MonitorLink **linked_monitors; + +public: + Monitor( int p_id, const char *p_name, int p_function, bool p_enabled, const char *p_linked_monitors, Camera *p_camera, int p_orientation, unsigned int p_deinterlacing, const char *p_event_prefix, const char *p_label_format, const Coord &p_label_coord, int p_image_buffer_count, int p_warmup_count, int p_pre_event_count, int p_post_event_count, int p_stream_replay_buffer, int p_alarm_frame_count, int p_section_length, int p_frame_skip, int p_capture_delay, int p_alarm_capture_delay, int p_fps_report_interval, int p_ref_blend_perc, bool p_track_motion, Rgb p_signal_check_colour, Purpose p_purpose, int p_n_zones=0, Zone *p_zones[]=0 ); + ~Monitor(); + + void AddZones( int p_n_zones, Zone *p_zones[] ); + + inline int ShmValid() const + { + return( shared_data->valid ); + } + + inline int Id() const + { + return( id ); + } + inline const char *Name() const + { + return( name ); + } + inline Function GetFunction() const + { + return( function ); + } + inline bool Enabled() + { + if ( function <= MONITOR ) + return( false ); + return( enabled ); + } + inline const char *EventPrefix() const + { + return( event_prefix ); + } + inline bool Ready() + { + if ( function <= MONITOR ) + return( false ); + return( image_count > ready_count ); + } + inline bool Active() + { + if ( function <= MONITOR ) + return( false ); + return( enabled && shared_data->active ); + } + + unsigned int Width() const { return( width ); } + unsigned int Height() const { return( height ); } + unsigned int Colours() const { return( camera->Colours() ); } + unsigned int SubpixelOrder() const { return( camera->SubpixelOrder() ); } + + + State GetState() const; + int GetImage( int index=-1, int scale=100 ) const; + struct timeval GetTimestamp( int index=-1 ) const; + int GetCaptureDelay() const { return( capture_delay ); } + int GetAlarmCaptureDelay() const { return( alarm_capture_delay ); } + unsigned int GetLastReadIndex() const; + unsigned int GetLastWriteIndex() const; + unsigned int GetLastEvent() const; + double GetFPS() const; + void ForceAlarmOn( int force_score, const char *force_case, const char *force_text="" ); + void ForceAlarmOff(); + void CancelForced(); + TriggerState GetTriggerState() const { return( (TriggerState)(trigger_data?trigger_data->trigger_state:TRIGGER_CANCEL )); } + + void actionReload(); + void actionEnable(); + void actionDisable(); + void actionSuspend(); + void actionResume(); + + int actionBrightness( int p_brightness=-1 ); + int actionHue( int p_hue=-1 ); + int actionColour( int p_colour=-1 ); + int actionContrast( int p_contrast=-1 ); + + inline int PrimeCapture() + { + return( camera->PrimeCapture() ); + } + inline int PreCapture() + { + return( camera->PreCapture() ); + } + int Capture(); + int PostCapture() + { + return( camera->PostCapture() ); + } + + unsigned int DetectMotion( const Image &comp_image, Event::StringSet &zoneSet ); + bool CheckSignal( const Image *image ); + bool Analyse(); + void DumpImage( Image *dump_image ) const; + void TimestampImage( Image *ts_image, const struct timeval *ts_time ) const; + bool closeEvent(); + + void Reload(); + void ReloadZones(); + void ReloadLinkedMonitors( const char * ); + + bool DumpSettings( char *output, bool verbose ); + void DumpZoneImage( const char *zone_string=0 ); + +#if ZM_HAS_V4L + static int LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose purpose ); +#endif // ZM_HAS_V4L + static int LoadRemoteMonitors( const char *protocol, const char *host, const char*port, const char*path, Monitor **&monitors, Purpose purpose ); + static int LoadFileMonitors( const char *file, Monitor **&monitors, Purpose purpose ); +#if HAVE_LIBAVFORMAT + static int LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose purpose ); +#endif // HAVE_LIBAVFORMAT + static Monitor *Load( int id, bool load_zones, Purpose purpose ); + //void writeStreamImage( Image *image, struct timeval *timestamp, int scale, int mag, int x, int y ); + //void StreamImages( int scale=100, int maxfps=10, time_t ttl=0, int msq_id=0 ); + //void StreamImagesRaw( int scale=100, int maxfps=10, time_t ttl=0 ); + //void StreamImagesZip( int scale=100, int maxfps=10, time_t ttl=0 ); + void SingleImage( int scale=100 ); + void SingleImageRaw( int scale=100 ); + void SingleImageZip( int scale=100 ); +#if HAVE_LIBAVCODEC + //void StreamMpeg( const char *format, int scale=100, int maxfps=10, int bitrate=100000 ); +#endif // HAVE_LIBAVCODEC +}; + +#define MOD_ADD( var, delta, limit ) (((var)+(limit)+(delta))%(limit)) + +class MonitorStream : public StreamBase +{ +protected: + typedef struct SwapImage { + bool valid; + struct timeval timestamp; + char file_name[PATH_MAX]; + } SwapImage; + +private: + SwapImage *temp_image_buffer; + int temp_image_buffer_count; + int temp_read_index; + int temp_write_index; + +protected: + time_t ttl; + +protected: + int playback_buffer; + bool delayed; + + int frame_count; + +protected: + bool checkSwapPath( const char *path, bool create_path ); + + bool sendFrame( const char *filepath, struct timeval *timestamp ); + bool sendFrame( Image *image, struct timeval *timestamp ); + void processCommand( const CmdMsg *msg ); + +public: + MonitorStream() : playback_buffer( 0 ), delayed( false ), frame_count( 0 ) + { + } + void setStreamBuffer( int p_playback_buffer ) + { + playback_buffer = p_playback_buffer; + } + void setStreamTTL( time_t p_ttl ) + { + ttl = p_ttl; + } + void setStreamStart( int monitor_id ) + { + loadMonitor( monitor_id ); + } + void runStream(); +}; + +#endif // ZM_MONITOR_H diff --git a/src/zm_mpeg.cpp b/src/zm_mpeg.cpp index 620d4382f..f2850f9e7 100644 --- a/src/zm_mpeg.cpp +++ b/src/zm_mpeg.cpp @@ -29,6 +29,24 @@ extern "C" { #include } +#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(54, 1, 0) +static int encode_frame(AVCodecContext *c, AVFrame *frame) +{ + AVPacket pkt = { 0 }; + int ret, got_output; + + av_init_packet(&pkt); + av_init_packet(&pkt); + ret = avcodec_encode_video2(c, &pkt, frame, &got_output); + if (ret < 0) + return ret; + + ret = pkt.size; + av_free_packet(&pkt); + return ret; +} +#endif + bool VideoStream::initialised = false; VideoStream::MimeData VideoStream::mime_data[] = { @@ -117,7 +135,11 @@ void VideoStream::SetupCodec( int colours, int subpixelorder, int width, int hei ost = NULL; if (of->video_codec != CODEC_ID_NONE) { +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) ost = av_new_stream(ofc, 0); +#else + ost = avformat_new_stream(ofc, 0); +#endif if (!ost) { Panic( "Could not alloc stream" ); @@ -170,7 +192,11 @@ void VideoStream::SetParameters() { /* set the output parameters (must be done even if no parameters). */ +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) if ( av_set_parameters(ofc, NULL) < 0 ) +#else + if ( avformat_write_header(ofc, NULL) < 0 ) +#endif { Panic( "Invalid output format parameters" ); } @@ -179,7 +205,7 @@ void VideoStream::SetParameters() const char *VideoStream::MimeType() const { - for ( int i = 0; i < sizeof(mime_data)/sizeof(*mime_data); i++ ) + for ( unsigned int i = 0; i < sizeof(mime_data)/sizeof(*mime_data); i++ ) { if ( strcmp( format, mime_data[i].format ) == 0 ) { @@ -216,7 +242,11 @@ void VideoStream::OpenStream() } /* open the codec */ +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 7, 0) if ( avcodec_open(c, codec) < 0 ) +#else + if ( avcodec_open2(c, codec, 0) < 0 ) +#endif { Panic( "Could not open codec" ); } @@ -262,9 +292,9 @@ void VideoStream::OpenStream() if ( !(of->flags & AVFMT_NOFILE) ) { #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) - if ( avio_open(&ofc->pb, filename, URL_WRONLY) < 0 ) + if ( avio_open(&ofc->pb, filename, AVIO_FLAG_WRITE) < 0 ) #else - if ( url_fopen(&ofc->pb, filename, URL_WRONLY) < 0 ) + if ( url_fopen(&ofc->pb, filename, AVIO_FLAG_WRITE) < 0 ) #endif { Fatal( "Could not open '%s'", filename ); @@ -281,7 +311,11 @@ void VideoStream::OpenStream() } /* write the stream header, if any */ +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) av_write_header(ofc); +#else + avformat_write_header(ofc, NULL); +#endif } VideoStream::VideoStream( const char *filename, const char *format, int bitrate, double frame_rate, int colours, int subpixelorder, int width, int height ) @@ -320,7 +354,7 @@ VideoStream::~VideoStream() av_write_trailer(ofc); /* free the streams */ - for( int i = 0; i < ofc->nb_streams; i++) + for( unsigned int i = 0; i < ofc->nb_streams; i++) { av_freep(&ofc->streams[i]); } @@ -411,7 +445,12 @@ double VideoStream::EncodeFrame( const uint8_t *buffer, int buffer_size, bool ad { if ( add_timestamp ) ost->pts.val = timestamp; +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(54, 1, 0) // NEXTIME int out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, opicture_ptr); +#else + int out_size = encode_frame(c, opicture_ptr); + +#endif if ( out_size > 0 ) { #if ZM_FFMPEG_048 diff --git a/src/zm_plugin.cpp b/src/zm_plugin.cpp new file mode 100644 index 000000000..29a068135 --- /dev/null +++ b/src/zm_plugin.cpp @@ -0,0 +1,105 @@ +#include "zm_plugin.h" + + + +/*!\fn Plugin::Plugin(const std::string &sFilename) + * \param sFilename is the name of plugin file to load + */ +Plugin::Plugin(const std::string &sFilename) + : m_sPluginFileName(sFilename), + m_hDLL(0), + m_pDLLRefCount(0), + m_pfnGetEngineVersion(0), + m_pfnRegisterPlugin(0) +{ + + // Try to load the plugin as a dynamic library + m_hDLL = dlopen(sFilename.c_str(), RTLD_LAZY|RTLD_GLOBAL); + + if(!m_hDLL) // if library hasn't been loaded successfully + { + throw runtime_error(string("Could not load '") + sFilename + "'"); + } + + // Locate the plugin's exported functions + try + { + m_pfnGetEngineVersion = reinterpret_cast(dlsym(m_hDLL, "getEngineVersion")); + m_pfnRegisterPlugin = reinterpret_cast(dlsym(m_hDLL, "registerPlugin")); + + // If the functions aren't found, we're going to assume this is + // a plain simple DLL and not one of our plugins + if(!m_pfnGetEngineVersion || ! m_pfnRegisterPlugin) + throw runtime_error(string("'") + sFilename + "' is not a valid plugin"); + + // Initialize a new DLL reference counter + m_pDLLRefCount = new size_t(1); + } + catch(runtime_error &ex) + { + dlclose(m_hDLL); + throw ex; + } + catch(...) + { + dlclose(m_hDLL); + throw runtime_error(string("Unknown exception while loading plugin '") + sFilename + string("'")); + } +} + + + +/*!\fn Plugin::Plugin(const Plugin &Other) + * \param Other is the other plugin instance to copy + */ +Plugin::Plugin(const Plugin &Other) + : m_sPluginFileName(Other.m_sPluginFileName), + m_hDLL(Other.m_hDLL), + m_pDLLRefCount(Other.m_pDLLRefCount), + m_pfnGetEngineVersion(Other.m_pfnGetEngineVersion), + m_pfnRegisterPlugin(Other.m_pfnRegisterPlugin) +{ + // Increase DLL reference counter + ++*m_pDLLRefCount; +} + + + +/*!\fn Plugin::operator=(const Plugin &Other) + * \param Other is the other plugin instance to copy + * return copy of object + */ +Plugin& Plugin::operator=(const Plugin &Other) +{ + m_hDLL = Other.m_hDLL; + m_pfnGetEngineVersion = Other.m_pfnGetEngineVersion; + m_pfnRegisterPlugin = Other.m_pfnRegisterPlugin; + m_pDLLRefCount = Other.m_pDLLRefCount; + m_sPluginFileName = Other.m_sPluginFileName; + // Increase DLL reference counter + ++*m_pDLLRefCount; + return *this; + +} + + + +Plugin::~Plugin() +{ + // Only unload the DLL if there are no more references to it + if(!--*m_pDLLRefCount) + { + delete m_pDLLRefCount; + dlclose(m_hDLL); + } +} + + + +/*!\fn Plugin::registerPlugin(PluginManager &K) + * \param K is the pointer to plugin manager + */ +void Plugin::registerPlugin(PluginManager &K) +{ + m_pfnRegisterPlugin(K, m_sPluginFileName); +} diff --git a/src/zm_plugin.h b/src/zm_plugin.h new file mode 100644 index 000000000..a9247d646 --- /dev/null +++ b/src/zm_plugin.h @@ -0,0 +1,78 @@ +#ifndef ZM_PLUGIN_H +#define ZM_PLUGIN_H + + + +#include +#include +#include + +#include +#include "zm.h" + + + +using namespace std; + + + +class PluginManager; + + + +//! Signature for the version query function +typedef int fnGetEngineVersion(); + +//! Signature for the plugin's registration function +typedef void fnRegisterPlugin(PluginManager &, string); + + + +//! Representation of a plugin. +/*! Use for loading plugin's shared library + * and registration of it to the PluginManager. + */ +class Plugin +{ + +public: + + //! Initialize and load plugin + Plugin(const std::string &sFilename); + + //! Copy existing plugin instance + Plugin(const Plugin &Other); + + //! Operator =. + Plugin &operator =(const Plugin &Other); + + //! Unload a plugin + ~Plugin(); + + //! Query the plugin for its expected engine version + int getEngineVersion() const { return m_pfnGetEngineVersion();} + + //! Register the plugin to a PluginManager + void registerPlugin(PluginManager &K); + +private: + + //! Shared file name. + string m_sPluginFileName; + + //! DLL handle + void* m_hDLL; + + //! Number of references to the DLL + size_t *m_pDLLRefCount; + + //! Version query function + fnGetEngineVersion *m_pfnGetEngineVersion; + + //! Plugin registration function + fnRegisterPlugin *m_pfnRegisterPlugin; +}; + + + +#endif //ZM_PLUGIN_H diff --git a/src/zm_plugin_manager.cpp b/src/zm_plugin_manager.cpp new file mode 100644 index 000000000..5b9701957 --- /dev/null +++ b/src/zm_plugin_manager.cpp @@ -0,0 +1,118 @@ +#include "zm_plugin_manager.h" + + + +/*! \fn file_select(const struct direct *entry) + * A functor for selection of files with specified extension. + * \param entry is file structure + * \return 1 if file match selection criteria and + * 0 otherwise. + * NOTE: file extension is specified by PluginManager::m_sPluginExt + * static variable. + */ +int file_select(const struct direct *entry) +{ + char *ptr; + + if ((strcmp(entry->d_name, ".")== 0) || (strcmp(entry->d_name, "..") == 0)) + return 0; + + // Check for filename extensions. + ptr = rindex((char*)entry->d_name, '.'); + if ((ptr != NULL) && (strcmp(ptr, (PluginManager::m_sPluginExt).c_str()) == 0)) + return 1; + else + return 0; +} + + + + +/*! \fn join_paths(const string& p1, const string& p2) + * \param p1 is the first part of desired path + * \param p2 is the second part of desired path + * \return joined path string. + */ +string join_paths(const string& p1, const string& p2) +{ + char sep = '/'; + string tmp = p1; + +#ifdef _WIN32 + sep = '\\'; +#endif + + if (p1[p1.length()] != sep) + { // Need to add a path separator + tmp += sep; + return(tmp + p2); + } + else + return(p1 + p2); +} + + + +string PluginManager::m_sPluginExt = DEFAULT_PLUGIN_EXT; + + +PluginManager::PluginManager() +{ +} + + + +/*!\fn PluginManager::loadPlugin(const string &sFilename)) + * \param sFilename is the name of plugin file to load + */ +void PluginManager::loadPlugin(const string &sFilename) +{ + try + { + if(m_LoadedPlugins.find(sFilename) == m_LoadedPlugins.end()) + m_LoadedPlugins.insert(PluginMap::value_type(sFilename, Plugin(sFilename))).first->second.registerPlugin(*this); + } + catch(runtime_error &ex) + { + Info("Runtime error: %s", ex.what()); + } + catch(...) + { + Info("Unknown exception. Could not load %s.", sFilename.c_str()); + } +} + + + +/*!\fn PluginManager::findPlugins(const string &sPath) + * \param sPath is the path to folder to search plugins + * return count of found plugins + */ +int PluginManager::findPlugins(const string &sPath) +{ + + struct direct **files; + + int count = scandir(sPath.c_str(), &files, file_select, alphasort); + + for (int i = 1; i < count + 1; ++i) + { + string sFileName = files[i-1]->d_name; + string sFullPath = join_paths(sPath, sFileName); + + Info("Loading plugin %s ... ", sFullPath.c_str()); + + loadPlugin(sFullPath); + } + + return count; +} + + +/*!\fn PluginManager::configurePlugins(string sConfigFileName) + * \param sConfigFileName is the path to the configuration file, where parameters for all plugins are given. + */ +void PluginManager::configurePlugins(string sConfigFileName) +{ + m_ImageAnalyser.configurePlugins(sConfigFileName); +} diff --git a/src/zm_plugin_manager.h b/src/zm_plugin_manager.h new file mode 100644 index 000000000..b108dd74a --- /dev/null +++ b/src/zm_plugin_manager.h @@ -0,0 +1,85 @@ +#ifndef ZM_PLUGIN_MANAGER_H +#define ZM_PLUGIN_MANAGER_H + + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "zm.h" +#include "zm_image_analyser.h" +#include "zm_detector.h" +#include "zm_plugin.h" + + + +using namespace std; + + +#define ZM_ENGINE_VERSION 24 +#define DEFAULT_PLUGIN_EXT ".zmpl" + + + +//! Map of plugins by their associated file names. +typedef std::map PluginMap; + + +//! External function for sorting of files in directory. +extern int alphasort(); + + +//! Function to select files with plugins by extension. +int file_select(const struct direct *entry); + + +//! Join two path strings. +string join_paths(const string& p1, const string& p2); + + + +//! Class for managing all loaded plugins. +class PluginManager +{ + +public: + + //! Default constructor. + PluginManager(); + + //! Access the image analyser. + ImageAnalyser &getImageAnalyser() {return m_ImageAnalyser;} + + //! Loads a plugin. + void loadPlugin(const string &sFilename); + + //! Find and load all plugins from given directory, returns number of found plugins. + int findPlugins(const string &sPath); + + //! Configure all loaded plugins using given configuration file. + void configurePlugins(string sConfigFileName); + + //! Set plugin extension. + void setPluginExt(string sPluginExt) { m_sPluginExt = sPluginExt; } + + //! Extension for zm plugins. + static string m_sPluginExt; + +private: + + //! All plugins currently loaded. + PluginMap m_LoadedPlugins; + + //! The image analyser. + ImageAnalyser m_ImageAnalyser; +}; + + + +#endif //ZM_PLUGIN_MANAGER_H diff --git a/src/zm_remote_camera_http.cpp b/src/zm_remote_camera_http.cpp index 7f714d960..c82df6c96 100644 --- a/src/zm_remote_camera_http.cpp +++ b/src/zm_remote_camera_http.cpp @@ -177,7 +177,7 @@ int RemoteCameraHttp::ReadData( Buffer &buffer, int bytes_expected ) do { static unsigned char temp_buffer[ZM_NETWORK_BUFSIZ]; - int bytes_to_read = total_bytes_to_read>sizeof(temp_buffer)?sizeof(temp_buffer):total_bytes_to_read; + int bytes_to_read = (unsigned int)total_bytes_to_read>(unsigned int)sizeof(temp_buffer)?sizeof(temp_buffer):total_bytes_to_read; int bytes_read = read( sd, temp_buffer, bytes_to_read ); if ( bytes_read < 0) @@ -428,7 +428,7 @@ int RemoteCameraHttp::GetResponse() if ( content_length ) { - while ( buffer.size() < content_length ) + while ( buffer.size() < (unsigned int)content_length ) { int buffer_len = ReadData( buffer ); if ( buffer_len == 0 ) @@ -550,10 +550,10 @@ int RemoteCameraHttp::GetResponse() boundary_match_len = strlen( boundary_match ); static int n_headers; - static char *headers[32]; + //static char *headers[32]; static int n_subheaders; - static char *subheaders[32]; + //static char *subheaders[32]; static char *http_header; static char *connection_header; @@ -565,7 +565,6 @@ int RemoteCameraHttp::GetResponse() static char http_version[16]; static char status_code[16]; - static int status; static char status_mesg[256]; static char connection_type[32]; static int content_length; @@ -587,7 +586,6 @@ int RemoteCameraHttp::GetResponse() http_version[0] = '\0'; status_code [0]= '\0'; - status = 0; status_mesg [0]= '\0'; connection_type [0]= '\0'; content_length = 0; @@ -645,7 +643,8 @@ int RemoteCameraHttp::GetResponse() Debug( 6, "%s", header_ptr ); if ( (crlf = mempbrk( header_ptr, "\r\n", header_len )) ) { - headers[n_headers++] = header_ptr; + //headers[n_headers++] = header_ptr; + n_headers++; if ( !http_header && (strncasecmp( header_ptr, http_match, http_match_len ) == 0) ) { @@ -857,7 +856,8 @@ int RemoteCameraHttp::GetResponse() if ( (crlf = mempbrk( subheader_ptr, "\r\n", subheader_len )) ) { - subheaders[n_subheaders++] = subheader_ptr; + //subheaders[n_subheaders++] = subheader_ptr; + n_subheaders++; if ( !boundary_header && (strncasecmp( subheader_ptr, content_boundary, content_boundary_len ) == 0) ) { @@ -960,7 +960,7 @@ int RemoteCameraHttp::GetResponse() if ( content_length ) { - while ( buffer.size() < content_length ) + while ( buffer.size() < (unsigned int)content_length ) { //int buffer_len = ReadData( buffer, content_length-buffer.size() ); int buffer_len = ReadData( buffer ); diff --git a/src/zm_remote_camera_rtsp.cpp b/src/zm_remote_camera_rtsp.cpp index 3ccc76973..e352589f6 100644 --- a/src/zm_remote_camera_rtsp.cpp +++ b/src/zm_remote_camera_rtsp.cpp @@ -161,7 +161,7 @@ int RemoteCameraRtsp::PrimeCapture() // Find first video stream present mVideoStreamId = -1; - for ( int i = 0; i < mFormatContext->nb_streams; i++ ) + for ( unsigned int i = 0; i < mFormatContext->nb_streams; i++ ) #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) if ( mFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO ) #else @@ -183,7 +183,11 @@ int RemoteCameraRtsp::PrimeCapture() Panic( "Unable to locate codec %d decoder", mCodecContext->codec_id ); // Open codec +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 7, 0) if ( avcodec_open( mCodecContext, mCodec ) < 0 ) +#else + if ( avcodec_open2( mCodecContext, mCodec, 0 ) < 0 ) +#endif Panic( "Can't open codec" ); // Allocate space for the native video frame @@ -196,7 +200,7 @@ int RemoteCameraRtsp::PrimeCapture() Fatal( "Unable to allocate frame(s)"); int pSize = avpicture_get_size( imagePixFormat, width, height ); - if( pSize != imagesize) { + if( (unsigned int)pSize != imagesize) { Fatal("Image size mismatch. Required: %d Available: %d",pSize,imagesize); } diff --git a/src/zm_rtsp.cpp b/src/zm_rtsp.cpp index b28e379a3..a86c8bbb0 100644 --- a/src/zm_rtsp.cpp +++ b/src/zm_rtsp.cpp @@ -332,7 +332,7 @@ int RtspThread::run() std::string trackUrl = mUrl; if ( mFormatContext->nb_streams >= 1 ) { - for ( int i = 0; i < mFormatContext->nb_streams; i++ ) + for ( unsigned int i = 0; i < mFormatContext->nb_streams; i++ ) { SessionDescriptor::MediaDescriptor *mediaDesc = sessDesc->getStream( i ); #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) @@ -580,7 +580,7 @@ int RtspThread::run() unsigned short len = ntohs( *((unsigned short *)(buffer+2)) ); Debug( 4, "Got %d bytes left, expecting %d byte packet on channel %d", buffer.size(), len, channel ); - if ( buffer.size() < (len+4) ) + if ( (unsigned short)buffer.size() < (len+4) ) { Debug( 4, "Missing %zd bytes, rereading", (len+4)-nBytes ); break; diff --git a/src/zm_sdp.cpp b/src/zm_sdp.cpp index ebb593caf..aa33206c5 100644 --- a/src/zm_sdp.cpp +++ b/src/zm_sdp.cpp @@ -263,7 +263,7 @@ SessionDescriptor::SessionDescriptor( const std::string &url, const std::string if ( attrTokens.size() > 1 ) { StringVector attr2Tokens = split( attrTokens[1], "; " ); - for ( int i = 0; i < attr2Tokens.size(); i++ ) + for ( unsigned int i = 0; i < attr2Tokens.size(); i++ ) { StringVector attr3Tokens = split( attr2Tokens[i], "=" ); //Info( "Name = %s, Value = %s", attr3Tokens[0].c_str(), attr3Tokens[1].c_str() ); @@ -331,10 +331,15 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const strncpy( formatContext->filename, mUrl.c_str(), sizeof(formatContext->filename) ); //formatContext->nb_streams = mMediaList.size(); - for ( int i = 0; i < mMediaList.size(); i++ ) + for ( unsigned int i = 0; i < mMediaList.size(); i++ ) { const MediaDescriptor *mediaDesc = mMediaList[i]; +#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 8, 0) AVStream *stream = av_new_stream( formatContext, i ); +#else + AVStream *stream = avformat_new_stream( formatContext, NULL ); + stream->id = i; +#endif Debug( 1, "Looking for codec for %s payload type %d / %s", mediaDesc->getType().c_str(), mediaDesc->getPayloadType(), mediaDesc->getPayloadDesc().c_str() ); #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) @@ -352,7 +357,7 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const if ( mediaDesc->getPayloadType() < PAYLOAD_TYPE_DYNAMIC ) { // Look in static table - for ( int i = 0; i < (sizeof(smStaticPayloads)/sizeof(*smStaticPayloads)); i++ ) + for ( unsigned int i = 0; i < (sizeof(smStaticPayloads)/sizeof(*smStaticPayloads)); i++ ) { if ( smStaticPayloads[i].payloadType == mediaDesc->getPayloadType() ) { @@ -368,7 +373,7 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const else { // Look in dynamic table - for ( int i = 0; i < (sizeof(smDynamicPayloads)/sizeof(*smDynamicPayloads)); i++ ) + for ( unsigned int i = 0; i < (sizeof(smDynamicPayloads)/sizeof(*smDynamicPayloads)); i++ ) { if ( smDynamicPayloads[i].payloadName == mediaDesc->getPayloadDesc() ) { diff --git a/src/zm_sdp.h b/src/zm_sdp.h index bf5bc02b3..ba4652aea 100644 --- a/src/zm_sdp.h +++ b/src/zm_sdp.h @@ -41,7 +41,11 @@ protected: int payloadType; const char payloadName[6]; enum AVMediaType codecType; +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54,25,0) + enum AVCodecID codecId; +#else enum CodecID codecId; +#endif int clockRate; int autoChannels; }; @@ -50,7 +54,12 @@ protected: { const char payloadName[32]; enum AVMediaType codecType; +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54,25,0) + enum AVCodecID codecId; +#else enum CodecID codecId; +#endif + //int clockRate; //int autoChannels; }; @@ -207,7 +216,7 @@ public: } MediaDescriptor *getStream( int index ) { - if ( index < 0 || index >= mMediaList.size() ) + if ( index < 0 || (unsigned int)index >= mMediaList.size() ) return( 0 ); return( mMediaList[index] ); } diff --git a/src/zm_stream.cpp b/src/zm_stream.cpp index 41414f495..2cea2f10b 100644 --- a/src/zm_stream.cpp +++ b/src/zm_stream.cpp @@ -262,7 +262,7 @@ bool StreamBase::sendTextFrame( const char *frame_text ) fprintf( stdout, "--ZoneMinderFrame\r\n" ); fprintf( stdout, "Content-Length: %d\r\n", n_bytes ); fprintf( stdout, "Content-Type: image/jpeg\r\n\r\n" ); - if ( fwrite( buffer, n_bytes, 1, stdout ) ) + if ( fwrite( buffer, n_bytes, 1, stdout ) != 1 ) { Error( "Unable to send stream text frame: %s", strerror(errno) ); return( false ); diff --git a/src/zm_thread.cpp b/src/zm_thread.cpp index 8ad372e78..09cf0da3f 100644 --- a/src/zm_thread.cpp +++ b/src/zm_thread.cpp @@ -261,7 +261,8 @@ void *Thread::mThreadFunc( void *arg ) thisPtr->mThreadCondition.signal(); thisPtr->mThreadMutex.unlock(); thisPtr->mRunning = true; - status = (void *)(thisPtr->run()); + int run=(thisPtr->run()); + status = (void *)&run; thisPtr->mRunning = false; Debug( 2, "Exiting thread, status %p", status ); } diff --git a/src/zm_thread.h b/src/zm_thread.h index 03fd3db39..5a635298c 100644 --- a/src/zm_thread.h +++ b/src/zm_thread.h @@ -207,7 +207,7 @@ protected: void exit( int status = 0 ) { //INFO( "Exiting" ); - pthread_exit( (void *)status ); + pthread_exit( (void *)&status ); } static void *mThreadFunc( void *arg ); diff --git a/src/zm_user.cpp b/src/zm_user.cpp index bca01b454..f7ec5c6aa 100644 --- a/src/zm_user.cpp +++ b/src/zm_user.cpp @@ -1,5 +1,5 @@ /* - * ZoneMinder regular expression class implementation, $Date: 2011-08-03 12:31:06 +0100 (Wed, 03 Aug 2011) $, $Revision: 3489 $ + * ZoneMinder regular expression class implementation, $Date$, $Revision$ * Copyright (C) 2001-2008 Philip Coombes * * This program is free software; you can redistribute it and/or @@ -143,7 +143,7 @@ User *zmLoadUser( const char *username, const char *password ) // Function to validate an authentication string User *zmLoadAuthUser( const char *auth, bool use_remote_addr ) { -#if HAVE_DECL_MD5 +#if HAVE_DECL_MD5 || HAVE_DECL_GNUTLS_FINGERPRINT #ifdef HAVE_GCRYPT_H // Special initialisation for libgcrypt if ( !gcry_check_version( GCRYPT_VERSION ) ) @@ -196,7 +196,8 @@ User *zmLoadAuthUser( const char *auth, bool use_remote_addr ) char auth_key[512] = ""; char auth_md5[32+1] = ""; - unsigned char md5sum[MD5_DIGEST_LENGTH]; + size_t md5len = 32; + unsigned char md5sum[md5len]; time_t now = time( 0 ); int max_tries = 2; @@ -216,9 +217,14 @@ User *zmLoadAuthUser( const char *auth, bool use_remote_addr ) now_tm->tm_year ); +#if HAVE_DECL_MD5 MD5( (unsigned char *)auth_key, strlen(auth_key), md5sum ); +#elif HAVE_DECL_GNUTLS_FINGERPRINT + gnutls_datum_t md5data = { (unsigned char *)auth_key, strlen(auth_key) }; + gnutls_fingerprint( GNUTLS_DIG_MD5, &md5data, md5sum, &md5len ); +#endif auth_md5[0] = '\0'; - for ( int j = 0; j < MD5_DIGEST_LENGTH; j++ ) + for ( unsigned int j = 0; j < md5len; j++ ) { sprintf( &auth_md5[2*j], "%02x", md5sum[j] ); } diff --git a/src/zm_user.h b/src/zm_user.h index 7205b32b4..95fb71474 100644 --- a/src/zm_user.h +++ b/src/zm_user.h @@ -1,70 +1,74 @@ -/* - * ZoneMinder User Class Interface, $Date: 2010-11-11 12:11:06 +0000 (Thu, 11 Nov 2010) $, $Revision: 3188 $ - * Copyright (C) 2001-2008 Philip Coombes - * - * 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. -*/ - -#include "zm.h" -#include "zm_db.h" - -#ifndef ZM_USER_H -#define ZM_USER_H - -#if HAVE_GNUTLS_OPENSSL_H -#include -#if HAVE_GCRYPT_H -#include -#endif // HAVE_GCRYPT_H -#elif HAVE_LIBCRYPTO -#include -#endif // HAVE_LIBGNUTLS_OPENSSL || HAVE_LIBCRYPTO - -class User -{ -public: - typedef enum { PERM_NONE=1, PERM_VIEW, PERM_EDIT } Permission; - -protected: - char username[32+1]; - char password[64+1]; - bool enabled; - Permission stream; - Permission events; - Permission control; - Permission monitors; - Permission system; - int *monitor_ids; - -public: - User(); - User( MYSQL_ROW &dbrow ); - ~User(); - - const char *getUsername() const { return( username ); } - const char *getPassword() const { return( password ); } - bool isEnabled() const { return( enabled ); } - Permission getStream() const { return( stream ); } - Permission getEvents() const { return( events ); } - Permission getControl() const { return( control ); } - Permission getMonitors() const { return( monitors ); } - Permission getSystem() const { return( system ); } - bool canAccess( int monitor_id ); -}; - -User *zmLoadUser( const char *username, const char *password=0 ); -User *zmLoadAuthUser( const char *auth, bool use_remote_addr ); - -#endif // ZM_USER_H +/* + * ZoneMinder User Class Interface, $Date$, $Revision$ + * Copyright (C) 2001-2008 Philip Coombes + * + * 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. +*/ + +#include "zm.h" +#include "zm_db.h" + +#ifndef ZM_USER_H +#define ZM_USER_H + +#if HAVE_GNUTLS_OPENSSL_H +#include +#endif +#if HAVE_GNUTLS_GNUTLS_H +#include +#endif + +#if HAVE_GCRYPT_H +#include +#elif HAVE_LIBCRYPTO +#include +#endif // HAVE_L || HAVE_LIBCRYPTO + +class User +{ +public: + typedef enum { PERM_NONE=1, PERM_VIEW, PERM_EDIT } Permission; + +protected: + char username[32+1]; + char password[64+1]; + bool enabled; + Permission stream; + Permission events; + Permission control; + Permission monitors; + Permission system; + int *monitor_ids; + +public: + User(); + User( MYSQL_ROW &dbrow ); + ~User(); + + const char *getUsername() const { return( username ); } + const char *getPassword() const { return( password ); } + bool isEnabled() const { return( enabled ); } + Permission getStream() const { return( stream ); } + Permission getEvents() const { return( events ); } + Permission getControl() const { return( control ); } + Permission getMonitors() const { return( monitors ); } + Permission getSystem() const { return( system ); } + bool canAccess( int monitor_id ); +}; + +User *zmLoadUser( const char *username, const char *password=0 ); +User *zmLoadAuthUser( const char *auth, bool use_remote_addr ); + +#endif // ZM_USER_H diff --git a/src/zm_utils.cpp b/src/zm_utils.cpp index fabd79c96..cef91366e 100644 --- a/src/zm_utils.cpp +++ b/src/zm_utils.cpp @@ -84,7 +84,7 @@ StringVector split( const std::string &string, const std::string chars, int limi break; // Find non-delimiters startIndex = tempString.find_first_not_of( chars, endIndex ); - if ( limit && (stringVector.size() == (limit-1)) ) + if ( limit && (stringVector.size() == (unsigned int)(limit-1)) ) { stringVector.push_back( string.substr( startIndex ) ); break; diff --git a/src/zm_zone.cpp b/src/zm_zone.cpp index 0acf7a045..1c6bfb69b 100644 --- a/src/zm_zone.cpp +++ b/src/zm_zone.cpp @@ -68,13 +68,13 @@ void Zone::Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_ pg_image->Outline( 0xff, polygon ); ranges = new Range[monitor->Height()]; - for ( int y = 0; y < monitor->Height(); y++) + for ( unsigned int y = 0; y < monitor->Height(); y++) { ranges[y].lo_x = -1; - ranges[y].hi_x = -1; + ranges[y].hi_x = 0; ranges[y].off_x = 0; const uint8_t *ppoly = pg_image->Buffer( 0, y ); - for ( int x = 0; x < monitor->Width(); x++, ppoly++ ) + for ( unsigned int x = 0; x < monitor->Width(); x++, ppoly++ ) { if ( *ppoly ) { @@ -82,7 +82,7 @@ void Zone::Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_ { ranges[y].lo_x = x; } - if ( ranges[y].hi_x < x ) + if ( (unsigned int)ranges[y].hi_x < x ) { ranges[y].hi_x = x; } @@ -120,10 +120,53 @@ void Zone::RecordStats( const Event *event ) } } + +//============================================================================= +bool Zone::CheckOverloadCount() +{ + Info("Overloaded count: %d, Overloaded frames: %d", overload_count, overload_frames); + if ( overload_count ) + { + Info( "In overload mode, %d frames of %d remaining", overload_count, overload_frames ); + Debug( 4, "In overload mode, %d frames of %d remaining", overload_count, overload_frames ); + overload_count--; + return( false ); + } + return true; +} + +void Zone::SetScore(unsigned int nScore) +{ + score = nScore; +} + + +void Zone::SetAlarmImage(const Image* srcImage) +{ + delete image; + image = new Image(*srcImage); +} + +int Zone::GetOverloadCount() +{ + return overload_count; +} + +void Zone::SetOverloadCount(int nOverCount) +{ + overload_count = nOverCount; +} + +int Zone::GetOverloadFrames() +{ + return overload_frames; +} +//=========================================================================== + + + bool Zone::CheckAlarms( const Image *delta_image ) { - bool alarm = false; - ResetStats(); if ( overload_count ) @@ -183,10 +226,10 @@ bool Zone::CheckAlarms( const Image *delta_image ) Debug( 5, "Got %d alarmed pixels, need %d -> %d, avg pixel diff %d", alarm_pixels, min_alarm_pixels, max_alarm_pixels, pixel_diff ); if( alarm_pixels ) { - if( min_alarm_pixels && (alarm_pixels < min_alarm_pixels) ) { + if( min_alarm_pixels && (alarm_pixels < (unsigned int)min_alarm_pixels) ) { /* Not enough pixels alarmed */ return (false); - } else if( max_alarm_pixels && (alarm_pixels > max_alarm_pixels) ) { + } else if( max_alarm_pixels && (alarm_pixels > (unsigned int)max_alarm_pixels) ) { /* Too many pixels alarmed */ overload_count = overload_frames; return (false); @@ -215,7 +258,7 @@ bool Zone::CheckAlarms( const Image *delta_image ) unsigned char *cpdiff; int ldx, hdx, ldy, hdy; bool block; - for ( int y = lo_y; y <= hi_y; y++ ) + for ( unsigned int y = lo_y; y <= hi_y; y++ ) { int lo_x = ranges[y].lo_x; int hi_x = ranges[y].hi_x; @@ -306,7 +349,7 @@ bool Zone::CheckAlarms( const Image *delta_image ) uint8_t last_x, last_y; BlobStats *bsx, *bsy; BlobStats *bsm, *bss; - for ( int y = lo_y; y <= hi_y; y++ ) + for ( unsigned int y = lo_y; y <= hi_y; y++ ) { int lo_x = ranges[y].lo_x; int hi_x = ranges[y].hi_x; @@ -350,7 +393,7 @@ bool Zone::CheckAlarms( const Image *delta_image ) alarm_blob_pixels++; bsx->count++; if ( x > bsx->hi_x ) bsx->hi_x = x; - if ( y > bsx->hi_y ) bsx->hi_y = y; + if ( (int)y > bsx->hi_y ) bsx->hi_y = y; } else { @@ -395,7 +438,7 @@ bool Zone::CheckAlarms( const Image *delta_image ) // Merge the slave blob into the master bsm->count += bss->count+1; if ( x > bsm->hi_x ) bsm->hi_x = x; - if ( y > bsm->hi_y ) bsm->hi_y = y; + if ( (int)y > bsm->hi_y ) bsm->hi_y = y; if ( bss->lo_x < bsm->lo_x ) bsm->lo_x = bss->lo_x; if ( bss->lo_y < bsm->lo_y ) bsm->lo_y = bss->lo_y; if ( bss->hi_x > bsm->hi_x ) bsm->hi_x = bss->hi_x; @@ -422,7 +465,7 @@ bool Zone::CheckAlarms( const Image *delta_image ) alarm_blob_pixels++; bsx->count++; if ( x > bsx->hi_x ) bsx->hi_x = x; - if ( y > bsx->hi_y ) bsx->hi_y = y; + if ( (int)y > bsx->hi_y ) bsx->hi_y = y; } } else @@ -439,7 +482,7 @@ bool Zone::CheckAlarms( const Image *delta_image ) alarm_blob_pixels++; bsy->count++; if ( x > bsy->hi_x ) bsy->hi_x = x; - if ( y > bsy->hi_y ) bsy->hi_y = y; + if ( (int)y > bsy->hi_y ) bsy->hi_y = y; } else { @@ -449,7 +492,7 @@ bool Zone::CheckAlarms( const Image *delta_image ) { BlobStats *bs = &blob_stats[i]; // See if we can recycle one first, only if it's at least two rows up - if ( bs->count && bs->hi_y < (y-1) ) + if ( bs->count && bs->hi_y < (int)(y-1) ) { if ( (min_blob_pixels && bs->count < min_blob_pixels) || (max_blob_pixels && bs->count > max_blob_pixels) ) { @@ -664,8 +707,6 @@ bool Zone::CheckAlarms( const Image *delta_image ) // Now outline the changed region if ( score ) { - alarm = true; - alarm_box = Box( Coord( alarm_lo_x, alarm_lo_y ), Coord( alarm_hi_x, alarm_hi_y ) ); //if ( monitor->followMotion() ) @@ -682,7 +723,7 @@ bool Zone::CheckAlarms( const Image *delta_image ) { // First mask out anything we don't want - for ( int y = lo_y; y <= hi_y; y++ ) + for ( unsigned int y = lo_y; y <= hi_y; y++ ) { pdiff = diff_buff + ((diff_width * y) + lo_x); @@ -919,7 +960,8 @@ int Zone::Load( Monitor *monitor, Zone **&zones ) if ( !ParsePolygonString( Coords, polygon ) ) Panic( "Unable to parse polygon string '%s' for zone %d/%s for monitor %s", Coords, Id, Name, monitor->Name() ); - if ( polygon.LoX() < 0 || polygon.HiX() >= monitor->Width() || polygon.LoY() < 0 || polygon.HiY() >= monitor->Height() ) + if ( polygon.LoX() < 0 || polygon.HiX() >= (int)monitor->Width() + || polygon.LoY() < 0 || polygon.HiY() >= (int)monitor->Height() ) Panic( "Zone %d/%s for monitor %s extends outside of image dimensions, %d, %d, %d, %d", Id, Name, monitor->Name(), polygon.LoX(), polygon.LoY(), polygon.HiX(), polygon.HiY() ); if ( false && !strcmp( Units, "Percent" ) ) @@ -1005,7 +1047,7 @@ void Zone::std_alarmedpixels(Image* pdiff_image, const Image* ppoly_image, unsig lo_y = polygon.LoY(); hi_y = polygon.HiY(); - for ( int y = lo_y; y <= hi_y; y++ ) + for ( unsigned int y = lo_y; y <= hi_y; y++ ) { lo_x = ranges[y].lo_x; hi_x = ranges[y].hi_x; @@ -1013,8 +1055,8 @@ void Zone::std_alarmedpixels(Image* pdiff_image, const Image* ppoly_image, unsig Debug( 7, "Checking line %d from %d -> %d", y, lo_x, hi_x ); pdiff = (uint8_t*)pdiff_image->Buffer( lo_x, y ); ppoly = ppoly_image->Buffer( lo_x, y ); - - for ( int x = lo_x; x <= hi_x; x++, pdiff++, ppoly++ ) + + for ( unsigned int x = lo_x; x <= hi_x; x++, pdiff++, ppoly++ ) { if ( *ppoly && (*pdiff > min_pixel_threshold) && (*pdiff <= calc_max_pixel_threshold) ) { @@ -1032,4 +1074,5 @@ void Zone::std_alarmedpixels(Image* pdiff_image, const Image* ppoly_image, unsig /* Store the results */ *pixel_count = pixelsalarmed; *pixel_sum = pixelsdifference; + Debug( 7, "STORED"); } diff --git a/src/zm_zone.cpp.orig b/src/zm_zone.cpp.orig new file mode 100644 index 000000000..0acf7a045 --- /dev/null +++ b/src/zm_zone.cpp.orig @@ -0,0 +1,1035 @@ +// +// ZoneMinder Zone Class Implementation, $Date$, $Revision$ +// Copyright (C) 2001-2008 Philip Coombes +// +// 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. +// + +#include "zm.h" +#include "zm_db.h" +#include "zm_zone.h" +#include "zm_image.h" +#include "zm_monitor.h" + +void Zone::Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold, int p_max_pixel_threshold, int p_min_alarm_pixels, int p_max_alarm_pixels, const Coord &p_filter_box, int p_min_filter_pixels, int p_max_filter_pixels, int p_min_blob_pixels, int p_max_blob_pixels, int p_min_blobs, int p_max_blobs, int p_overload_frames ) +{ + monitor = p_monitor; + + id = p_id; + label = new char[strlen(p_label)+1]; + strcpy( label, p_label ); + type = p_type; + polygon = p_polygon; + alarm_rgb = p_alarm_rgb; + check_method = p_check_method; + min_pixel_threshold = p_min_pixel_threshold; + max_pixel_threshold = p_max_pixel_threshold; + min_alarm_pixels = p_min_alarm_pixels; + max_alarm_pixels = p_max_alarm_pixels; + filter_box = p_filter_box; + min_filter_pixels = p_min_filter_pixels; + max_filter_pixels = p_max_filter_pixels; + min_blob_pixels = p_min_blob_pixels; + max_blob_pixels = p_max_blob_pixels; + min_blobs = p_min_blobs; + max_blobs = p_max_blobs; + overload_frames = p_overload_frames; + + Debug( 1, "Initialised zone %d/%s - %d - %dx%d - Rgb:%06x, CM:%d, MnAT:%d, MxAT:%d, MnAP:%d, MxAP:%d, FB:%dx%d, MnFP:%d, MxFP:%d, MnBS:%d, MxBS:%d, MnB:%d, MxB:%d, OF: %d", id, label, type, polygon.Width(), polygon.Height(), alarm_rgb, check_method, min_pixel_threshold, max_pixel_threshold, min_alarm_pixels, max_alarm_pixels, filter_box.X(), filter_box.Y(), min_filter_pixels, max_filter_pixels, min_blob_pixels, max_blob_pixels, min_blobs, max_blobs, overload_frames ); + + alarmed = false; + pixel_diff = 0; + alarm_pixels = 0; + alarm_filter_pixels = 0; + alarm_blob_pixels = 0; + alarm_blobs = 0; + min_blob_size = 0; + max_blob_size = 0; + image = 0; + score = 0; + + overload_count = 0; + + pg_image = new Image( monitor->Width(), monitor->Height(), 1, ZM_SUBPIX_ORDER_NONE); + pg_image->Clear(); + pg_image->Fill( 0xff, polygon ); + pg_image->Outline( 0xff, polygon ); + + ranges = new Range[monitor->Height()]; + for ( int y = 0; y < monitor->Height(); y++) + { + ranges[y].lo_x = -1; + ranges[y].hi_x = -1; + ranges[y].off_x = 0; + const uint8_t *ppoly = pg_image->Buffer( 0, y ); + for ( int x = 0; x < monitor->Width(); x++, ppoly++ ) + { + if ( *ppoly ) + { + if ( ranges[y].lo_x == -1 ) + { + ranges[y].lo_x = x; + } + if ( ranges[y].hi_x < x ) + { + ranges[y].hi_x = x; + } + } + } + } + + if ( config.record_diag_images ) + { + static char diag_path[PATH_MAX] = ""; + if ( !diag_path[0] ) + { + snprintf( diag_path, sizeof(diag_path), "%s/%s/diag-%d-poly.jpg", config.dir_events, monitor->Name(), id); + } + pg_image->WriteJpeg( diag_path ); + } +} + +Zone::~Zone() +{ + delete[] label; + delete image; + delete pg_image; + delete[] ranges; +} + +void Zone::RecordStats( const Event *event ) +{ + static char sql[ZM_SQL_MED_BUFSIZ]; + snprintf( sql, sizeof(sql), "insert into Stats set MonitorId=%d, ZoneId=%d, EventId=%d, FrameId=%d, PixelDiff=%d, AlarmPixels=%d, FilterPixels=%d, BlobPixels=%d, Blobs=%d, MinBlobSize=%d, MaxBlobSize=%d, MinX=%d, MinY=%d, MaxX=%d, MaxY=%d, Score=%d", monitor->Id(), id, event->Id(), event->Frames()+1, pixel_diff, alarm_pixels, alarm_filter_pixels, alarm_blob_pixels, alarm_blobs, min_blob_size, max_blob_size, alarm_box.LoX(), alarm_box.LoY(), alarm_box.HiX(), alarm_box.HiY(), score ); + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't insert event stats: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } +} + +bool Zone::CheckAlarms( const Image *delta_image ) +{ + bool alarm = false; + + ResetStats(); + + if ( overload_count ) + { + Info( "In overload mode, %d frames of %d remaining", overload_count, overload_frames ); + Debug( 4, "In overload mode, %d frames of %d remaining", overload_count, overload_frames ); + overload_count--; + return( false ); + } + + delete image; + // Get the difference image + Image *diff_image = image = new Image( *delta_image ); + int diff_width = diff_image->Width(); + uint8_t* diff_buff = (uint8_t*)diff_image->Buffer(); + uint8_t* pdiff; + const uint8_t* ppoly; + + unsigned int pixel_diff_count = 0; + + int alarm_lo_x = 0; + int alarm_hi_x = 0; + int alarm_lo_y = 0; + int alarm_hi_y = 0; + + int alarm_mid_x = -1; + int alarm_mid_y = -1; + + unsigned int lo_y = polygon.LoY(); + unsigned int lo_x = polygon.LoX(); + unsigned int hi_x = polygon.HiX(); + unsigned int hi_y = polygon.HiY(); + + Debug( 4, "Checking alarms for zone %d/%s in lines %d -> %d", id, label, lo_y, hi_y ); + + + Debug( 5, "Checking for alarmed pixels" ); + /* if(config.cpu_extensions && sseversion >= 20) { + sse2_alarmedpixels(diff_image, pg_image, &alarm_pixels, &pixel_diff_count); + } else { + std_alarmedpixels(diff_image, pg_image, &alarm_pixels, &pixel_diff_count); + } */ + std_alarmedpixels(diff_image, pg_image, &alarm_pixels, &pixel_diff_count); + + if ( config.record_diag_images ) + { + static char diag_path[PATH_MAX] = ""; + if ( !diag_path[0] ) + { + snprintf( diag_path, sizeof(diag_path), "%s/%s/diag-%d-%d.jpg", config.dir_events, monitor->Name(), id, 1 ); + } + diff_image->WriteJpeg( diag_path ); + } + + if ( pixel_diff_count && alarm_pixels ) + pixel_diff = pixel_diff_count/alarm_pixels; + Debug( 5, "Got %d alarmed pixels, need %d -> %d, avg pixel diff %d", alarm_pixels, min_alarm_pixels, max_alarm_pixels, pixel_diff ); + + if( alarm_pixels ) { + if( min_alarm_pixels && (alarm_pixels < min_alarm_pixels) ) { + /* Not enough pixels alarmed */ + return (false); + } else if( max_alarm_pixels && (alarm_pixels > max_alarm_pixels) ) { + /* Too many pixels alarmed */ + overload_count = overload_frames; + return (false); + } + } else { + /* No alarmed pixels */ + return (false); + } + + score = (100*alarm_pixels)/polygon.Area(); + if(score < 1) + score = 1; /* Fix for score of 0 when frame meets thresholds but alarmed area is not big enough */ + Debug( 5, "Current score is %d", score ); + + if ( check_method >= FILTERED_PIXELS ) + { + int bx = filter_box.X(); + int by = filter_box.Y(); + int bx1 = bx-1; + int by1 = by-1; + + Debug( 5, "Checking for filtered pixels" ); + if ( bx > 1 || by > 1 ) + { + // Now remove any pixels smaller than our filter size + unsigned char *cpdiff; + int ldx, hdx, ldy, hdy; + bool block; + for ( int y = lo_y; y <= hi_y; y++ ) + { + int lo_x = ranges[y].lo_x; + int hi_x = ranges[y].hi_x; + + pdiff = (uint8_t*)diff_image->Buffer( lo_x, y ); + + for ( int x = lo_x; x <= hi_x; x++, pdiff++ ) + { + if ( *pdiff == WHITE ) + { + // Check participation in an X block + ldx = (x>=(lo_x+bx1))?-bx1:lo_x-x; + hdx = (x<=(hi_x-bx1))?0:((hi_x-x)-bx1); + ldy = (y>=(lo_y+by1))?-by1:lo_y-y; + hdy = (y<=(hi_y-by1))?0:((hi_y-y)-by1); + block = false; + for ( int dy = ldy; !block && dy <= hdy; dy++ ) + { + for ( int dx = ldx; !block && dx <= hdx; dx++ ) + { + block = true; + for ( int dy2 = 0; block && dy2 < by; dy2++ ) + { + for ( int dx2 = 0; block && dx2 < bx; dx2++ ) + { + cpdiff = diff_buff + (((y+dy+dy2)*diff_width) + (x+dx+dx2)); + if ( !*cpdiff ) + { + block = false; + } + } + } + } + } + if ( !block ) + { + *pdiff = BLACK; + continue; + } + alarm_filter_pixels++; + } + } + } + } + else + { + alarm_filter_pixels = alarm_pixels; + } + + if ( config.record_diag_images ) + { + static char diag_path[PATH_MAX] = ""; + if ( !diag_path[0] ) + { + snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-%d-%d.jpg", config.dir_events, monitor->Id(), id, 2 ); + } + diff_image->WriteJpeg( diag_path ); + } + + Debug( 5, "Got %d filtered pixels, need %d -> %d", alarm_filter_pixels, min_filter_pixels, max_filter_pixels ); + + if( alarm_filter_pixels ) { + if( min_filter_pixels && (alarm_filter_pixels < min_filter_pixels) ) { + /* Not enough pixels alarmed */ + return (false); + } else if( max_filter_pixels && (alarm_filter_pixels > max_filter_pixels) ) { + /* Too many pixels alarmed */ + overload_count = overload_frames; + return (false); + } + } else { + /* No filtered pixels */ + return (false); + } + + score = (100*alarm_filter_pixels)/(polygon.Area()); + if(score < 1) + score = 1; /* Fix for score of 0 when frame meets thresholds but alarmed area is not big enough */ + Debug( 5, "Current score is %d", score ); + + if ( check_method >= BLOBS ) + { + Debug( 5, "Checking for blob pixels" ); + typedef struct { unsigned char tag; int count; int lo_x; int hi_x; int lo_y; int hi_y; } BlobStats; + BlobStats blob_stats[256]; + memset( blob_stats, 0, sizeof(BlobStats)*256 ); + uint8_t *spdiff; + uint8_t last_x, last_y; + BlobStats *bsx, *bsy; + BlobStats *bsm, *bss; + for ( int y = lo_y; y <= hi_y; y++ ) + { + int lo_x = ranges[y].lo_x; + int hi_x = ranges[y].hi_x; + + pdiff = (uint8_t*)diff_image->Buffer( lo_x, y ); + for ( int x = lo_x; x <= hi_x; x++, pdiff++ ) + { + if ( *pdiff == WHITE ) + { + Debug( 9, "Got white pixel at %d,%d (%p)", x, y, pdiff ); + //last_x = (x>lo_x)?*(pdiff-1):0; + //last_y = (y>lo_y&&x>=last_lo_x&&x<=last_hi_x)?*(pdiff-diff_width):0; + + last_x = 0; + if(x > 0) { + if((x-1) >= lo_x) { + last_x = *(pdiff-1); + } + } + + last_y = 0; + if(y > 0) { + if((y-1) >= lo_y && ranges[(y-1)].lo_x <= x && ranges[(y-1)].hi_x >= x) { + last_y = *(pdiff-diff_width); + } + } + + if ( last_x ) + { + Debug( 9, "Left neighbour is %d", last_x ); + bsx = &blob_stats[last_x]; + if ( last_y ) + { + Debug( 9, "Top neighbour is %d", last_y ); + bsy = &blob_stats[last_y]; + if ( last_x == last_y ) + { + Debug( 9, "Matching neighbours, setting to %d", last_x ); + // Add to the blob from the x side (either side really) + *pdiff = last_x; + alarm_blob_pixels++; + bsx->count++; + if ( x > bsx->hi_x ) bsx->hi_x = x; + if ( y > bsx->hi_y ) bsx->hi_y = y; + } + else + { + // Aggregate blobs + bsm = bsx->count>=bsy->count?bsx:bsy; + bss = bsm==bsx?bsy:bsx; + + Debug( 9, "Different neighbours, setting pixels of %d to %d", bss->tag, bsm->tag ); + Debug( 9, "Master blob t:%d, c:%d, lx:%d, hx:%d, ly:%d, hy:%d", bsm->tag, bsm->count, bsm->lo_x, bsm->hi_x, bsm->lo_y, bsm->hi_y ); + Debug( 9, "Slave blob t:%d, c:%d, lx:%d, hx:%d, ly:%d, hy:%d", bss->tag, bss->count, bss->lo_x, bss->hi_x, bss->lo_y, bss->hi_y ); + // Now change all those pixels to the other setting + int changed = 0; + for ( int sy = bss->lo_y; sy <= bss->hi_y; sy++) + { + int lo_sx = bss->lo_x>=ranges[sy].lo_x?bss->lo_x:ranges[sy].lo_x; + int hi_sx = bss->hi_x<=ranges[sy].hi_x?bss->hi_x:ranges[sy].hi_x; + + Debug( 9, "Changing %d, %d->%d", sy, lo_sx, hi_sx ); + Debug( 9, "Range %d, %d->%d", sy, ranges[sy].lo_x, ranges[sy].hi_x ); + spdiff = diff_buff + ((diff_width * sy) + lo_sx); + for ( int sx = lo_sx; sx <= hi_sx; sx++, spdiff++ ) + { + Debug( 9, "Pixel at %d,%d (%p) is %d", sx, sy, spdiff, *spdiff ); + if ( *spdiff == bss->tag ) + { + Debug( 9, "Setting pixel" ); + *spdiff = bsm->tag; + changed++; + } + } + } + *pdiff = bsm->tag; + alarm_blob_pixels++; + if ( !changed ) + { + Info( "Master blob t:%d, c:%d, lx:%d, hx:%d, ly:%d, hy:%d", bsm->tag, bsm->count, bsm->lo_x, bsm->hi_x, bsm->lo_y, bsm->hi_y ); + Info( "Slave blob t:%d, c:%d, lx:%d, hx:%d, ly:%d, hy:%d", bss->tag, bss->count, bss->lo_x, bss->hi_x, bss->lo_y, bss->hi_y ); + Error( "No pixels changed, exiting" ); + exit( -1 ); + } + + // Merge the slave blob into the master + bsm->count += bss->count+1; + if ( x > bsm->hi_x ) bsm->hi_x = x; + if ( y > bsm->hi_y ) bsm->hi_y = y; + if ( bss->lo_x < bsm->lo_x ) bsm->lo_x = bss->lo_x; + if ( bss->lo_y < bsm->lo_y ) bsm->lo_y = bss->lo_y; + if ( bss->hi_x > bsm->hi_x ) bsm->hi_x = bss->hi_x; + if ( bss->hi_y > bsm->hi_y ) bsm->hi_y = bss->hi_y; + + alarm_blobs--; + + Debug( 6, "Merging blob %d with %d at %d,%d, %d current blobs", bss->tag, bsm->tag, x, y, alarm_blobs ); + + // Clear out the old blob + bss->tag = 0; + bss->count = 0; + bss->lo_x = 0; + bss->lo_y = 0; + bss->hi_x = 0; + bss->hi_y = 0; + } + } + else + { + Debug( 9, "Setting to left neighbour %d", last_x ); + // Add to the blob from the x side + *pdiff = last_x; + alarm_blob_pixels++; + bsx->count++; + if ( x > bsx->hi_x ) bsx->hi_x = x; + if ( y > bsx->hi_y ) bsx->hi_y = y; + } + } + else + { + if ( last_y ) + { + Debug( 9, "Top neighbour is %d", last_y ); + Debug( 9, "Setting to top neighbour %d", last_y ); + + // Add to the blob from the y side + BlobStats *bsy = &blob_stats[last_y]; + + *pdiff = last_y; + alarm_blob_pixels++; + bsy->count++; + if ( x > bsy->hi_x ) bsy->hi_x = x; + if ( y > bsy->hi_y ) bsy->hi_y = y; + } + else + { + // Create a new blob + int i; + for ( i = (WHITE-1); i > 0; i-- ) + { + BlobStats *bs = &blob_stats[i]; + // See if we can recycle one first, only if it's at least two rows up + if ( bs->count && bs->hi_y < (y-1) ) + { + if ( (min_blob_pixels && bs->count < min_blob_pixels) || (max_blob_pixels && bs->count > max_blob_pixels) ) + { + if ( config.create_analysis_images || config.record_diag_images ) + { + for ( int sy = bs->lo_y; sy <= bs->hi_y; sy++ ) + { + spdiff = diff_buff + ((diff_width * sy) + bs->lo_x); + for ( int sx = bs->lo_x; sx <= bs->hi_x; sx++, spdiff++ ) + { + if ( *spdiff == bs->tag ) + { + *spdiff = BLACK; + } + } + } + } + alarm_blobs--; + alarm_blob_pixels -= bs->count; + + Debug( 6, "Eliminated blob %d, %d pixels (%d,%d - %d,%d), %d current blobs", i, bs->count, bs->lo_x, bs->lo_y, bs->hi_x, bs->hi_y, alarm_blobs ); + + bs->tag = 0; + bs->count = 0; + bs->lo_x = 0; + bs->lo_y = 0; + bs->hi_x = 0; + bs->hi_y = 0; + } + } + if ( !bs->count ) + { + Debug( 9, "Creating new blob %d", i ); + *pdiff = i; + alarm_blob_pixels++; + bs->tag = i; + bs->count++; + bs->lo_x = bs->hi_x = x; + bs->lo_y = bs->hi_y = y; + alarm_blobs++; + + Debug( 6, "Created blob %d at %d,%d, %d current blobs", bs->tag, x, y, alarm_blobs ); + break; + } + } + if ( i == 0 ) + { + Warning( "Max blob count reached. Unable to allocate new blobs so terminating. Zone settings may be too sensitive." ); + x = hi_x+1; + y = hi_y+1; + } + } + } + } + } + } + if ( config.record_diag_images ) + { + static char diag_path[PATH_MAX] = ""; + if ( !diag_path[0] ) + { + snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-%d-%d.jpg", config.dir_events, monitor->Id(), id, 3 ); + } + diff_image->WriteJpeg( diag_path ); + } + + if ( !alarm_blobs ) + { + return( false ); + } + + Debug( 5, "Got %d raw blob pixels, %d raw blobs, need %d -> %d, %d -> %d", alarm_blob_pixels, alarm_blobs, min_blob_pixels, max_blob_pixels, min_blobs, max_blobs ); + + // Now eliminate blobs under the threshold + for ( int i = 1; i < WHITE; i++ ) + { + BlobStats *bs = &blob_stats[i]; + if ( bs->count ) + { + if ( (min_blob_pixels && bs->count < min_blob_pixels) || (max_blob_pixels && bs->count > max_blob_pixels) ) + { + if ( config.create_analysis_images || config.record_diag_images ) + { + for ( int sy = bs->lo_y; sy <= bs->hi_y; sy++ ) + { + spdiff = diff_buff + ((diff_width * sy) + bs->lo_x); + for ( int sx = bs->lo_x; sx <= bs->hi_x; sx++, spdiff++ ) + { + if ( *spdiff == bs->tag ) + { + *spdiff = BLACK; + } + } + } + } + alarm_blobs--; + alarm_blob_pixels -= bs->count; + + Debug( 6, "Eliminated blob %d, %d pixels (%d,%d - %d,%d), %d current blobs", i, bs->count, bs->lo_x, bs->lo_y, bs->hi_x, bs->hi_y, alarm_blobs ); + + bs->tag = 0; + bs->count = 0; + bs->lo_x = 0; + bs->lo_y = 0; + bs->hi_x = 0; + bs->hi_y = 0; + } + else + { + Debug( 6, "Preserved blob %d, %d pixels (%d,%d - %d,%d), %d current blobs", i, bs->count, bs->lo_x, bs->lo_y, bs->hi_x, bs->hi_y, alarm_blobs ); + if ( !min_blob_size || bs->count < min_blob_size ) min_blob_size = bs->count; + if ( !max_blob_size || bs->count > max_blob_size ) max_blob_size = bs->count; + } + } + } + if ( config.record_diag_images ) + { + static char diag_path[PATH_MAX] = ""; + if ( !diag_path[0] ) + { + snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-%d-%d.jpg", config.dir_events, monitor->Id(), id, 4 ); + } + diff_image->WriteJpeg( diag_path ); + } + Debug( 5, "Got %d blob pixels, %d blobs, need %d -> %d, %d -> %d", alarm_blob_pixels, alarm_blobs, min_blob_pixels, max_blob_pixels, min_blobs, max_blobs ); + + if( alarm_blobs ) { + if( min_blobs && (alarm_blobs < min_blobs) ) { + /* Not enough pixels alarmed */ + return (false); + } else if(max_blobs && (alarm_blobs > max_blobs) ) { + /* Too many pixels alarmed */ + overload_count = overload_frames; + return (false); + } + } else { + /* No blobs */ + return (false); + } + + score = (100*alarm_blob_pixels)/(polygon.Area()); + if(score < 1) + score = 1; /* Fix for score of 0 when frame meets thresholds but alarmed area is not big enough */ + Debug( 5, "Current score is %d", score ); + + alarm_lo_x = polygon.HiX()+1; + alarm_hi_x = polygon.LoX()-1; + alarm_lo_y = polygon.HiY()+1; + alarm_hi_y = polygon.LoY()-1; + for ( int i = 1; i < WHITE; i++ ) + { + BlobStats *bs = &blob_stats[i]; + if ( bs->count ) + { + if ( bs->count == max_blob_size ) + { + if ( config.weighted_alarm_centres ) + { + unsigned long x_total = 0; + unsigned long y_total = 0; + + for ( int sy = bs->lo_y; sy <= bs->hi_y; sy++ ) + { + spdiff = diff_buff + ((diff_width * sy) + bs->lo_x); + for ( int sx = bs->lo_x; sx <= bs->hi_x; sx++, spdiff++ ) + { + if ( *spdiff == bs->tag ) + { + x_total += sx; + y_total += sy; + } + } + } + alarm_mid_x = int(round(x_total/bs->count)); + alarm_mid_y = int(round(y_total/bs->count)); + } + else + { + alarm_mid_x = int((bs->hi_x+bs->lo_x+1)/2); + alarm_mid_y = int((bs->hi_y+bs->lo_y+1)/2); + } + } + + if ( alarm_lo_x > bs->lo_x ) alarm_lo_x = bs->lo_x; + if ( alarm_lo_y > bs->lo_y ) alarm_lo_y = bs->lo_y; + if ( alarm_hi_x < bs->hi_x ) alarm_hi_x = bs->hi_x; + if ( alarm_hi_y < bs->hi_y ) alarm_hi_y = bs->hi_y; + } + } + } + else + { + alarm_mid_x = int((alarm_hi_x+alarm_lo_x+1)/2); + alarm_mid_y = int((alarm_hi_y+alarm_lo_y+1)/2); + } + } + + if ( type == INCLUSIVE ) + { + // score >>= 1; + score /= 2; + } + else if ( type == EXCLUSIVE ) + { + // score <<= 1; + score *= 2; + + } + + Debug( 5, "Adjusted score is %d", score ); + + // Now outline the changed region + if ( score ) + { + alarm = true; + + alarm_box = Box( Coord( alarm_lo_x, alarm_lo_y ), Coord( alarm_hi_x, alarm_hi_y ) ); + + //if ( monitor->followMotion() ) + if ( true ) + { + alarm_centre = Coord( alarm_mid_x, alarm_mid_y ); + } + else + { + alarm_centre = alarm_box.Centre(); + } + + if ( (type < PRECLUSIVE) && check_method >= BLOBS && config.create_analysis_images ) + { + + // First mask out anything we don't want + for ( int y = lo_y; y <= hi_y; y++ ) + { + pdiff = diff_buff + ((diff_width * y) + lo_x); + + int lo_x2 = ranges[y].lo_x; + int hi_x2 = ranges[y].hi_x; + + int lo_gap = lo_x2-lo_x; + if ( lo_gap > 0 ) + { + if ( lo_gap == 1 ) + { + *pdiff++ = BLACK; + } + else + { + memset( pdiff, BLACK, lo_gap ); + pdiff += lo_gap; + } + } + + ppoly = pg_image->Buffer( lo_x2, y ); + for ( int x = lo_x2; x <= hi_x2; x++, pdiff++, ppoly++ ) + { + if ( !*ppoly ) + { + *pdiff = BLACK; + } + } + + int hi_gap = hi_x-hi_x2; + if ( hi_gap > 0 ) + { + if ( hi_gap == 1 ) + { + *pdiff = BLACK; + } + else + { + memset( pdiff, BLACK, hi_gap ); + } + } + } + + if( monitor->Colours() == ZM_COLOUR_GRAY8 ) { + image = diff_image->HighlightEdges( alarm_rgb, ZM_COLOUR_RGB24, ZM_SUBPIX_ORDER_RGB, &polygon.Extent() ); + } else { + image = diff_image->HighlightEdges( alarm_rgb, monitor->Colours(), monitor->SubpixelOrder(), &polygon.Extent() ); + } + + // Only need to delete this when 'image' becomes detached and points somewhere else + delete diff_image; + } + else + { + delete image; + image = 0; + } + + Debug( 1, "%s: Pixel Diff: %d, Alarm Pixels: %d, Filter Pixels: %d, Blob Pixels: %d, Blobs: %d, Score: %d", Label(), pixel_diff, alarm_pixels, alarm_filter_pixels, alarm_blob_pixels, alarm_blobs, score ); + } + return( true ); +} + +bool Zone::ParsePolygonString( const char *poly_string, Polygon &polygon ) +{ + Debug( 3, "Parsing polygon string '%s'", poly_string ); + + char *str_ptr = new char[strlen(poly_string)+1]; + char *str = str_ptr; + strcpy( str, poly_string ); + + char *ws; + int n_coords = 0; + int max_n_coords = strlen(str)/4; + Coord *coords = new Coord[max_n_coords]; + while( true ) + { + if ( *str == '\0' ) + { + break; + } + ws = strchr( str, ' ' ); + if ( ws ) + { + *ws = '\0'; + } + char *cp = strchr( str, ',' ); + if ( !cp ) + { + Error( "Bogus coordinate %s found in polygon string", str ); + delete[] coords; + delete[] str_ptr; + return( false ); + } + else + { + *cp = '\0'; + char *xp = str; + char *yp = cp+1; + + int x = atoi(xp); + int y = atoi(yp); + + Debug( 3, "Got coordinate %d,%d from polygon string", x, y ); +#if 0 + if ( x < 0 ) + x = 0; + else if ( x >= width ) + x = width-1; + if ( y < 0 ) + y = 0; + else if ( y >= height ) + y = height-1; +#endif + coords[n_coords++] = Coord( x, y ); + } + if ( ws ) + str = ws+1; + else + break; + } + polygon = Polygon( n_coords, coords ); + + Debug( 3, "Successfully parsed polygon string" ); + //printf( "Area: %d\n", pg.Area() ); + //printf( "Centre: %d,%d\n", pg.Centre().X(), pg.Centre().Y() ); + + delete[] coords; + delete[] str_ptr; + + return( true ); +} + +bool Zone::ParseZoneString( const char *zone_string, int &zone_id, int &colour, Polygon &polygon ) +{ + Debug( 3, "Parsing zone string '%s'", zone_string ); + + char *str_ptr = new char[strlen(zone_string)+1]; + char *str = str_ptr; + strcpy( str, zone_string ); + + char *ws = strchr( str, ' ' ); + if ( !ws ) + { + Debug( 3, "No initial whitespace found in zone string '%s', finishing", str ); + } + zone_id = strtol( str, 0, 10 ); + Debug( 3, "Got zone %d from zone string", zone_id ); + if ( !ws ) + { + delete str_ptr; + return( true ); + } + + *ws = '\0'; + str = ws+1; + + ws = strchr( str, ' ' ); + if ( !ws ) + { + Debug( 3, "No secondary whitespace found in zone string '%s', finishing", zone_string ); + } + colour = strtol( str, 0, 16 ); + Debug( 3, "Got colour %06x from zone string", colour ); + if ( !ws ) + { + delete str_ptr; + return( true ); + } + *ws = '\0'; + str = ws+1; + + bool result = ParsePolygonString( str, polygon ); + + //printf( "Area: %d\n", pg.Area() ); + //printf( "Centre: %d,%d\n", pg.Centre().X(), pg.Centre().Y() ); + + delete[] str_ptr; + + return( result ); +} + +int Zone::Load( Monitor *monitor, Zone **&zones ) +{ + static char sql[ZM_SQL_MED_BUFSIZ]; + snprintf( sql, sizeof(sql), "select Id,Name,Type+0,Units,NumCoords,Coords,AlarmRGB,CheckMethod+0,MinPixelThreshold,MaxPixelThreshold,MinAlarmPixels,MaxAlarmPixels,FilterX,FilterY,MinFilterPixels,MaxFilterPixels,MinBlobPixels,MaxBlobPixels,MinBlobs,MaxBlobs,OverloadFrames from Zones where MonitorId = %d order by Type, Id", monitor->Id() ); + if ( mysql_query( &dbconn, sql ) ) + { + Error( "Can't run query: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + + MYSQL_RES *result = mysql_store_result( &dbconn ); + if ( !result ) + { + Error( "Can't use query result: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + int n_zones = mysql_num_rows( result ); + Debug( 1, "Got %d zones for monitor %s", n_zones, monitor->Name() ); + delete[] zones; + zones = new Zone *[n_zones]; + for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ ) + { + int col = 0; + + int Id = atoi(dbrow[col++]); + const char *Name = dbrow[col++]; + int Type = atoi(dbrow[col++]); + const char *Units = dbrow[col++]; + /* int NumCoords = */ atoi(dbrow[col++]); + const char *Coords = dbrow[col++]; + int AlarmRGB = dbrow[col]?atoi(dbrow[col]):0; col++; + int CheckMethod = atoi(dbrow[col++]); + int MinPixelThreshold = dbrow[col]?atoi(dbrow[col]):0; col++; + int MaxPixelThreshold = dbrow[col]?atoi(dbrow[col]):0; col++; + int MinAlarmPixels = dbrow[col]?atoi(dbrow[col]):0; col++; + int MaxAlarmPixels = dbrow[col]?atoi(dbrow[col]):0; col++; + int FilterX = dbrow[col]?atoi(dbrow[col]):0; col++; + int FilterY = dbrow[col]?atoi(dbrow[col]):0; col++; + int MinFilterPixels = dbrow[col]?atoi(dbrow[col]):0; col++; + int MaxFilterPixels = dbrow[col]?atoi(dbrow[col]):0; col++; + int MinBlobPixels = dbrow[col]?atoi(dbrow[col]):0; col++; + int MaxBlobPixels = dbrow[col]?atoi(dbrow[col]):0; col++; + int MinBlobs = dbrow[col]?atoi(dbrow[col]):0; col++; + int MaxBlobs = dbrow[col]?atoi(dbrow[col]):0; col++; + int OverloadFrames = dbrow[col]?atoi(dbrow[col]):0; col++; + + /* HTML colour code is actually BGR in memory, we want RGB */ + AlarmRGB = rgb_convert(AlarmRGB, ZM_SUBPIX_ORDER_BGR); + + Debug( 5, "Parsing polygon %s", Coords ); + Polygon polygon; + if ( !ParsePolygonString( Coords, polygon ) ) + Panic( "Unable to parse polygon string '%s' for zone %d/%s for monitor %s", Coords, Id, Name, monitor->Name() ); + + if ( polygon.LoX() < 0 || polygon.HiX() >= monitor->Width() || polygon.LoY() < 0 || polygon.HiY() >= monitor->Height() ) + Panic( "Zone %d/%s for monitor %s extends outside of image dimensions, %d, %d, %d, %d", Id, Name, monitor->Name(), polygon.LoX(), polygon.LoY(), polygon.HiX(), polygon.HiY() ); + + if ( false && !strcmp( Units, "Percent" ) ) + { + MinAlarmPixels = (MinAlarmPixels*polygon.Area())/100; + MaxAlarmPixels = (MaxAlarmPixels*polygon.Area())/100; + MinFilterPixels = (MinFilterPixels*polygon.Area())/100; + MaxFilterPixels = (MaxFilterPixels*polygon.Area())/100; + MinBlobPixels = (MinBlobPixels*polygon.Area())/100; + MaxBlobPixels = (MaxBlobPixels*polygon.Area())/100; + } + + if ( atoi(dbrow[2]) == Zone::INACTIVE ) + { + zones[i] = new Zone( monitor, Id, Name, polygon ); + } + else + { + zones[i] = new Zone( monitor, Id, Name, (Zone::ZoneType)Type, polygon, AlarmRGB, (Zone::CheckMethod)CheckMethod, MinPixelThreshold, MaxPixelThreshold, MinAlarmPixels, MaxAlarmPixels, Coord( FilterX, FilterY ), MinFilterPixels, MaxFilterPixels, MinBlobPixels, MaxBlobPixels, MinBlobs, MaxBlobs, OverloadFrames ); + } + } + if ( mysql_errno( &dbconn ) ) + { + Error( "Can't fetch row: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + // Yadda yadda + mysql_free_result( result ); + return( n_zones ); +} + +bool Zone::DumpSettings( char *output, bool /*verbose*/ ) +{ + output[0] = 0; + + sprintf( output+strlen(output), " Id : %d\n", id ); + sprintf( output+strlen(output), " Label : %s\n", label ); + sprintf( output+strlen(output), " Type: %d - %s\n", type, + type==ACTIVE?"Active":( + type==INCLUSIVE?"Inclusive":( + type==EXCLUSIVE?"Exclusive":( + type==PRECLUSIVE?"Preclusive":( + type==INACTIVE?"Inactive":"Unknown" + ))))); + sprintf( output+strlen(output), " Shape : %d points\n", polygon.getNumCoords() ); + for ( int i = 0; i < polygon.getNumCoords(); i++ ) + { + sprintf( output+strlen(output), " %i: %d,%d\n", i, polygon.getCoord( i ).X(), polygon.getCoord( i ).Y() ); + } + sprintf( output+strlen(output), " Alarm RGB : %06x\n", alarm_rgb ); + sprintf( output+strlen(output), " Check Method: %d - %s\n", check_method, + check_method==ALARMED_PIXELS?"Alarmed Pixels":( + check_method==FILTERED_PIXELS?"FilteredPixels":( + check_method==BLOBS?"Blobs":"Unknown" + ))); + sprintf( output+strlen(output), " Min Pixel Threshold : %d\n", min_pixel_threshold ); + sprintf( output+strlen(output), " Max Pixel Threshold : %d\n", max_pixel_threshold ); + sprintf( output+strlen(output), " Min Alarm Pixels : %d\n", min_alarm_pixels ); + sprintf( output+strlen(output), " Max Alarm Pixels : %d\n", max_alarm_pixels ); + sprintf( output+strlen(output), " Filter Box : %d,%d\n", filter_box.X(), filter_box.Y() ); + sprintf( output+strlen(output), " Min Filter Pixels : %d\n", min_filter_pixels ); + sprintf( output+strlen(output), " Max Filter Pixels : %d\n", max_filter_pixels ); + sprintf( output+strlen(output), " Min Blob Pixels : %d\n", min_blob_pixels ); + sprintf( output+strlen(output), " Max Blob Pixels : %d\n", max_blob_pixels ); + sprintf( output+strlen(output), " Min Blobs : %d\n", min_blobs ); + sprintf( output+strlen(output), " Max Blobs : %d\n", max_blobs ); + return( true ); +} + +void Zone::std_alarmedpixels(Image* pdiff_image, const Image* ppoly_image, unsigned int* pixel_count, unsigned int* pixel_sum) { + uint32_t pixelsalarmed = 0; + uint32_t pixelsdifference = 0; + uint8_t *pdiff; + const uint8_t *ppoly; + uint8_t calc_max_pixel_threshold = 255; + unsigned int lo_y; + unsigned int hi_y; + unsigned int lo_x; + unsigned int hi_x; + + if(max_pixel_threshold) + calc_max_pixel_threshold = max_pixel_threshold; + + lo_y = polygon.LoY(); + hi_y = polygon.HiY(); + for ( int y = lo_y; y <= hi_y; y++ ) + { + lo_x = ranges[y].lo_x; + hi_x = ranges[y].hi_x; + + Debug( 7, "Checking line %d from %d -> %d", y, lo_x, hi_x ); + pdiff = (uint8_t*)pdiff_image->Buffer( lo_x, y ); + ppoly = ppoly_image->Buffer( lo_x, y ); + + for ( int x = lo_x; x <= hi_x; x++, pdiff++, ppoly++ ) + { + if ( *ppoly && (*pdiff > min_pixel_threshold) && (*pdiff <= calc_max_pixel_threshold) ) + { + pixelsalarmed++; + pixelsdifference += *pdiff; + *pdiff = WHITE; + } + else + { + *pdiff = BLACK; + } + } + } + + /* Store the results */ + *pixel_count = pixelsalarmed; + *pixel_sum = pixelsdifference; +} diff --git a/src/zm_zone.h b/src/zm_zone.h index 6aa45e13d..3eb8d7815 100644 --- a/src/zm_zone.h +++ b/src/zm_zone.h @@ -148,6 +148,17 @@ public: static bool ParsePolygonString( const char *polygon_string, Polygon &polygon ); static bool ParseZoneString( const char *zone_string, int &zone_id, int &colour, Polygon &polygon ); static int Load( Monitor *monitor, Zone **&zones ); + //================================================= + bool CheckOverloadCount(); + int GetOverloadCount(); + void SetOverloadCount(int nOverCount); + int GetOverloadFrames(); + void SetScore(unsigned int nScore); + void SetAlarmImage(const Image* srcImage); + + inline const Image *getPgImage() const { return( pg_image ); } + inline const Range *getRanges() const { return( ranges ); } + }; #endif // ZM_ZONE_H diff --git a/src/zm_zone.h.orig b/src/zm_zone.h.orig new file mode 100644 index 000000000..6aa45e13d --- /dev/null +++ b/src/zm_zone.h.orig @@ -0,0 +1,153 @@ +// +// ZoneMinder Zone Class Interfaces, $Date$, $Revision$ +// Copyright (C) 2001-2008 Philip Coombes +// +// 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. +// + +#ifndef ZM_ZONE_H +#define ZM_ZONE_H + +#include "zm_rgb.h" +#include "zm_coord.h" +#include "zm_poly.h" +#include "zm_image.h" +#include "zm_event.h" + +class Monitor; + +// +// This describes a 'zone', or an area of an image that has certain +// detection characteristics. +// +class Zone +{ +protected: + struct Range + { + int lo_x; + int hi_x; + int off_x; + }; + +public: + typedef enum { ACTIVE=1, INCLUSIVE, EXCLUSIVE, PRECLUSIVE, INACTIVE } ZoneType; + typedef enum { ALARMED_PIXELS=1, FILTERED_PIXELS, BLOBS } CheckMethod; + +protected: + // Inputs + Monitor *monitor; + + int id; + char *label; + ZoneType type; + Polygon polygon; + Rgb alarm_rgb; + CheckMethod check_method; + + int min_pixel_threshold; + int max_pixel_threshold; + + int min_alarm_pixels; + int max_alarm_pixels; + + Coord filter_box; + int min_filter_pixels; + int max_filter_pixels; + + int min_blob_pixels; + int max_blob_pixels; + int min_blobs; + int max_blobs; + + int overload_frames; + + // Outputs/Statistics + bool alarmed; + int pixel_diff; + unsigned int alarm_pixels; + int alarm_filter_pixels; + int alarm_blob_pixels; + int alarm_blobs; + int min_blob_size; + int max_blob_size; + Box alarm_box; + Coord alarm_centre; + unsigned int score; + Image *pg_image; + Range *ranges; + Image *image; + + int overload_count; + +protected: + void Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold, int p_max_pixel_threshold, int p_min_alarm_pixels, int p_max_alarm_pixels, const Coord &p_filter_box, int p_min_filter_pixels, int p_max_filter_pixels, int p_min_blob_pixels, int p_max_blob_pixels, int p_min_blobs, int p_max_blobs, int p_overload_frames ); + void std_alarmedpixels(Image* pdiff_image, const Image* ppoly_image, unsigned int* pixel_count, unsigned int* pixel_sum); + +public: + Zone( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold=15, int p_max_pixel_threshold=0, int p_min_alarm_pixels=50, int p_max_alarm_pixels=75000, const Coord &p_filter_box=Coord( 3, 3 ), int p_min_filter_pixels=50, int p_max_filter_pixels=50000, int p_min_blob_pixels=10, int p_max_blob_pixels=0, int p_min_blobs=0, int p_max_blobs=0, int p_overload_frames=0 ) + { + Setup( p_monitor, p_id, p_label, p_type, p_polygon, p_alarm_rgb, p_check_method, p_min_pixel_threshold, p_max_pixel_threshold, p_min_alarm_pixels, p_max_alarm_pixels, p_filter_box, p_min_filter_pixels, p_max_filter_pixels, p_min_blob_pixels, p_max_blob_pixels, p_min_blobs, p_max_blobs, p_overload_frames ); + } + Zone( Monitor *p_monitor, int p_id, const char *p_label, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold=15, int p_max_pixel_threshold=0, int p_min_alarm_pixels=50, int p_max_alarm_pixels=75000, const Coord &p_filter_box=Coord( 3, 3 ), int p_min_filter_pixels=50, int p_max_filter_pixels=50000, int p_min_blob_pixels=10, int p_max_blob_pixels=0, int p_min_blobs=0, int p_max_blobs=0, int p_overload_frames=0 ) + { + Setup( p_monitor, p_id, p_label, Zone::ACTIVE, p_polygon, p_alarm_rgb, p_check_method, p_min_pixel_threshold, p_max_pixel_threshold, p_min_alarm_pixels, p_max_alarm_pixels, p_filter_box, p_min_filter_pixels, p_max_filter_pixels, p_min_blob_pixels, p_max_blob_pixels, p_min_blobs, p_max_blobs, p_overload_frames ); + } + Zone( Monitor *p_monitor, int p_id, const char *p_label, const Polygon &p_polygon ) + { + Setup( p_monitor, p_id, p_label, Zone::INACTIVE, p_polygon, RGB_BLACK, (Zone::CheckMethod)0, 0, 0, 0, 0, Coord( 0, 0 ), 0, 0, 0, 0, 0, 0, 0 ); + } + +public: + ~Zone(); + + inline int Id() const { return( id ); } + inline const char *Label() const { return( label ); } + inline ZoneType Type() const { return( type ); } + inline bool IsActive() const { return( type == ACTIVE ); } + inline bool IsInclusive() const { return( type == INCLUSIVE ); } + inline bool IsExclusive() const { return( type == EXCLUSIVE ); } + inline bool IsPreclusive() const { return( type == PRECLUSIVE ); } + inline bool IsInactive() const { return( type == INACTIVE ); } + inline const Image *AlarmImage() const { return( image ); } + inline const Polygon &GetPolygon() const { return( polygon ); } + inline bool Alarmed() const { return( alarmed ); } + inline void SetAlarm() { alarmed = true; } + inline void ClearAlarm() { alarmed = false; } + inline Coord GetAlarmCentre() const { return( alarm_centre ); } + inline unsigned int Score() const { return( score ); } + + inline void ResetStats() + { + alarmed = false; + pixel_diff = 0; + alarm_pixels = 0; + alarm_filter_pixels = 0; + alarm_blob_pixels = 0; + alarm_blobs = 0; + min_blob_size = 0; + max_blob_size = 0; + score = 0; + } + void RecordStats( const Event *event ); + bool CheckAlarms( const Image *delta_image ); + bool DumpSettings( char *output, bool verbose ); + + static bool ParsePolygonString( const char *polygon_string, Polygon &polygon ); + static bool ParseZoneString( const char *zone_string, int &zone_id, int &colour, Polygon &polygon ); + static int Load( Monitor *monitor, Zone **&zones ); +}; + +#endif // ZM_ZONE_H diff --git a/stamp-h1 b/stamp-h1 new file mode 100644 index 000000000..4547fe1b5 --- /dev/null +++ b/stamp-h1 @@ -0,0 +1 @@ +timestamp for config.h diff --git a/umutils/nextimeconfigure.zm b/umutils/nextimeconfigure.zm new file mode 100755 index 000000000..e2c0e2f32 --- /dev/null +++ b/umutils/nextimeconfigure.zm @@ -0,0 +1,16 @@ +#!/bin/bash + +#http://tom.webarts.ca/Blog/new-blog-items/buildingzoneminderandrequiredffmpegandx264fromsource + +export LD_LIBRARY_PATH="/usr/local/lib:/opt/libjpeg-turbo/lib:$LD_LIBRARY_PATH" +export LDFLAGS=" -L/home/nextime/zm/libjpeg-turbo-1.2.1/.libs " + + +DEB_HOST_GNU_TYPE=$(dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE=$(dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +CXXFLAGS=" -DZM_FFMPEG_CVS -DHAVE_LIBCRYPTO -msse2 -DJPEG_INCLUDE_DIR=/home/nextime/zm/libjpeg-turbo-1.2.1/ " +CXXFLAGS="$CXXFLAGS -I/home/nextime/zm/libjpeg-turbo-1.2.1/ " + +CXXFLAGS="$CXXFLAGS" ./configure --with-libarch=lib/$DEB_HOST_GNU_TYPE --disable-debug --host=$DEB_HOST_GNU_TYPE --build=$DEB_BUILD_GNU_TYPE --sysconfdir=/etc/zm --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-mysql=/usr --with-webdir=/usr/share/zoneminder --with-ffmpeg=/usr --with-cgidir=/usr/lib/cgi-bin --with-webuser=www-data --with-webgroup=www-data --enable-crashtrace=no --enable-mmap=yes + diff --git a/web/includes/actions.php b/web/includes/actions.php index 3204ef4a7..1892464a7 100644 --- a/web/includes/actions.php +++ b/web/includes/actions.php @@ -358,6 +358,32 @@ if ( !empty($action) ) } $view = 'none'; } + elseif ( $action == "plugin" && isset($_REQUEST['pl'])) + { + $plugin=dbEscape($_REQUEST['pl']); + $zid=validInt($_REQUEST['zid']); + $sql="SELECT * FROM PluginsConfig WHERE MonitorId='".dbEscape($mid)."' AND ZoneId='".$zid."' AND pluginName='".$plugin."'"; + $pconfs=dbFetchAll( $sql ); + $changes=0; + foreach( $pconfs as $pconf ) + { + $value=$_REQUEST['pluginOpt'][$pconf['Name']]; + if(array_key_exists($pconf['Name'], $_REQUEST['pluginOpt']) && ($pconf['Value']!=$value)) + { + dbQuery("UPDATE PluginsConfig SET Value='".dbEscape($value)."' WHERE id='".$pconf['Id']."'"); + $changes++; + } + } + if($changes>0) + { + if ( daemonCheck() ) + { + zmaControl( $mid, "restart" ); + } + $refreshParent = true; + } + $view = 'none'; + } elseif ( $action == "sequence" && isset($_REQUEST['smid']) ) { $smid = validInt($_REQUEST['smid']); @@ -423,7 +449,8 @@ if ( !empty($action) ) 'Triggers' => 'set', 'Controllable' => 'toggle', 'TrackMotion' => 'toggle', - 'Enabled' => 'toggle' + 'Enabled' => 'toggle', + 'DoNativeMotDet' => 'toggle' ); $columns = getTableColumns( 'Monitors' ); diff --git a/web/includes/config.php b/web/includes/config.php new file mode 100644 index 000000000..6f1082473 --- /dev/null +++ b/web/includes/config.php @@ -0,0 +1,173 @@ + 0 ) +{ + if ( php_sapi_name() == 'cli' && empty($_SERVER['REMOTE_ADDR']) ) + print( "Warning, overriding installed $localConfigFile file with local copy\n" ); + else + error_log( "Warning, overriding installed $localConfigFile file with local copy" ); + $configFile = $localConfigFile; +} + +$cfg = fopen( $configFile, "r") or die("Could not open config file."); +while ( !feof($cfg) ) +{ + $str = fgets( $cfg, 256 ); + if ( preg_match( '/^\s*$/', $str )) + continue; + elseif ( preg_match( '/^\s*#/', $str )) + continue; + elseif ( preg_match( '/^\s*([^=\s]+)\s*=\s*(.+?)\s*$/', $str, $matches )) + define( $matches[1], $matches[2] ); +} +fclose( $cfg ); + +// +// This section is options normally derived from other options or configuration +// +define( "ZMU_PATH", ZM_PATH_BIN."/zmu" ); // Local path to the ZoneMinder Utility + +// +// If setup supports Video 4 Linux v2 and/or v1 +// +define( "ZM_HAS_V4L2", "1" ); // V4L2 support enabled +define( "ZM_HAS_V4L1", "0" ); // V4L1 support enabled +define( "ZM_HAS_V4L", "1" ); // V4L support enabled + +// +// If PCRE dev libraries are installed +// +define( "ZM_PCRE", "1" ); // PCRE support enabled + +// +// Alarm states +// +define( "STATE_IDLE", 0 ); +define( "STATE_PREALARM", 1 ); +define( "STATE_ALARM", 2 ); +define( "STATE_ALERT", 3 ); +define( "STATE_TAPE", 4 ); + +// +// DVR Control Commands +// + +define( "MSG_CMD", 1 ); +define( "MSG_DATA_WATCH", 2 ); +define( "MSG_DATA_EVENT", 3 ); + +define( "CMD_NONE", 0 ); +define( "CMD_PAUSE", 1 ); +define( "CMD_PLAY", 2 ); +define( "CMD_STOP", 3 ); +define( "CMD_FASTFWD", 4 ); +define( "CMD_SLOWFWD", 5 ); +define( "CMD_SLOWREV", 6 ); +define( "CMD_FASTREV", 7 ); +define( "CMD_ZOOMIN", 8 ); +define( "CMD_ZOOMOUT", 9 ); +define( "CMD_PAN", 10 ); +define( "CMD_SCALE", 11 ); +define( "CMD_PREV", 12 ); +define( "CMD_NEXT", 13 ); +define( "CMD_SEEK", 14 ); +define( "CMD_VARPLAY", 15 ); +define( "CMD_QUERY", 99 ); + +// +// These are miscellaneous options you won't normally need to change +// +define( "MAX_EVENTS", 10 ); // The maximum number of events to show in the monitor event listing +define( "RATE_BASE", 100 ); // The additional scaling factor used to help get fractional rates in integer format +define( "SCALE_BASE", 100 ); // The additional scaling factor used to help get fractional scales in integer format + +// +// Date and time formats, eventually some of these may end up in the language files +// +define( "DATE_FMT_CONSOLE_LONG", "D jS M, g:ia" ); // This is the main console date/time, date() or strftime() format +define( "DATE_FMT_CONSOLE_SHORT", "%H:%M" ); // This is the xHTML console date/time, date() or strftime() format + +define( "STRF_FMT_DATETIME_DB", "%Y-%m-%d %H:%M:%S" ); // Strftime format for database queries, don't change + +define( "STRF_FMT_DATETIME", "%c" ); // Strftime locale aware format for dates with times +define( "STRF_FMT_DATE", "%x" ); // Strftime locale aware format for dates without times +define( "STRF_FMT_TIME", "%X" ); // Strftime locale aware format for times without dates + +define( "STRF_FMT_DATETIME_SHORT", "%y/%m/%d %H:%M:%S" ); // Strftime shorter format for dates with time, not locale aware +define( "STRF_FMT_DATETIME_SHORTER", "%m/%d %H:%M:%S" ); // Strftime shorter format for dates with time, not locale aware, used where space is tight + +define( "MYSQL_FMT_DATETIME_SHORT", "%y/%m/%d %H:%i:%S" ); // MySQL date_format shorter format for dates with time + +require_once( 'database.php' ); +loadConfig(); + +$GLOBALS['defaultUser'] = array( + "Username" => "admin", + "Password" => "", + "Language" => "", + "Enabled" => 1, + "Stream" => 'View', + "Events" => 'Edit', + "Control" => 'Edit', + "Monitors" => 'Edit', + "Devices" => 'Edit', + "System" => 'Edit', + "MaxBandwidth" => "", + "MonitorIds" => false +); + +function loadConfig( $defineConsts=true ) +{ + global $config; + global $configCats; + + $config = array(); + $configCat = array(); + + $sql = "select * from Config order by Id asc"; + $result = mysql_query( $sql ); + if ( !$result ) + echo mysql_error(); + $monitors = array(); + while( $row = mysql_fetch_assoc( $result ) ) + { + if ( $defineConsts ) + define( $row['Name'], $row['Value'] ); + $config[$row['Name']] = $row; + if ( !($configCat = &$configCats[$row['Category']]) ) + { + $configCats[$row['Category']] = array(); + $configCat = &$configCats[$row['Category']]; + } + $configCat[$row['Name']] = $row; + } + //print_r( $config ); + //print_r( $configCats ); +} + +?> diff --git a/web/lang/big5_big5.php b/web/lang/big5_big5.php index 7f9e18da7..523335c27 100644 --- a/web/lang/big5_big5.php +++ b/web/lang/big5_big5.php @@ -268,6 +268,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => '下載', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => '歷時', @@ -531,6 +532,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => '全部播放', 'PleaseWait' => 'Please Wait', + 'Plugins' => 'Plugins', 'Point' => '點', 'PostEventImageBuffer' => '後置事件影åƒç·©è¡', 'PreEventImageBuffer' => 'å‰ç½®äº‹ä»¶å½±åƒç·©è¡', @@ -656,6 +658,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'No update is necessary.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Use Filter', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Use ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/big5_big5.php.orig b/web/lang/big5_big5.php.orig new file mode 100644 index 000000000..7f9e18da7 --- /dev/null +++ b/web/lang/big5_big5.php.orig @@ -0,0 +1,850 @@ + Translation by + +// Notes for Translators +// 0. Get some credit, put your name in the line above (optional) +// 1. When composing the language tokens in your language you should try and keep to roughly the +// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places. +// 2. There are four types of string replacement +// a) Simple replacements are words or short phrases that are static and used directly. This type of +// replacement can be used 'as is'. +// b) Complex replacements involve some dynamic element being included and so may require substitution +// or changing into a different order. The token listed in this file will be passed through sprintf as +// a formatting string. If the dynamic element is a number you will usually need to use a variable +// replacement also as described below. +// c) Variable replacements are used in conjunction with complex replacements and involve the generation +// of a singular or plural noun depending on the number passed into the zmVlang function. See the +// the zmVlang section below for a further description of this. +// d) Optional strings which can be used to replace the prompts and/or help text for the Options section +// of the web interface. These are not listed below as they are quite large and held in the database +// so that they can also be used by the zmconfig.pl script. However you can build up your own list +// quite easily from the Config table in the database if necessary. +// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore +// you can safely assume that a single word token will only be used in that context. +// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a +// maintenance point of view to include the original language file and override the old definitions rather +// than copy all the language tokens across. To do this change the line below to whatever your base language +// is and uncomment it. +//require_once( 'zm_lang_en_gb.php' ); + +// You may need to change the character set here, if your web server does not already +// do this by default, uncomment this if required. +// +// Example +//header( "Content-Type: text/html; charset=Big5" ); + +// You may need to change your locale here if your default one is incorrect for the +// language described in this file, or if you have multiple languages supported. +// If you do need to change your locale, be aware that the format of this function +// is subtlely different in versions of PHP before and after 4.3.0, see +// http://uk2.php.net/manual/en/function.setlocale.php for details. +// Also be aware that changing the whole locale may affect some floating point or decimal +// arithmetic in the database, if this is the case change only the individual locale areas +// that don't affect this rather than all at once. See the examples below. +// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared +// threaded environment, if you get funny errors it may be this. +// +// Examples + //setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0 + //setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after +// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after +// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after +setlocale( LC_ALL, 'Big5' ); //All locale settings pre-4.3.0 +//setlocale( LC_ALL, 'Big5' ); //All locale settings 4.3.0 and after +setlocale( LC_CTYPE, 'Big5' ); //Character class settings 4.3.0 and after +setlocale( LC_TIME, 'Big5' ); //Date and time formatting 4.3.0 and after + +// Simple String Replacements +$SLANG = array( + '24BitColour' => '24 ä½å…ƒè‰²å½©', + '32BitColour' => '32 ä½å…ƒè‰²å½©', // Added - 2011-06-15 + '8BitGrey' => '8 ä½å…ƒç°éšŽ', + 'Action' => 'Action', + 'Actual' => 'Actual', + 'AddNewControl' => '新增控制', + 'AddNewMonitor' => '新增監視', + 'AddNewUser' => '新增使用者', + 'AddNewZone' => '新增監視å€', + 'Alarm' => '警報', + 'AlarmBrFrames' => '警報
框架', + 'AlarmFrame' => '警報框架', + 'AlarmFrameCount' => '警報框架數', + 'AlarmLimits' => 'Alarm Limits', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Alarm Px', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => '警告', + 'All' => '全部', + 'Apply' => '確定', + 'ApplyingStateChange' => '確定狀態改變', + 'ArchArchived' => 'Archived Only', + 'ArchUnarchived' => 'Unarchived Only', + 'Archive' => '存檔', + 'Archived' => '已存檔', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Alarm Frames', + 'AttrArchiveStatus' => 'Archive Status', + 'AttrAvgScore' => 'Average Score', + 'AttrCause' => 'Cause', + 'AttrDate' => 'Date', + 'AttrDateTime' => 'Date/Time', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Percent', + 'AttrDuration' => 'Duration', + 'AttrFrames' => 'Frames', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Max. Score', + 'AttrMonitorId' => 'Monitor Id', + 'AttrMonitorName' => 'Monitor Name', + 'AttrName' => 'Name', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Time', + 'AttrTotalScore' => 'Total Score', + 'AttrWeekday' => 'Weekday', + 'Auto' => '自動', + 'AutoStopTimeout' => '時間éŽè‡ªå‹•åœæ­¢', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'å¹³å‡
分數', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => '頻寬', + 'BlobPx' => 'Blob Px', + 'BlobSizes' => 'Blob Sizes', + 'Blobs' => 'Blobs', + 'Brightness' => '亮度', + 'Buffers' => 'ç·©è¡', + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'CanFocus' => 'Can Focus', + 'CanFocusAbs' => 'Can Focus Absolute', + 'CanFocusCon' => 'Can Focus Continuous', + 'CanFocusRel' => 'Can Focus Relative', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'Can Move', + 'CanMoveAbs' => 'Can Move Absolute', + 'CanMoveCon' => 'Can Move Continuous', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relative', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoom' => 'Can Zoom', + 'CanZoomAbs' => 'Can Zoom Absolute', + 'CanZoomCon' => 'Can Zoom Continuous', + 'CanZoomRel' => 'Can Zoom Relative', + 'Cancel' => 'å–消', + 'CancelForcedAlarm' => 'Cancel Forced Alarm', + 'CaptureHeight' => 'æ•æ‰é«˜åº¦', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'æ•æ‰æ ¼å¼', + 'CaptureWidth' => 'æ•æ‰å¯¬åº¦', + 'Cause' => 'å› ç´ ', + 'CheckMethod' => 'Alarm Check Method', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Choose Filter', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => '關閉', + 'Colour' => 'Colour', + 'Command' => 'Command', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Config', + 'ConfiguredFor' => 'é…置為', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => '確èªå¯†ç¢¼', + 'ConjAnd' => 'and', + 'ConjOr' => 'or', + 'Console' => 'æ“控å°', + 'ContactAdmin' => '請與系統管ç†è€…è¯ç¹«.', + 'Continue' => '連續', + 'Contrast' => 'Contrast', + 'Control' => 'Control', + 'ControlAddress' => 'Control Address', + 'ControlCap' => 'Control Capability', + 'ControlCaps' => 'Control Capabilities', + 'ControlDevice' => 'Control Device', + 'ControlType' => 'Control Type', + 'Controllable' => 'Controllable', + 'Cycle' => '分å€è¼ªæµæª¢è¦–', + 'CycleWatch' => '分å€è¼ªæµæª¢è¦–', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'æ—¥', + 'Debug' => 'debug', + 'DefaultRate' => 'é è¨­é€ŸçŽ‡', + 'DefaultScale' => 'é è¨­å°ºå¯¸', + 'DefaultView' => 'Default View', + 'Delete' => '刪除', + 'DeleteAndNext' => '刪除 & 下一事件', + 'DeleteAndPrev' => '刪除 & 上一事件', + 'DeleteSavedFilter' => '刪除儲存éŽæ¿¾', + 'Description' => 'æè¿°', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'è£ç½®é€šé“', + 'DeviceFormat' => 'è£ç½®æ ¼å¼', + 'DeviceNumber' => 'è£ç½®ç·¨è™Ÿ', + 'DevicePath' => 'è£ç½®è·¯å¾‘', + 'Devices' => 'Devices', + 'Dimensions' => '尺寸', + 'DisableAlarms' => 'å–消警報', + 'Disk' => 'ç£ç¢Ÿ', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => '下載', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => '歷時', + 'Edit' => '編輯', + 'Email' => 'Email', + 'EnableAlarms' => '啟動警報', + 'Enabled' => '啟用', + 'EnterNewFilterName' => 'Enter new filter name', + 'Error' => '錯誤', + 'ErrorBrackets' => 'Error, please check you have an equal number of opening and closing brackets', + 'ErrorValidValue' => 'Error, please check that all terms have a valid value', + 'Etc' => 'etc', + 'Event' => '事件', + 'EventFilter' => '事件éŽæ¿¾', + 'EventId' => '事件Id', + 'EventName' => '事件å稱', + 'EventPrefix' => '事件字首', + 'Events' => '事件', + 'Exclude' => 'ä¸åŒ…å«', + 'Execute' => 'Execute', + 'Export' => '輸出', + 'ExportDetails' => '輸出事件細項', + 'ExportFailed' => '輸出失敗', + 'ExportFormat' => '輸出檔案格å¼', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => '輸出框架細項', + 'ExportImageFiles' => '輸出圖片檔', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => '輸出其他檔(若有)', + 'ExportOptions' => '輸出é¸é …', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => '輸出影片檔(若有)', + 'Exporting' => '輸出中', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS 報告間è·', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Feed', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => '自動儲存符åˆé …ç›®', + 'FilterDeleteEvents' => '自動刪除符åˆé …ç›®', + 'FilterEmailEvents' => '自動寄出詳細符åˆé …ç›®', + 'FilterExecuteEvents' => '自動執行符åˆæŒ‡ä»¤', + 'FilterMessageEvents' => '自動發出符åˆè¨Šæ¯', + 'FilterPx' => 'Filter Px', + 'FilterUnset' => '您必需設定濾é¡çš„寬度和高度', + 'FilterUploadEvents' => '自動上傳符åˆé …ç›®', + 'FilterVideoEvents' => '自動產生符åˆçš„å½±åƒæª”', + 'Filters' => '濾é¡', + 'First' => 'First', + 'FlippedHori' => 'æ°´å¹³å轉', + 'FlippedVert' => 'åž‚ç›´å轉', + 'Focus' => 'Focus', + 'ForceAlarm' => 'Force Alarm', + 'Format' => 'æ ¼å¼', + 'Frame' => '框架', + 'FrameId' => '框架 Id', + 'FrameRate' => '框架速率', + 'FrameSkip' => '框架忽略', + 'Frames' => '框架', + 'Func' => 'Func', + 'Function' => '功能', + 'Gain' => 'Gain', + 'General' => '一般', + 'GenerateVideo' => '輸出影片', + 'GeneratingVideo' => '輸出影片中', + 'GoToZoneMinder' => 'Go to ZoneMinder.com', + 'Grey' => 'Grey', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'High' => '高', + 'HighBW' => 'High B/W', + 'Home' => 'Home', + 'Hour' => '時', + 'Hue' => 'Hue', + 'Id' => 'Id', + 'Idle' => 'Idle', + 'Ignore' => 'Ignore', + 'Image' => 'å½±åƒ', + 'ImageBufferSize' => 'å½±åƒç·©è¡å¤§å°', + 'Images' => 'Images', + 'In' => 'In', + 'Include' => '包å«', + 'Inverted' => 'å轉', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => '語言', + 'Last' => 'Last', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => '列出', + 'Load' => '載入', + 'Local' => 'Local', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => '登入å稱', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => '登入中... è«‹ç¨å¾Œ...', + 'Login' => '登入', + 'Logout' => '登出', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => '低', + 'LowBW' => 'Low B/W', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => '標註', + 'Max' => 'Max', + 'MaxBandwidth' => 'Max Bandwidth', // Added - 2009-02-08 + 'MaxBrScore' => '最高
分數', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => '最大æ¯ç§’框架數 fps', + 'Medium' => '中', + 'MediumBW' => 'Medium B/W', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Minimum blobs should be less than maximum', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'ç´°é …', + 'Monitor' => '監視', + 'MonitorIds' => 'Monitor Ids', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => '監視', + 'Montage' => '全部顯示', + 'Month' => '月', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => '移動', + 'MustBeGe' => '需大於或等於', + 'MustBeLe' => '需å°æ–¼æˆ–等於', + 'MustConfirmPassword' => '您必需確èªå¯†ç¢¼', + 'MustSupplyPassword' => '您必需æ供密碼', + 'MustSupplyUsername' => '您必需æ供使用者å稱', + 'Name' => 'å稱', + 'Near' => 'Near', + 'Network' => 'Network', + 'New' => '新增', + 'NewGroup' => '新群組', + 'NewLabel' => 'New Label', + 'NewPassword' => '新密碼', + 'NewState' => '新狀態', + 'NewUser' => '新使用者', + 'Next' => '下一步', + 'No' => 'No', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'There are no frames recorded for this event', + 'NoGroup' => 'No Group', // Added - 2009-02-08 + 'NoSavedFilters' => 'NoSavedFilters', + 'NoStatisticsRecorded' => 'There are no statistics recorded for this event/frame', + 'None' => 'ç„¡é¸å–', + 'NoneAvailable' => 'None available', + 'Normal' => 'Normal', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'equal to', + 'OpGt' => 'greater than', + 'OpGtEq' => 'greater than or equal to', + 'OpIn' => 'in set', + 'OpLt' => 'less than', + 'OpLtEq' => 'less than or equal to', + 'OpMatches' => 'matches', + 'OpNe' => 'not equal to', + 'OpNotIn' => 'not in set', + 'OpNotMatches' => 'does not match', + 'Open' => 'Open', + 'OptionHelp' => 'OptionHelp', + 'OptionRestartWarning' => 'These changes may not come into effect fully\nwhile the system is running. When you have\nfinished making your changes please ensure that\nyou restart ZoneMinder.', + 'Options' => '銓垣專用',//進階é¸é … + 'OrEnterNewName' => 'or enter new name', + 'Order' => 'é †åº', + 'Orientation' => 'æ–¹å‘', + 'Out' => 'Out', + 'OverwriteExisting' => 'Overwrite Existing', + 'Paged' => 'Paged', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'åƒæ•¸', + 'Password' => '密碼', + 'PasswordsDifferent' => 'The new and confirm passwords are different', + 'Paths' => 'Paths', + 'Pause' => 'Pause', + 'Phone' => 'Phone', + 'PhoneBW' => 'Phone B/W', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pixels', + 'Play' => 'Play', + 'PlayAll' => '全部播放', + 'PleaseWait' => 'Please Wait', + 'Point' => '點', + 'PostEventImageBuffer' => '後置事件影åƒç·©è¡', + 'PreEventImageBuffer' => 'å‰ç½®äº‹ä»¶å½±åƒç·©è¡', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => '上一事件', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Rate', + 'Real' => 'Real', + 'Record' => '錄影', + 'RefImageBlendPct' => 'åƒè€ƒå½±åƒæ··åˆ %ge', + 'Refresh' => 'æ›´æ–°', + 'Remote' => 'Remote', + 'RemoteHostName' => 'é ç«¯ä¸»æ©Ÿå稱', + 'RemoteHostPath' => 'é ç«¯ä¸»æ©Ÿè·¯å¾‘', + 'RemoteHostPort' => 'é ç«¯ä¸»æ©Ÿç«¯å£', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Remote Image Colours', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'é‡æ–°å‘½å', + 'Replay' => 'é‡æ–°æ’­æ”¾', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => 'Reset Event Counts', + 'Restart' => 'é‡æ–°å•Ÿå‹•', + 'Restarting' => 'Restarting', + 'RestrictedCameraIds' => 'Restricted Camera Ids', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Rotate Left', + 'RotateRight' => 'Rotate Right', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => '監視模å¼', + 'RunState' => 'é‹ä½œç‹€æ…‹', + 'Running' => 'é‹è¡Œä¸­', + 'Save' => '存檔', + 'SaveAs' => '儲存為', + 'SaveFilter' => 'Save Filter', + 'Scale' => 'Scale', + 'Score' => '分數', + 'Secs' => 'Secs', + 'Sectionlength' => '片段長度', + 'Select' => 'é¸å–', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Set', + 'SetNewBandwidth' => '設定新頻寬速度', + 'SetPreset' => 'Set Preset', + 'Settings' => 'Settings', + 'ShowFilterWindow' => '顯示éŽæ¿¾è¦–窗', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Asc', + 'SortBy' => 'Sort by', + 'SortDesc' => 'Desc', + 'Source' => '來æº', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => '來æºå½¢å¼', + 'Speed' => '速度', + 'SpeedHigh' => '高 速', + 'SpeedLow' => '低 速', + 'SpeedMedium' => '中速', + 'SpeedTurbo' => 'Turbo Speed', + 'Start' => 'Start', + 'State' => 'State', + 'Stats' => 'Stats', + 'Status' => 'Status', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => 'éœæ­¢', + 'Stop' => 'åœæ­¢', + 'Stopped' => 'å·²åœæ­¢', + 'Stream' => '串æµ', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => 'System', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'å°åœ–檢視', + 'Tilt' => 'Tilt', + 'Time' => '時間', + 'TimeDelta' => 'Time Delta', + 'TimeStamp' => 'Time Stamp', // Added - 2009-02-08 + 'Timeline' => 'Timeline', // Added - 2009-02-08 + 'Timestamp' => '時間格å¼', + 'TimestampLabelFormat' => '時間標示格å¼', + 'TimestampLabelX' => '時間標示 X', + 'TimestampLabelY' => '時間標示 Y', + 'Today' => 'Today', + 'Tools' => 'Tools', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => '全部
分數', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => '觸發', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'Type', + 'Unarchive' => 'ä¸å­˜æª”', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Units', + 'Unknown' => 'Unknown', + 'Update' => 'Update', // Added - 2009-02-08 + 'UpdateAvailable' => 'An update to ZoneMinder is available.', + 'UpdateNotNecessary' => 'No update is necessary.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Use Filter', + 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Use ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'User', + 'Username' => '使用者å稱', + 'Users' => 'Users', + 'Value' => '設定值', + 'Version' => '版本', + 'VersionIgnore' => 'Ignore this version', + 'VersionRemindDay' => 'Remind again in 1 day', + 'VersionRemindHour' => 'Remind again in 1 hour', + 'VersionRemindNever' => 'Don\'t remind about new versions', + 'VersionRemindWeek' => 'Remind again in 1 week', + 'Video' => 'Video', + 'VideoFormat' => 'Video Format', // Added - 2009-02-08 + 'VideoGenFailed' => '輸出影片失敗!', + 'VideoGenFiles' => 'Existing Video Files', // Added - 2009-02-08 + 'VideoGenNoFiles' => 'No Video Files Found', // Added - 2009-02-08 + 'VideoGenParms' => '輸出影片åƒæ•¸', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', // Added - 2009-02-08 + 'VideoSize' => '影片尺寸', + 'View' => '檢視', + 'ViewAll' => '全部檢視', + 'ViewEvent' => 'View Event', // Added - 2009-02-08 + 'ViewPaged' => '分é æª¢è¦–', + 'Wake' => 'Wake', + 'WarmupFrames' => '熱機框架', + 'Watch' => 'Watch', + 'Web' => 'Web', + 'WebColour' => 'Web Colour', // Added - 2009-02-08 + 'Week' => '週', + 'White' => 'White', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 Activation String', + 'X10InputAlarmString' => 'X10 Input Alarm String', + 'X10OutputAlarmString' => 'X10 Output Alarm String', + 'Y' => 'Y', // Added - 2009-02-08 + 'Yes' => 'Yes', + 'YouNoPerms' => 'You do not have permissions to access this resource.', + 'Zone' => 'Zone', + 'ZoneAlarmColour' => 'Alarm Colour (RGB)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => '監視å€', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', // Added - 2009-02-08 + 'ZoomOut' => 'Zoom Out', // Added - 2009-02-08 +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'ç›®å‰ç™»å…¥è€…是 \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Last %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'The latest release is v%1$s, you have v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Monitor %1$s Function', + 'RunningRecentVer' => 'You are running the most recent version of ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'事件', 1=>'事件', 2=>'事件' ), + 'Monitor' => array( 0=>'監視', 1=>'監視', 2=>'監視' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/cn_zh.php b/web/lang/cn_zh.php index 7850fec01..d33365590 100644 --- a/web/lang/cn_zh.php +++ b/web/lang/cn_zh.php @@ -264,6 +264,7 @@ $SLANG = array( 'DonateRemindNever' => 'ä¸ï¼Œæˆ‘ä¸æ‰“ç®—æ款', 'DonateRemindWeek' => '现在ä¸ï¼Œ1星期内å†æ¬¡æ醒我', 'DonateYes' => '好,我现在就æ款', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => '下载', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Duration', @@ -527,6 +528,7 @@ $SLANG = array( 'Play' => '播放', 'PlayAll' => '播放全部', 'PleaseWait' => '请等待', + 'Plugins' => 'Plugins', 'Point' => '点', 'PostEventImageBuffer' => '事件之åŽå½±åƒæ•°', 'PreEventImageBuffer' => '时间之å‰å½±åƒæ•°', @@ -652,6 +654,7 @@ $SLANG = array( 'UpdateNotNecessary' => '无须更新', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => '使用筛选器', 'UseFilterExprsPost' => ' ç­›é€‰å™¨ è¡¨è¾¾å¼', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => '使用 ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/cn_zh.php.orig b/web/lang/cn_zh.php.orig new file mode 100644 index 000000000..7850fec01 --- /dev/null +++ b/web/lang/cn_zh.php.orig @@ -0,0 +1,845 @@ + Translation by + +// Notes for Translators +// 0. Get some credit, put your name in the line above (optional) +// 1. When composing the language tokens in your language you should try and keep to roughly the +// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places. +// 2. There are four types of string replacement +// a) Simple replacements are words or short phrases that are static and used directly. This type of +// replacement can be used 'as is'. +// b) Complex replacements involve some dynamic element being included and so may require substitution +// or changing into a different order. The token listed in this file will be passed through sprintf as +// a formatting string. If the dynamic element is a number you will usually need to use a variable +// replacement also as described below. +// c) Variable replacements are used in conjunction with complex replacements and involve the generation +// of a singular or plural noun depending on the number passed into the zmVlang function. See the +// the zmVlang section below for a further description of this. +// d) Optional strings which can be used to replace the prompts and/or help text for the Options section +// of the web interface. These are not listed below as they are quite large and held in the database +// so that they can also be used by the zmconfig.pl script. However you can build up your own list +// quite easily from the Config table in the database if necessary. +// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore +// you can safely assume that a single word token will only be used in that context. +// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a +// maintenance point of view to include the original language file and override the old definitions rather +// than copy all the language tokens across. To do this change the line below to whatever your base language +// is and uncomment it. +// require_once( 'zm_lang_zh_cn.php' ); + +// You may need to change the character set here, if your web server does not already +// do this by default, uncomment this if required. +// +// Example +// header( "Content-Type: text/html; charset=utf-8" ); + +// You may need to change your locale here if your default one is incorrect for the +// language described in this file, or if you have multiple languages supported. +// If you do need to change your locale, be aware that the format of this function +// is subtlely different in versions of PHP before and after 4.3.0, see +// http://uk2.php.net/manual/en/function.setlocale.php for details. +// Also be aware that changing the whole locale may affect some floating point or decimal +// arithmetic in the database, if this is the case change only the individual locale areas +// that don't affect this rather than all at once. See the examples below. +// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared +// threaded environment, if you get funny errors it may be this. +// +// Examples +// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0 + setlocale( LC_ALL, 'cn_ZH' ); //All locale settings 4.3.0 and after + setlocale( LC_CTYPE, 'cn_ZH' ); //Character class settings 4.3.0 and after + setlocale( LC_TIME, 'cn_ZH' ); //Date and time formatting 4.3.0 and after + +// Simple String Replacements +$SLANG = array( + '24BitColour' => '24 ä½å½©è‰²', + '32BitColour' => '32 ä½å½©è‰²', // Added - 2011-06-15 + '8BitGrey' => '8 ä½ç°åº¦', + 'Action' => '活动动作', + 'Actual' => '实际', + 'AddNewControl' => '新建控制', + 'AddNewMonitor' => '新建监视器', + 'AddNewUser' => '新建用户', + 'AddNewZone' => '新建区域', + 'Alarm' => '报警', + 'AlarmBrFrames' => '报警
帧', + 'AlarmFrame' => '报警帧', + 'AlarmFrameCount' => '报警帧数', + 'AlarmLimits' => '报警é™åˆ¶', + 'AlarmMaximumFPS' => '报警最大帧率FPS', + 'AlarmPx' => '报警åƒç´ ', + 'AlarmRGBUnset' => '你必须设置一个报警颜色(RGB)', + 'Alert' => '警报', + 'All' => '全部', + 'Apply' => '应用', + 'ApplyingStateChange' => '状æ€æ”¹å˜ç”Ÿæ•ˆ', + 'ArchArchived' => 'ä»…é™äºŽå­˜æ¡£', + 'ArchUnarchived' => 'ä»…é™äºŽæœªå­˜æ¡£', + 'Archive' => '存档', + 'Archived' => 'å·²ç»å­˜æ¡£', + 'Area' => '区域', + 'AreaUnits' => '区域 (px/%)', + 'AttrAlarmFrames' => '报警帧', + 'AttrArchiveStatus' => '存档状æ€', + 'AttrAvgScore' => 'å¹³å‡åˆ†æ•°', + 'AttrCause' => '原因', + 'AttrDate' => '日期', + 'AttrDateTime' => '日期/时间', + 'AttrDiskBlocks' => 'ç£ç¢ŸåŒºå—', + 'AttrDiskPercent' => 'ç£ç¢Ÿç™¾åˆ†æ¯”', + 'AttrDuration' => '过程', + 'AttrFrames' => '帧', + 'AttrId' => 'Id', + 'AttrMaxScore' => '最大分数', + 'AttrMonitorId' => '监视器 Id', + 'AttrMonitorName' => '监视器å称', + 'AttrName' => 'å称', + 'AttrNotes' => '备注', + 'AttrSystemLoad' => '系统负载', + 'AttrTime' => '时间', + 'AttrTotalScore' => '总分数', + 'AttrWeekday' => '星期', + 'Auto' => '自动', + 'AutoStopTimeout' => '超时自动åœæ­¢', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'å¹³å‡
分数', + 'Background' => 'åŽå°', + 'BackgroundFilter' => '在åŽå°è¿è¡Œç­›é€‰å™¨', + 'BadAlarmFrameCount' => '报警帧数必须设为大于1çš„æ•´æ•°', + 'BadAlarmMaxFPS' => '报警最大帧率必须是正整数或正浮点数', + 'BadChannel' => '通é“必须设为大于零的整数', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => '必须为器件设置有效值', + 'BadFPSReportInterval' => 'FPS帧数报告间隔缓冲数必须是0以上整数', + 'BadFormat' => 'æ ¼å¼å¿…须设为大于零的整数', + 'BadFrameSkip' => '跳帧数必须设为大于零的整数', + 'BadHeight' => '高度必须设为有效值', + 'BadHost' => '主机必须设为有效IP地å€æˆ–主机å,ä¸è¦åŒ…å« http://', + 'BadImageBufferCount' => '图åƒç¼“冲器大å°å¿…须设为大于10çš„æ•´æ•°', + 'BadLabelX' => '标签 X å标必须设为大于零的整数', + 'BadLabelY' => '标签 Y å标必须设为大于零的整数', + 'BadMaxFPS' => '最大帧数FPS必须设为正整数或ç€æµ®ç‚¹æ•°', + 'BadNameChars' => 'å称åªå¯ä»¥åŒ…å«å­—æ¯ï¼Œæ•°å­—,波折å·å’Œä¸‹åˆ’线', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => '路径必须设为有效值', + 'BadPort' => '端å£å¿…须设为有效数字', + 'BadPostEventCount' => '之åŽäº‹ä»¶å½±åƒæ•°ç›®å¿…须设为大于零的整数', + 'BadPreEventCount' => '之å‰äº‹ä»¶å½±åƒæ•°ç›®å¿…须最å°å€¼ä¸ºé›¶ï¼Œå¹¶ä¸”å°äºŽå½±åƒç¼“冲区', + 'BadRefBlendPerc' => 'å‚考混åˆç™¾åˆ†æ¯”必须设为一个正整数', + 'BadSectionLength' => '节长度必须设为30çš„æ•´æ•°å€', + 'BadSignalCheckColour' => 'ä¿¡å·æ£€æŸ¥é¢œè‰²å¿…须设为有效的RGB颜色字符', + 'BadStreamReplayBuffer' => 'æµé‡æ”¾ç¼“冲必须为零或更多整数', + 'BadWarmupCount' => '预热帪必须设为零或更多整数', + 'BadWebColour' => 'Web颜色必须设为有效Web颜色字符', + 'BadWidth' => '宽度必须设为有效值', + 'Bandwidth' => '带宽', + 'BlobPx' => 'Blobåƒç´ ', + 'BlobSizes' => 'Blob大å°', + 'Blobs' => 'Blobs', + 'Brightness' => '亮度', + 'Buffers' => '缓冲器', + 'CanAutoFocus' => 'å¯ä»¥è‡ªåŠ¨å¯¹ç„¦', + 'CanAutoGain' => 'å¯ä»¥è‡ªåŠ¨å¢žç›ŠæŽ§åˆ¶', + 'CanAutoIris' => 'å¯ä»¥è‡ªåŠ¨å…‰åœˆ', + 'CanAutoWhite' => 'å¯ä»¥è‡ªåŠ¨ç™½å¹³è¡¡', + 'CanAutoZoom' => 'å¯ä»¥è‡ªåŠ¨ç¼©æ”¾', + 'CanFocus' => 'å¯ä»¥å¯¹ç„¦', + 'CanFocusAbs' => 'å¯ä»¥ç»å¯¹å¯¹ç„¦', + 'CanFocusCon' => 'å¯ä»¥è¿žç»­å¯¹ç„¦', + 'CanFocusRel' => 'å¯ä»¥ç›¸å¯¹å¯¹ç„¦', + 'CanGain' => 'å¯ä»¥å¢žç›Š', + 'CanGainAbs' => 'å¯ä»¥ç»å¯¹å¢žç›Š', + 'CanGainCon' => 'å¯ä»¥è¿žç»­å¢žç›Š', + 'CanGainRel' => 'å¯ä»¥ç›¸å¯¹å¢žç›Š', + 'CanIris' => 'å¯ä»¥å…‰åœˆ', + 'CanIrisAbs' => 'å¯ä»¥ç»å¯¹å…‰åœˆ', + 'CanIrisCon' => 'å¯ä»¥è¿žç»­å…‰åœˆ', + 'CanIrisRel' => 'å¯ä»¥ç›¸å¯¹å…‰åœˆ', + 'CanMove' => 'å¯ä»¥ç§»åŠ¨', + 'CanMoveAbs' => 'å¯ä»¥ç»å¯¹ç§»åŠ¨', + 'CanMoveCon' => 'å¯ä»¥è¿žç»­ç§»åŠ¨', + 'CanMoveDiag' => 'å¯ä»¥å¯¹è§’移动', + 'CanMoveMap' => 'å¯ä»¥æ˜ å°„网格移动', + 'CanMoveRel' => 'å¯ä»¥ç›¸å¯¹ç§»åŠ¨', + 'CanPan' => 'å¯ä»¥å¹³ç§»' , + 'CanReset' => 'å¯ä»¥å¤ä½', + 'CanSetPresets' => 'å¯ä»¥è¿›è¡Œé¢„设', + 'CanSleep' => 'å¯ä»¥ä¼‘眠', + 'CanTilt' => 'å¯ä»¥å€¾æ–œ', + 'CanWake' => 'å¯ä»¥å”¤é†’', + 'CanWhite' => 'å¯ä»¥ç™½å¹³è¡¡', + 'CanWhiteAbs' => 'å¯ä»¥ç»å¯¹ç™½å¹³è¡¡', + 'CanWhiteBal' => 'å¯ä»¥ç™½å¹³è¡¡', + 'CanWhiteCon' => 'å¯ä»¥è¿žç»­ç™½å¹³è¡¡', + 'CanWhiteRel' => 'å¯ä»¥ç›¸å¯¹ç™½å¹³è¡¡', + 'CanZoom' => 'å¯ä»¥ç¼©æ”¾', + 'CanZoomAbs' => 'å¯ä»¥ç»å¯¹ç¼©æ”¾', + 'CanZoomCon' => 'å¯ä»¥è¿žç»­ç¼©æ”¾', + 'CanZoomRel' => 'å¯ä»¥ç›¸å¯¹ç¼©æ”¾', + 'Cancel' => 'å–消', + 'CancelForcedAlarm' => 'å–消强制报警', + 'CaptureHeight' => 'æ•èŽ·é«˜åº¦', + 'CaptureMethod' => 'æ•èŽ·æ–¹å¼', + 'CapturePalette' => 'æ•èŽ·è°ƒè‰²æ¿', + 'CaptureWidth' => 'æ•èŽ·å®½åº¦', + 'Cause' => '原因', + 'CheckMethod' => '报警检查方å¼', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => '选择筛选器', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => '选择预置', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => '关闭', + 'Colour' => '彩色', + 'Command' => '命令', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'é…ç½®', + 'ConfiguredFor' => 'é…置标的', + 'ConfirmDeleteEvents' => '确认希望删除所选事件?', + 'ConfirmPassword' => '密ç ç¡®è®¤', + 'ConjAnd' => 'åŠ', + 'ConjOr' => '或', + 'Console' => '控制å°', + 'ContactAdmin' => '请è”系您的管ç†å‘˜äº†è§£è¯¦æƒ…。', + 'Continue' => '继续', + 'Contrast' => '对比度', + 'Control' => '控制', + 'ControlAddress' => '控制地å€', + 'ControlCap' => '控制能力', + 'ControlCaps' => '控制能力', + 'ControlDevice' => '控制设备', + 'ControlType' => '控制类型', + 'Controllable' => 'å¯æŽ§', + 'Cycle' => '循环', + 'CycleWatch' => '循环监视', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'æ—¥', + 'Debug' => '调试', + 'DefaultRate' => '缺çœé€ŸçŽ‡', + 'DefaultScale' => '缺çœç¼©æ”¾', + 'DefaultView' => '缺çœè§†è§’', + 'Delete' => '删除', + 'DeleteAndNext' => '删除并下一个', + 'DeleteAndPrev' => '删除并å‰ä¸€ä¸ª', + 'DeleteSavedFilter' => '删除存储过滤器', + 'Description' => 'æè¿°', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => '设备', + 'DeviceChannel' => '设备通é“', + 'DeviceFormat' => '设备格å¼', + 'DeviceNumber' => '设备编å·', + 'DevicePath' => '设备路径', + 'Devices' => '设备', + 'Dimensions' => '维度', + 'DisableAlarms' => '关闭警报', + 'Disk' => 'ç£ç¢Ÿ', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => '请æ款', + 'DonateAlready' => 'ä¸ï¼Œæˆ‘å·²ç»æ赠过了', + 'DonateEnticement' => '迄今,您已ç»è¿è¡ŒZoneMinder有一阵å­äº†ï¼Œå¸Œæœ›å®ƒèƒ½å¤Ÿæœ‰åŠ©äºŽå¢žå¼ºæ‚¨å®¶æˆ–者办公区域的安全。尽管ZoneMinder是,并将ä¿æŒå…费和开æºï¼Œè¯¥é¡¹ç›®ä¾ç„¶åœ¨ç ”å‘和支æŒä¸­æŠ•å…¥äº†èµ„金和精力。如果您愿æ„支æŒä»ŠåŽçš„å¼€å‘和新功能,那么请考虑为该项目æ款。æ款ä¸æ˜¯å¿…须的,任何数é‡çš„æ赠,我们都很感谢。

如果您愿æ„æ款,请选择下列选项,或者访问 http://www.zoneminder.com/donate.html æ赠主页。

感谢您使用ZoneMinder,并且ä¸è¦å¿˜è®°è®¿é—®è®¿é—®ZoneMinder.com的论å›ä»¥èŽ·å¾—支æŒæˆ–建议,这å¯ä»¥æå‡æ‚¨çš„ZoneMinder的体验。', + 'DonateRemindDay' => '现在ä¸ï¼Œ1天内å†æ¬¡æ醒我', + 'DonateRemindHour' => '现在ä¸ï¼Œ1å°æ—¶å†…å†æ¬¡æ醒我', + 'DonateRemindMonth' => '现在ä¸ï¼Œ1个月内å†æ¬¡æ醒我', + 'DonateRemindNever' => 'ä¸ï¼Œæˆ‘ä¸æ‰“ç®—æ款', + 'DonateRemindWeek' => '现在ä¸ï¼Œ1星期内å†æ¬¡æ醒我', + 'DonateYes' => '好,我现在就æ款', + 'Download' => '下载', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Duration', + 'Edit' => '编辑', + 'Email' => 'Email', + 'EnableAlarms' => 'å¯åŠ¨æŠ¥è­¦', + 'Enabled' => 'å·²å¯åŠ¨', + 'EnterNewFilterName' => '输入新过滤器å称', + 'Error' => '错误', + 'ErrorBrackets' => '错误, 请检查左å³æ‹¬å·æ•°ï¼Œå¿…须相等', + 'ErrorValidValue' => '错误, 请检查所有æ¡ä»¶å…·å¤‡æœ‰æ•ˆå€¼', + 'Etc' => 'ç­‰', + 'Event' => '事件', + 'EventFilter' => '事件过滤器', + 'EventId' => '事件 Id', + 'EventName' => '事件å称', + 'EventPrefix' => '事件å‰ç¼€', + 'Events' => '事件', + 'Exclude' => '排除', + 'Execute' => '执行', + 'Export' => '导出', + 'ExportDetails' => '导出时间详情', + 'ExportFailed' => '导出失败', + 'ExportFormat' => '导出文件格å¼', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => '导出帧详情', + 'ExportImageFiles' => '导出影åƒæ–‡ä»¶', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => '导出其他文件 (如果存在)', + 'ExportOptions' => '导出选项', + 'ExportSucceeded' => '导出æˆåŠŸ', + 'ExportVideoFiles' => '导出视频文件 (如果存在)', + 'Exporting' => '正在导出', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS 报告间隔', + 'FTP' => 'FTP', + 'Far' => 'è¿œ', + 'FastForward' => 'å¿«è¿›', + 'Feed' => '转é€æº', + 'Ffmpeg' => 'Ffmpeg', + 'File' => '文件', + 'FilterArchiveEvents' => '将全部匹é…项存档', + 'FilterDeleteEvents' => '将全部匹é…项删除', + 'FilterEmailEvents' => '将全部匹é…项详情电邮出去', + 'FilterExecuteEvents' => '执行全部匹é…项命令', + 'FilterMessageEvents' => '全部匹é…项的信æ¯è¯¦æƒ…', + 'FilterPx' => '过滤器åƒç´ ', + 'FilterUnset' => '您必须指定过滤器宽度和高度', + 'FilterUploadEvents' => '上传全部匹é…项', + 'FilterVideoEvents' => '为全部匹é…项创建视频', + 'Filters' => '过滤器', + 'First' => '首先', + 'FlippedHori' => '水平翻转', + 'FlippedVert' => '垂直翻转', + 'Focus' => 'èšç„¦', + 'ForceAlarm' => '强制报警', + 'Format' => 'æ ¼å¼', + 'Frame' => '帧', + 'FrameId' => '帧 Id', + 'FrameRate' => '帧率', + 'FrameSkip' => '跳帧', + 'Frames' => '帧', + 'Func' => '功能', + 'Function' => '功能', + 'Gain' => '增益', + 'General' => '一般', + 'GenerateVideo' => '创建视频', + 'GeneratingVideo' => '正在创建视频', + 'GoToZoneMinder' => '访问 ZoneMinder.com', + 'Grey' => 'ç°', + 'Group' => '组', + 'Groups' => '组', + 'HasFocusSpeed' => '有èšç„¦é€Ÿåº¦', + 'HasGainSpeed' => '有增益速度', + 'HasHomePreset' => '有主页预设', + 'HasIrisSpeed' => '有光圈速度', + 'HasPanSpeed' => '有平移速度', + 'HasPresets' => '有预设值', + 'HasTiltSpeed' => '有倾斜速度', + 'HasTurboPan' => '有加速平移', + 'HasTurboTilt' => '有加速斜率', + 'HasWhiteSpeed' => '有白平衡速度', + 'HasZoomSpeed' => '有缩放速度', + 'High' => '高', + 'HighBW' => '高 B/W', + 'Home' => '主页', + 'Hour' => 'å°æ—¶', + 'Hue' => '色调', + 'Id' => 'Id', + 'Idle' => '空闲', + 'Ignore' => '忽略', + 'Image' => 'å½±åƒ', + 'ImageBufferSize' => 'å½±åƒç¼“å†²åŒºå¤§å° (帧)', + 'Images' => 'å½±åƒ', + 'In' => '在', + 'Include' => '包å«', + 'Inverted' => 'åå‘', + 'Iris' => '光圈', + 'KeyString' => '密钥字符', + 'Label' => '标签', + 'Language' => '语言', + 'Last' => '最åŽ', + 'Layout' => '布局', + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => '个结果', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'ä»…é™äºŽå¼€å§‹', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => '管ç†ç›‘视器', + 'List' => '列表', + 'Load' => '加载', + 'Local' => '本地', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => '登录为', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => '登录', + 'Login' => '登入', + 'Logout' => '登出', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => '低', + 'LowBW' => '低 B/W', + 'Main' => '主è¦', + 'Man' => '人', + 'Manual' => '手册', + 'Mark' => '标记', + 'Max' => '最大', + 'MaxBandwidth' => '最大带宽', + 'MaxBrScore' => '最大
Score', + 'MaxFocusRange' => '最大èšç„¦èŒƒå›´', + 'MaxFocusSpeed' => '最大èšç„¦é€Ÿåº¦', + 'MaxFocusStep' => '最大èšç„¦æ­¥è¿›', + 'MaxGainRange' => '最大增益范围', + 'MaxGainSpeed' => '最大增益速度', + 'MaxGainStep' => '最大增益步进', + 'MaxIrisRange' => '最大光圈范围', + 'MaxIrisSpeed' => '最大光圈速度', + 'MaxIrisStep' => '最大光圈步进', + 'MaxPanRange' => '最大平移范围', + 'MaxPanSpeed' => '最大平移速度', + 'MaxPanStep' => '最大平移步进', + 'MaxTiltRange' => '最大倾斜范围', + 'MaxTiltSpeed' => '最大倾斜速度', + 'MaxTiltStep' => '最大倾斜步进', + 'MaxWhiteRange' => '最大白平衡范围', + 'MaxWhiteSpeed' => '最大白平衡速度', + 'MaxWhiteStep' => '最大白平衡步进', + 'MaxZoomRange' => '最大缩放范围', + 'MaxZoomSpeed' => '最大缩放速度', + 'MaxZoomStep' => '最大缩放步进', + 'MaximumFPS' => '最大帧率 FPS', + 'Medium' => '中等', + 'MediumBW' => '中等 B/W', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => '最å°æŠ¥è­¦åŒºåŸŸåº”该å°äºŽæœ€å¤§åŒºåŸŸ', + 'MinAlarmAreaUnset' => '您必须指定最å°æŠ¥è­¦åƒç´ æ•°é‡', + 'MinBlobAreaLtMax' => '最å°blob区必须å°æ•°æœ€å¤§åŒºåŸŸ', + 'MinBlobAreaUnset' => '您必须指定最å°blobåƒç´ æ•°é‡', + 'MinBlobLtMinFilter' => 'æœ€å° blob 区必须å°äºŽç­‰äºŽæœ€å°è¿‡æ»¤åŒºåŸŸ', + 'MinBlobsLtMax' => 'æœ€å° blob å¿…é¡»å°äºŽæœ€å¤§åŒºåŸŸ', + 'MinBlobsUnset' => 'æ‚¨å¿…é¡»æŒ‡å®šæœ€å° blob æ•°', + 'MinFilterAreaLtMax' => '最å°è¿‡æ»¤åŒºåŸŸå¿…é¡»å°äºŽæœ€å¤§åŒºåŸŸ', + 'MinFilterAreaUnset' => '您必须指定最å°è¿‡æ»¤åƒç´ æ•°é‡', + 'MinFilterLtMinAlarm' => '最å°è¿‡æ»¤åŒºåŸŸåº”该å°äºŽç­‰äºŽæœ€å°æŠ¥è­¦åŒºåŸŸ', + 'MinFocusRange' => '最å°èšç„¦åŒºåŸŸ', + 'MinFocusSpeed' => '最å°èšç„¦é€Ÿåº¦', + 'MinFocusStep' => '最å°èšç„¦æ­¥è¿›', + 'MinGainRange' => '最å°å¢žç›ŠèŒƒå›´', + 'MinGainSpeed' => '最å°å¢žç›Šé€Ÿåº¦', + 'MinGainStep' => '最å°å¢žç›Šæ­¥è¿›', + 'MinIrisRange' => '最å°å…‰åœˆèŒƒå›´', + 'MinIrisSpeed' => '最å°å…‰åœˆé€Ÿåº¦', + 'MinIrisStep' => '最å°å…‰åœˆæ­¥è¿›', + 'MinPanRange' => '最å°å¹³ç§»èŒƒå›´', + 'MinPanSpeed' => '最å°å¹³ç§»é€Ÿåº¦', + 'MinPanStep' => '最å°å¹³ç§»æ­¥è¿›', + 'MinPixelThresLtMax' => '最å°åƒç´ é˜ˆå€¼åº”该å°äºŽæœ€å¤§å€¼', + 'MinPixelThresUnset' => '您必须指定一个最å°åƒç´ é˜ˆå€¼', + 'MinTiltRange' => '最å°å€¾æ–œèŒƒå›´', + 'MinTiltSpeed' => '最å°å€¾æ–œé€Ÿåº¦', + 'MinTiltStep' => '最å°å€¾æ–œæ­¥è¿›', + 'MinWhiteRange' => '最å°ç™½å¹³è¡¡èŒƒå›´', + 'MinWhiteSpeed' => '最å°ç™½å¹³è¡¡é€Ÿåº¦', + 'MinWhiteStep' => '最å°ç™½å¹³è¡¡æ­¥è¿›', + 'MinZoomRange' => '最å°ç¼©æ”¾èŒƒå›´', + 'MinZoomSpeed' => '最å°ç¼©æ”¾é€Ÿåº¦', + 'MinZoomStep' => '最å°ç¼©æ”¾æ­¥è¿›', + 'Misc' => 'æ‚项', + 'Monitor' => '监视器', + 'MonitorIds' => '监视器 Ids', + 'MonitorPreset' => '监视器预设值', + 'MonitorPresetIntro' => '从以下列表中选择一个åˆé€‚的预设值.

请注æ„该方å¼å¯èƒ½è¦†ç›–您为该监视器é…置的数值.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => '监视器', + 'Montage' => '镜头组接', + 'Month' => '月', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => '移动', + 'MustBeGe' => '必须大于等于', + 'MustBeLe' => 'å¿…é¡»å°äºŽç­‰äºŽ', + 'MustConfirmPassword' => '您必须确认密ç ', + 'MustSupplyPassword' => '您必须æ供密ç ', + 'MustSupplyUsername' => '您必须æ供用户å', + 'Name' => 'å称', + 'Near' => 'è¿‘', + 'Network' => '网络', + 'New' => '新建', + 'NewGroup' => '新建组', + 'NewLabel' => '新建标签', + 'NewPassword' => '新建密ç ', + 'NewState' => '新状æ€', + 'NewUser' => '新用户', + 'Next' => '下一个', + 'No' => 'ä¸', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => '该事件没有相关帧的记录', + 'NoGroup' => '无组', + 'NoSavedFilters' => '没有ä¿å­˜è¿‡æ»¤å™¨', + 'NoStatisticsRecorded' => '没有该事件/帧的统计记录', + 'None' => 'æ— ', + 'NoneAvailable' => '没有', + 'Normal' => '正常', + 'Notes' => '备注', + 'NumPresets' => '数值预置', + 'Off' => 'å…³', + 'On' => 'å¼€', + 'OpEq' => '等于', + 'OpGt' => '大于', + 'OpGtEq' => '大于等于', + 'OpIn' => '在集', + 'OpLt' => 'å°äºŽ', + 'OpLtEq' => 'å°äºŽç­‰äºŽ', + 'OpMatches' => '匹é…', + 'OpNe' => 'ä¸ç­‰äºŽ', + 'OpNotIn' => '未在集', + 'OpNotMatches' => 'ä¸åŒ¹é…', + 'Open' => '打开', + 'OptionHelp' => '选项帮助', + 'OptionRestartWarning' => '这些改动在系统è¿è¡Œæ—¶å¯ä»¥ä¸ä¼šå®Œå…¨ç”Ÿæ•ˆ.\n 当你设置完毕改动åŽ\n请确认\n您é‡æ–°å¯åŠ¨ ZoneMinder.', + 'Options' => '选项', + 'OrEnterNewName' => '或输入新åè¯', + 'Order' => '次åº', + 'Orientation' => 'æ–¹å‘', + 'Out' => '外部', + 'OverwriteExisting' => '覆盖现有的', + 'Paged' => '分页', + 'Pan' => '平移', + 'PanLeft' => 'å‘左平移', + 'PanRight' => 'å‘å³å¹³ç§»', + 'PanTilt' => '平移/倾斜', + 'Parameter' => 'å‚æ•°', + 'Password' => '密ç ', + 'PasswordsDifferent' => '新建密ç å’Œç¡®è®¤å¯†ç ä¸ä¸€è‡´', + 'Paths' => '路径', + 'Pause' => 'æš‚åœ', + 'Phone' => '电è¯', + 'PhoneBW' => '电诠B/W', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'åƒç´ å·®åˆ«', + 'Pixels' => 'åƒç´ ', + 'Play' => '播放', + 'PlayAll' => '播放全部', + 'PleaseWait' => '请等待', + 'Point' => '点', + 'PostEventImageBuffer' => '事件之åŽå½±åƒæ•°', + 'PreEventImageBuffer' => '时间之å‰å½±åƒæ•°', + 'PreserveAspect' => 'ç»´æŒé•¿å®½æ¯”', + 'Preset' => '预置', + 'Presets' => '预置', + 'Prev' => 'å‰', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'åè®®', + 'Rate' => '速率', + 'Real' => '实际', + 'Record' => '记录', + 'RefImageBlendPct' => 'å‚考影åƒæ··åˆ %ge', + 'Refresh' => '刷新', + 'Remote' => '远程', + 'RemoteHostName' => '远程主机å', + 'RemoteHostPath' => '远程主机路径', + 'RemoteHostPort' => '远程主机端å£', + 'RemoteHostSubPath' => '远程主机å­è·¯å¾„', + 'RemoteImageColours' => '远程影åƒé¢œè‰²', + 'RemoteMethod' => '远程方法', + 'RemoteProtocol' => '远程åè®®', + 'Rename' => 'é‡å‘½å', + 'Replay' => 'é‡æ”¾', + 'ReplayAll' => '全部事件', + 'ReplayGapless' => '无间隙事件', + 'ReplaySingle' => 'å•ä¸€äº‹ä»¶', + 'Reset' => 'é‡ç½®', + 'ResetEventCounts' => 'é‡ç½®äº‹ä»¶æ•°', + 'Restart' => 'é‡å¯åŠ¨', + 'Restarting' => 'é‡å¯åŠ¨', + 'RestrictedCameraIds' => 'å—é™æ‘„åƒæœº Id', + 'RestrictedMonitors' => 'å—é™ç›‘视器', + 'ReturnDelay' => '返回延时', + 'ReturnLocation' => '返回ä½ç½®', + 'Rewind' => 'é‡ç»•', + 'RotateLeft' => 'å‘左旋转', + 'RotateRight' => 'å‘å³æ—‹è½¬', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'è¿è¡Œæ¨¡å¼', + 'RunState' => 'è¿è¡ŒçŠ¶æ€', + 'Running' => 'è¿è¡Œ', + 'Save' => 'ä¿å­˜', + 'SaveAs' => 'å¦å­˜ä¸º', + 'SaveFilter' => '存储过滤器', + 'Scale' => '比例', + 'Score' => '分数', + 'Secs' => '秒', + 'Sectionlength' => '段长度', + 'Select' => '选择', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => '选择监视器', + 'SelfIntersecting' => '多边形边线ä¸å¾—交å‰', + 'Set' => '设置', + 'SetNewBandwidth' => '设置新的带宽', + 'SetPreset' => '设置预设值', + 'Settings' => '设置', + 'ShowFilterWindow' => '显示过滤器视窗', + 'ShowTimeline' => '显示时间轴', + 'SignalCheckColour' => 'åž‹å·æ£€æŸ¥é¢œè‰²', + 'Size' => '大å°', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'ç¡çœ ', + 'SortAsc' => 'å‡åº', + 'SortBy' => '排åº', + 'SortDesc' => 'é™åº', + 'Source' => 'ä¿¡å·æº', + 'SourceColours' => 'ä¿¡å·æºé¢œè‰²', + 'SourcePath' => 'ä¿¡å·æºè·¯å¾„', + 'SourceType' => 'ä¿¡å·æºç±»åž‹', + 'Speed' => '加速', + 'SpeedHigh' => '高速', + 'SpeedLow' => '慢速', + 'SpeedMedium' => '中等速度', + 'SpeedTurbo' => '加速度', + 'Start' => '开始', + 'State' => '状æ€', + 'Stats' => '统计', + 'Status' => '状况', + 'Step' => '步进', + 'StepBack' => 'å•æ­¥åŽé€€', + 'StepForward' => 'å•æ­¥å‰è¿›', + 'StepLarge' => '大步步进', + 'StepMedium' => '中步步进', + 'StepNone' => '无步进', + 'StepSmall' => 'å°æ­¥æ­¥è¿›', + 'Stills' => 'é™æ­¢', + 'Stop' => 'åœæ­¢', + 'Stopped' => 'å·²åœæ­¢', + 'Stream' => 'æµ', + 'StreamReplayBuffer' => 'æµé‡æ”¾å½±åƒç¼“冲', + 'Submit' => 'å‘é€', + 'System' => '系统', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => '缩略图', + 'Tilt' => '倾斜', + 'Time' => '时间', + 'TimeDelta' => '相对时间', + 'TimeStamp' => '时间戳', + 'Timeline' => '时间轴', + 'Timestamp' => '时间戳', + 'TimestampLabelFormat' => '时间戳标签格å¼', + 'TimestampLabelX' => '时间戳标签 X', + 'TimestampLabelY' => '时间戳标签 Y', + 'Today' => '今天', + 'Tools' => '工具', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => '总
分数', + 'TrackDelay' => '轨迹延时', + 'TrackMotion' => '轨迹è¿åŠ¨', + 'Triggers' => '触å‘器', + 'TurboPanSpeed' => '加速平移速度', + 'TurboTiltSpeed' => '加速倾斜速度', + 'Type' => '类型', + 'Unarchive' => '未存档', + 'Undefined' => '未定义', + 'Units' => 'å•å…ƒ', + 'Unknown' => '未知', + 'Update' => 'æ›´æ–°', + 'UpdateAvailable' => '有新版本的ZoneMinder.', + 'UpdateNotNecessary' => '无须更新', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => '使用筛选器', + 'UseFilterExprsPost' => ' ç­›é€‰å™¨ è¡¨è¾¾å¼', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => '使用 ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => '用户', + 'Username' => '用户å', + 'Users' => '用户', + 'Value' => '数值', + 'Version' => '版本', + 'VersionIgnore' => '忽略该版本', + 'VersionRemindDay' => '一天内å†æ¬¡æ醒', + 'VersionRemindHour' => '一å°æ—¶å†…å†æ¬¡æ醒', + 'VersionRemindNever' => 'ä¸å†æ醒新版本', + 'VersionRemindWeek' => '一周内å†æ¬¡æ醒', + 'Video' => '视频', + 'VideoFormat' => '视频格å¼', + 'VideoGenFailed' => '视频产生失败!', + 'VideoGenFiles' => '现有视频文件', + 'VideoGenNoFiles' => '没有找到视频文件', + 'VideoGenParms' => '视频产生å‚æ•°', + 'VideoGenSucceeded' => '视频产生æˆåŠŸ!', + 'VideoSize' => '视频尺寸', + 'View' => '查看', + 'ViewAll' => '查看全部', + 'ViewEvent' => '查看事件', + 'ViewPaged' => '查看分页', + 'Wake' => '唤醒', + 'WarmupFrames' => '预热帪', + 'Watch' => '观察', + 'Web' => 'Web', + 'WebColour' => 'Web颜色', + 'Week' => '周', + 'White' => '白', + 'WhiteBalance' => '白平衡', + 'Wide' => '宽', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 激活字符', + 'X10InputAlarmString' => 'X10 输入警报字符', + 'X10OutputAlarmString' => 'X10 输出警报字符', + 'Y' => 'Y', + 'Yes' => '是', + 'YouNoPerms' => '您没有访问该资æºçš„æƒé™ã€‚', + 'Zone' => '区域', + 'ZoneAlarmColour' => '报警色彩 (红/绿/è“)', + 'ZoneArea' => '区域', + 'ZoneFilterSize' => '过滤宽度/高度 (åƒç´ )', + 'ZoneMinMaxAlarmArea' => '最å°/最大报警区域', + 'ZoneMinMaxBlobArea' => '最å°/最大污æ¸åŒº Blob', + 'ZoneMinMaxBlobs' => '最å°/最大污æ¸åŒºæ•° Blobs', + 'ZoneMinMaxFiltArea' => '最å°/最大过滤区域', + 'ZoneMinMaxPixelThres' => '最å°/最大åƒç´ é˜ˆå€¼(0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => '忽略过载帪数', + 'Zones' => '区域', + 'Zoom' => '缩放', + 'ZoomIn' => '放大', + 'ZoomOut' => '缩å°', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => '当å‰ç™»å…¥çš„是 \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => '最新 %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => '最新版为 v%1$s, 您有的是 v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => '监视器 %1$s 功能', + 'RunningRecentVer' => '您è¿è¡Œçš„是最新版的 ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// 'Potato' => array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ), +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'事件', 1=>'事件', 2=>'事件' ), + 'Monitor' => array( 0=>'监视器', 1=>'监视器', 2=>'监视器' ), +); +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $CLANG['MonitorCount'], count($monitors), zmVlang( $VLANG['VlangMonitor'], count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/cs_cz.php b/web/lang/cs_cz.php index c04694cd7..a1e557b03 100644 --- a/web/lang/cs_cz.php +++ b/web/lang/cs_cz.php @@ -264,6 +264,7 @@ $SLANG = array( 'DonateRemindNever' => 'Ne, nechci podpoøit ZoneMinder, nepøipomínat', 'DonateRemindWeek' => 'Nyní ne, pøipomenout za týden', 'DonateYes' => 'Ano, chcit podpoøit ZoneMinder nyní', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Stáhnout', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Prùbìh', @@ -527,6 +528,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Pøehrát v¹e', 'PleaseWait' => 'Prosím èekejte', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'Pozáznamový bufer', 'PreEventImageBuffer' => 'Pøedzáznamový bufer', @@ -652,6 +654,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Update není potøeba.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Pou¾ít filtr', 'UseFilterExprsPost' => ' výrazù', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Pou¾ít ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/cs_cz.php.orig b/web/lang/cs_cz.php.orig new file mode 100644 index 000000000..c04694cd7 --- /dev/null +++ b/web/lang/cs_cz.php.orig @@ -0,0 +1,846 @@ + '24 bit barevná', + '32BitColour' => '32 bit barevná', // Added - 2011-06-15 + '8BitGrey' => '8 bit ¹edá ¹kála', + 'Action' => 'Akce', + 'Actual' => 'Skuteèná', + 'AddNewControl' => 'Pøidat nové øízení', + 'AddNewMonitor' => 'Pøidat kameru', + 'AddNewUser' => 'Pøidat u¾ivatele', + 'AddNewZone' => 'Pøidat zónu', + 'Alarm' => 'Alarm', + 'AlarmBrFrames' => 'Alarm
Snímky', + 'AlarmFrame' => 'Alarm snímek', + 'AlarmFrameCount' => 'Poèet alarm snímkù', + 'AlarmLimits' => 'Limity alarmu', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Alarm Px', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Pozor', + 'All' => 'V¹echny', + 'Apply' => 'Pou¾ít', + 'ApplyingStateChange' => 'Aplikuji zmìnu stavu', + 'ArchArchived' => 'Pouze archivované', + 'ArchUnarchived' => 'Pouze nearchivované', + 'Archive' => 'Archiv', + 'Archived' => 'Archivován', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Alarm snímky', + 'AttrArchiveStatus' => 'Archiv status', + 'AttrAvgScore' => 'Prùm. skóre', + 'AttrCause' => 'Pøíèina', + 'AttrDate' => 'Datum', + 'AttrDateTime' => 'Datum/Èas', + 'AttrDiskBlocks' => 'Bloky disku', + 'AttrDiskPercent' => 'Zaplnìní disku', + 'AttrDuration' => 'Prùbìh', + 'AttrFrames' => 'Snímky', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Max. skóre', + 'AttrMonitorId' => 'Kamera Id', + 'AttrMonitorName' => 'Jméno kamery', + 'AttrName' => 'Jméno', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Èas', + 'AttrTotalScore' => 'Celkové skóre', + 'AttrWeekday' => 'Den v týdnu', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Èasový limit pro vypr¹ení', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'Prùm.
Skóre', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Jména moho obsahovat pouze alfanumerické znaky a podtr¾ítko èi pomlèku', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'Rychlost sítì', + 'BlobPx' => 'Znaèka Px', + 'BlobSizes' => 'Velikost znaèky', + 'Blobs' => 'Znaèky', + 'Brightness' => 'Svìtlost', + 'Buffers' => 'Bufery', + 'CanAutoFocus' => 'Umí automaticky zaostøit', + 'CanAutoGain' => 'Umí automatický zisk', + 'CanAutoIris' => 'Umí auto iris', + 'CanAutoWhite' => 'Umí automaticky vyvá¾it bílou', + 'CanAutoZoom' => 'Umí automaticky zoomovat', + 'CanFocus' => 'Umí zaostøit', + 'CanFocusAbs' => 'Umí zaostøit absolutnì', + 'CanFocusCon' => 'Umí prùbì¾nì zaostøit', + 'CanFocusRel' => 'Umí relativnì zaostøit', + 'CanGain' => 'Umí zisk', + 'CanGainAbs' => 'Umí absolutní zisk', + 'CanGainCon' => 'Umí prùbì¾ný zisk', + 'CanGainRel' => 'Umí relativní zisk', + 'CanIris' => 'Umí iris', + 'CanIrisAbs' => 'Umí absolutní iris', + 'CanIrisCon' => 'Umí prùbì¾ný iris', + 'CanIrisRel' => 'Umí relativní iris', + 'CanMove' => 'Umí pohyb', + 'CanMoveAbs' => 'Umí absoultní pohyb', + 'CanMoveCon' => 'Umí prùbì¾ný pohyb', + 'CanMoveDiag' => 'Umí diagonální pohyb', + 'CanMoveMap' => 'Umí mapovaný pohyb', + 'CanMoveRel' => 'Umí relativní pohyb', + 'CanPan' => 'Umí otáèení', + 'CanReset' => 'Umí reset', + 'CanSetPresets' => 'Umí navolit pøedvolby', + 'CanSleep' => 'Mù¾e spát', + 'CanTilt' => 'Umí náklon', + 'CanWake' => 'Lze vzbudit', + 'CanWhite' => 'Umí vyvá¾ení bílé', + 'CanWhiteAbs' => 'Umí absolutní vyvá¾ení bílé', + 'CanWhiteBal' => 'Umí vyvá¾ení bílé', + 'CanWhiteCon' => 'Umí prùbì¾né vyvá¾ení bílé', + 'CanWhiteRel' => 'Umí relativní vyvá¾ení bílé', + 'CanZoom' => 'Umí zoom', + 'CanZoomAbs' => 'Umí absolutní zoom', + 'CanZoomCon' => 'Umí prùbì¾ný zoom', + 'CanZoomRel' => 'Umí relativní zoom', + 'Cancel' => 'Zru¹it', + 'CancelForcedAlarm' => 'Zastavit spu¹tìný alarm', + 'CaptureHeight' => 'Vý¹ka zdrojového snímku', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Paleta zdrojového snímku', + 'CaptureWidth' => '©íøka zdrojového snímku', + 'Cause' => 'Pøíèina', + 'CheckMethod' => 'Metoda znaèkování alarmem', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Vybrat filtr', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Zavøít', + 'Colour' => 'Barva', + 'Command' => 'Pøíkaz', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Nastavení', + 'ConfiguredFor' => 'Nastaveno pro', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Potvrdit heslo', + 'ConjAnd' => 'a', + 'ConjOr' => 'nebo', + 'Console' => 'Konzola', + 'ContactAdmin' => 'Pro detailní info kontaktujte Va¹eho administrátora.', + 'Continue' => 'Pokraèovat', + 'Contrast' => 'Kontrast', + 'Control' => 'Øízení', + 'ControlAddress' => 'Adresa øízení', + 'ControlCap' => 'Schopnosti øízení', + 'ControlCaps' => 'Typy øízení', + 'ControlDevice' => 'Zaøízení øízení', + 'ControlType' => 'Typ øízení', + 'Controllable' => 'Øíditelná', + 'Cycle' => 'Cyklus', + 'CycleWatch' => 'Cyklické prohlí¾ení', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Den', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Pøednastavená velikost', + 'DefaultView' => 'Default View', + 'Delete' => 'Smazat', + 'DeleteAndNext' => 'Smazat & Dal¹í', + 'DeleteAndPrev' => 'Smazat & Pøedchozí', + 'DeleteSavedFilter' => 'Smazat filtr', + 'Description' => 'Popis', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Kanál zaøízení', + 'DeviceFormat' => 'Formát zaøízení', + 'DeviceNumber' => 'Èíslo zarízení', + 'DevicePath' => 'Cesta k zaøízení', + 'Devices' => 'Devices', + 'Dimensions' => 'Rozmìry', + 'DisableAlarms' => 'Zakázat alarmy', + 'Disk' => 'Disk', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Prosím podpoøte', + 'DonateAlready' => 'Ne, u¾ jsem podpoøil', + 'DonateEnticement' => 'Ji¾ nìjakou dobu pou¾íváte software ZoneMinder k ochranì svého majetku a pøedpokládám, ¾e jej shledáváte u¾iteèným. Pøesto¾e je ZoneMinder, znovu pøipomínám, zdarma a volnì ¹íøený software, stojí jeho vývoj a podpora nìjaké peníze. Pokud byste chtìl/a podpoøit budoucí vývoj a nové mo¾nosti softwaru, prosím zva¾te darování finanèní pomoci. Darování je, samozøejmì, dobrovolné, ale zato velmi cenìné mù¾ete pøispìt jakou èástkou chcete.

Pokud máte zájem podpoøit ná¹ tým, prosím, vyberte ní¾e uvedenou mo¾nost, nebo nav¹tivte http://www.zoneminder.com/donate.html.

Dìkuji Vám ¾e jste si vybral/a software ZoneMinder a nezapomeòte nav¹tívit fórum na ZoneMinder.com pro podporu a návrhy jak udìlat ZoneMinder je¹tì lep¹ím ne¾ je dnes.', + 'DonateRemindDay' => 'Nyní ne, pøipomenout za 1 den', + 'DonateRemindHour' => 'Nyní ne, pøipomenout za hodinu', + 'DonateRemindMonth' => 'Nyní ne, pøipomenout za mìsíc', + 'DonateRemindNever' => 'Ne, nechci podpoøit ZoneMinder, nepøipomínat', + 'DonateRemindWeek' => 'Nyní ne, pøipomenout za týden', + 'DonateYes' => 'Ano, chcit podpoøit ZoneMinder nyní', + 'Download' => 'Stáhnout', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Prùbìh', + 'Edit' => 'Editovat', + 'Email' => 'Email', + 'EnableAlarms' => 'Povolit alarmy', + 'Enabled' => 'Povoleno', + 'EnterNewFilterName' => 'Zadejte nové jméno filtru', + 'Error' => 'Chyba', + 'ErrorBrackets' => 'Chyba, zkontrolujte prosím závorky', + 'ErrorValidValue' => 'Chyba, zkontrolujte ¾e podmínky mají správné hodnoty', + 'Etc' => 'atd', + 'Event' => 'Záznam', + 'EventFilter' => 'Filtr záznamù', + 'EventId' => 'Id záznamu', + 'EventName' => 'Jméno záznamu', + 'EventPrefix' => 'Prefix záznamu', + 'Events' => 'Záznamy', + 'Exclude' => 'Vyjmout', + 'Execute' => 'Execute', + 'Export' => 'Exportovat', + 'ExportDetails' => 'Exportovat detaily záznamu', + 'ExportFailed' => 'Chyba pøi exportu', + 'ExportFormat' => 'Formát exportovaného souboru', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Exportovat detaily snímku', + 'ExportImageFiles' => 'Exportovat obrazové soubory', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Exportovat ostatní soubory (jestli existují)', + 'ExportOptions' => 'Mo¾nosti exportu', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Exportovat video soubory (jestli existují)', + 'Exporting' => 'Exportuji', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS Interval pro report', + 'FTP' => 'FTP', + 'Far' => 'Daleko', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Nasytit', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'Soubor', + 'FilterArchiveEvents' => 'Archivovat v¹echny nalezené', + 'FilterDeleteEvents' => 'Smazat v¹echny nalezené', + 'FilterEmailEvents' => 'Poslat email s detaily nalezených', + 'FilterExecuteEvents' => 'Spustit pøíkaz na v¹ech nalezených', + 'FilterMessageEvents' => 'Podat zprávu o v¹ech nalezených', + 'FilterPx' => 'Filtr Px', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Uploadovat nalezené', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filtry', + 'First' => 'První', + 'FlippedHori' => 'Pøeklopený vodorovnì', + 'FlippedVert' => 'Pøeklopený svisle', + 'Focus' => 'Zaostøení', + 'ForceAlarm' => 'Spustit alarm', + 'Format' => 'Formát', + 'Frame' => 'Snímek', + 'FrameId' => 'Snímek Id', + 'FrameRate' => 'Rychlost snímkù', + 'FrameSkip' => 'Vynechat snímek', + 'Frames' => 'Snímky', + 'Func' => 'Funkce', + 'Function' => 'Funkce', + 'Gain' => 'Zisk', + 'General' => 'General', + 'GenerateVideo' => 'Generovat video', + 'GeneratingVideo' => 'Generuji video', + 'GoToZoneMinder' => 'Jít na ZoneMinder.com', + 'Grey' => '©edá', + 'Group' => 'Group', + 'Groups' => 'Skupiny', + 'HasFocusSpeed' => 'Má rychlost zaostøení', + 'HasGainSpeed' => 'Má rychlost zisku', + 'HasHomePreset' => 'Má Home volbu', + 'HasIrisSpeed' => 'Má rychlost irisu', + 'HasPanSpeed' => 'Má rychlost otáèení', + 'HasPresets' => 'Má pøedvolby', + 'HasTiltSpeed' => 'Má rychlost náklonu', + 'HasTurboPan' => 'Má Turbo otáèení', + 'HasTurboTilt' => 'Má Turbo náklon', + 'HasWhiteSpeed' => 'Má rychlost vyvá¾ení bílé', + 'HasZoomSpeed' => 'Má rychlost zoomu', + 'High' => 'Rychlá', + 'HighBW' => 'Rychlá B/W', + 'Home' => 'Domù', + 'Hour' => 'Hodina', + 'Hue' => 'Odstín', + 'Id' => 'Id', + 'Idle' => 'Pøipraven', + 'Ignore' => 'Ignorovat', + 'Image' => 'Obraz', + 'ImageBufferSize' => 'Velikost buferu snímkù', + 'Images' => 'Images', + 'In' => 'Dovnitø', + 'Include' => 'Vlo¾it', + 'Inverted' => 'Pøevrácenì', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Jazyk', + 'Last' => 'Poslední', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'výsledkù', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Zobrazit pouze prvních', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'Seznam', + 'Load' => 'Load', + 'Local' => 'Lokální', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Pøihlá¹en jako', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Pøihla¹uji', + 'Login' => 'Pøihlásit', + 'Logout' => 'Odhlásit', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Pomalá', + 'LowBW' => 'Pomalá B/W', + 'Main' => 'Hlavní', + 'Man' => 'Man', + 'Manual' => 'Manuál', + 'Mark' => 'Oznaèit', + 'Max' => 'Max', + 'MaxBandwidth' => 'Max bandwidth', + 'MaxBrScore' => 'Max.
skóre', + 'MaxFocusRange' => 'Max rozsah zaostøení', + 'MaxFocusSpeed' => 'Max rychlost zaostøení', + 'MaxFocusStep' => 'Max krok zaostøení', + 'MaxGainRange' => 'Max rozsah zisku', + 'MaxGainSpeed' => 'Max rychlost zisku', + 'MaxGainStep' => 'Max krok zisku', + 'MaxIrisRange' => 'Max rozsah iris', + 'MaxIrisSpeed' => 'Max rychlost iris', + 'MaxIrisStep' => 'Max krok iris', + 'MaxPanRange' => 'Max rozsah otáèení', + 'MaxPanSpeed' => 'Max rychlost otáèení', + 'MaxPanStep' => 'Max krok otáèení', + 'MaxTiltRange' => 'Max rozsah náklonu', + 'MaxTiltSpeed' => 'Max rychlost náklonu', + 'MaxTiltStep' => 'Max krok náklonu', + 'MaxWhiteRange' => 'Max rozsah vyvá¾ení bílé', + 'MaxWhiteSpeed' => 'Max rychlost vyvá¾ení bílé', + 'MaxWhiteStep' => 'Max krok vyvá¾ení bílé', + 'MaxZoomRange' => 'Max rozsah zoomu', + 'MaxZoomSpeed' => 'Max rychlost zoomu', + 'MaxZoomStep' => 'Max krok zoomu', + 'MaximumFPS' => 'Maximum FPS', + 'Medium' => 'Støední', + 'MediumBW' => 'Støední B/W', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Minimum znaèkované oblasti by mìlo být men¹í ne¾ maximum', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Minimum znaèek by mìlo být men¹í ne¾ maximum', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min rozsah zaostøení', + 'MinFocusSpeed' => 'Min rychlost zaostøení', + 'MinFocusStep' => 'Min krok zaostøení', + 'MinGainRange' => 'Min rozsah zisku', + 'MinGainSpeed' => 'Min rychlost zisku', + 'MinGainStep' => 'Min krok zisku', + 'MinIrisRange' => 'Min rozsah iris', + 'MinIrisSpeed' => 'Min rychlost iris', + 'MinIrisStep' => 'Min krok iris', + 'MinPanRange' => 'Min rozsah otáèení', + 'MinPanSpeed' => 'Min rychlost otáèení', + 'MinPanStep' => 'Min krok otáèení', + 'MinPixelThresLtMax' => 'Minimální práh pixelu by mìl být men¹í ne¾ maximumální', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min rozsah náklonu', + 'MinTiltSpeed' => 'Min rychlost náklonu', + 'MinTiltStep' => 'Min krok náklonu', + 'MinWhiteRange' => 'Min rozsah vyvá¾ení bílé', + 'MinWhiteSpeed' => 'Min rychlost vyvá¾ení bílé', + 'MinWhiteStep' => 'Min krok vyvá¾ení bílé', + 'MinZoomRange' => 'Min rozsah zoomu', + 'MinZoomSpeed' => 'Min rychlost zoomu', + 'MinZoomStep' => 'Min krok zoomu', + 'Misc' => 'Ostatní', + 'Monitor' => 'Kamera', + 'MonitorIds' => 'Id kamer', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Kamery', + 'Montage' => 'Sestøih', + 'Month' => 'Mìsíc', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Pohyb', + 'MustBeGe' => 'musí být vìt¹í nebo rovno ne¾', + 'MustBeLe' => 'musí být men¹í nebo rovno ne¾', + 'MustConfirmPassword' => 'Musíte potvrdit heslo', + 'MustSupplyPassword' => 'Musíte zadat heslo', + 'MustSupplyUsername' => 'Musíte zadat u¾ivatelské jméno', + 'Name' => 'Jméno', + 'Near' => 'Blízko', + 'Network' => 'Sí»', + 'New' => 'Nový', + 'NewGroup' => 'Nová skupina', + 'NewLabel' => 'New Label', + 'NewPassword' => 'Nové heslo', + 'NewState' => 'Nový stav', + 'NewUser' => 'Nový u¾ivatel', + 'Next' => 'Dal¹í', + 'No' => 'Ne', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Pro tento snímek nejsou ¾ádné záznamy', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => '®ádné ulo¾ené filtry', + 'NoStatisticsRecorded' => 'Pro tento záznam/snímek nejsou zaznamenány ¾ádné statistiky', + 'None' => 'Zakázat', + 'NoneAvailable' => '®ádná není dostupná', + 'Normal' => 'Normalní', + 'Notes' => 'Poznámky', + 'NumPresets' => 'Poèet pøedvoleb', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'rovno', + 'OpGt' => 'vìt¹í', + 'OpGtEq' => 'vìt¹í nebo rovno', + 'OpIn' => 'nin set', + 'OpLt' => 'men¹í', + 'OpLtEq' => 'men¹í nebo rovno', + 'OpMatches' => 'obsahuje', + 'OpNe' => 'nerovná se', + 'OpNotIn' => 'nnot in set', + 'OpNotMatches' => 'neobsahuje', + 'Open' => 'Otevøít', + 'OptionHelp' => 'Mo¾nostHelp', + 'OptionRestartWarning' => 'Tyto zmìny se neprojeví\ndokud systém bì¾í. Jakmile\ndokonèíte provádìní zmìn prosím\nrestartujte ZoneMinder.', + 'Options' => 'Mo¾nosti', + 'OrEnterNewName' => 'nebo vlo¾te nové jméno', + 'Order' => 'Poøadí', + 'Orientation' => 'Orientace', + 'Out' => 'Ven', + 'OverwriteExisting' => 'Pøepsat existující', + 'Paged' => 'Strákovì', + 'Pan' => 'Otáèení', + 'PanLeft' => 'Posunout vlevo', + 'PanRight' => 'Posunout vpravo', + 'PanTilt' => 'Otáèení/Náklon', + 'Parameter' => 'Parametr', + 'Password' => 'Heslo', + 'PasswordsDifferent' => 'Hesla se neshodují', + 'Paths' => 'Cesty', + 'Pause' => 'Pause', + 'Phone' => 'Modem', + 'PhoneBW' => 'Modem B/W', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pixely', + 'Play' => 'Play', + 'PlayAll' => 'Pøehrát v¹e', + 'PleaseWait' => 'Prosím èekejte', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'Pozáznamový bufer', + 'PreEventImageBuffer' => 'Pøedzáznamový bufer', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Pøedvolba', + 'Presets' => 'Pøedvolby', + 'Prev' => 'Zpìt', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Rychlost', + 'Real' => 'Skuteèná', + 'Record' => 'Nahrávat', + 'RefImageBlendPct' => 'Reference Image Blend %ge', + 'Refresh' => 'Obnovit', + 'Remote' => 'Sí»ová', + 'RemoteHostName' => 'Adresa', + 'RemoteHostPath' => 'Cesta', + 'RemoteHostPort' => 'Port', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Barvy', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Pøejmenovat', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => 'Resetovat poèty záznamù', + 'Restart' => 'Restartovat', + 'Restarting' => 'Restartuji', + 'RestrictedCameraIds' => 'Povolené id kamer', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Prodleva vracení', + 'ReturnLocation' => 'Lokace vrácení', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Otoèit vlevo', + 'RotateRight' => 'Otoèit vpravo', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Re¾im', + 'RunState' => 'Stav', + 'Running' => 'Bì¾í', + 'Save' => 'Ulo¾it', + 'SaveAs' => 'Ulo¾it jako', + 'SaveFilter' => 'Ulo¾it filtr', + 'Scale' => 'Velikost', + 'Score' => 'Skóre', + 'Secs' => 'Délka(s)', + 'Sectionlength' => 'Délka sekce', + 'Select' => 'Vybrat', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Nastavit', + 'SetNewBandwidth' => 'Nastavit novou rychlost sítì', + 'SetPreset' => 'Nastavit pøedvolbu', + 'Settings' => 'Nastavení', + 'ShowFilterWindow' => 'Zobrazit filtr', + 'ShowTimeline' => 'Zobrazit èasovou linii ', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Velikost', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Spát', + 'SortAsc' => 'Vzestupnì', + 'SortBy' => 'Øadit dle', + 'SortDesc' => 'Sestupnì', + 'Source' => 'Zdroj', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Typ zdroje', + 'Speed' => 'Rychlost', + 'SpeedHigh' => 'Vysoká rychlost', + 'SpeedLow' => 'Nízká rychlost', + 'SpeedMedium' => 'Støední rychlost', + 'SpeedTurbo' => 'Turbo rychlost', + 'Start' => 'Start', + 'State' => 'Stav', + 'Stats' => 'Statistiky', + 'Status' => 'Status', + 'Step' => 'Krok', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Velký krok', + 'StepMedium' => 'Støední krok', + 'StepNone' => '®ádný krok', + 'StepSmall' => 'Malý krok', + 'Stills' => 'Snímky', + 'Stop' => 'Zastavit', + 'Stopped' => 'Zastaven', + 'Stream' => 'Stream', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Potvrdit', + 'System' => 'System', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Pøiblí¾it', + 'Thumbnail' => 'Miniatura', + 'Tilt' => 'Náklon', + 'Time' => 'Èas', + 'TimeDelta' => 'Delta èasu', + 'TimeStamp' => 'Èasové razítko', + 'Timeline' => 'Èasová linie', + 'Timestamp' => 'Razítko', + 'TimestampLabelFormat' => 'Formát èasového razítka', + 'TimestampLabelX' => 'Èasové razítko X', + 'TimestampLabelY' => 'Èasové razítko Y', + 'Today' => 'Dnes', + 'Tools' => 'Nástroje', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Celkové
skóre', + 'TrackDelay' => 'Prodleva dráhy', + 'TrackMotion' => 'Pohyb po dráze', + 'Triggers' => 'Trigery', + 'TurboPanSpeed' => 'Rychlost Turbo otáèení', + 'TurboTiltSpeed' => 'Rychlost Turbo náklonu', + 'Type' => 'Typ', + 'Unarchive' => 'Vyjmout z archivu', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Jednotky', + 'Unknown' => 'Neznámý', + 'Update' => 'Update', + 'UpdateAvailable' => 'Je dostupný nový update ZoneMinder.', + 'UpdateNotNecessary' => 'Update není potøeba.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Pou¾ít filtr', + 'UseFilterExprsPost' => ' výrazù', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Pou¾ít ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'U¾ivatel', + 'Username' => 'U¾ivatelské jméno', + 'Users' => 'U¾ivatelé', + 'Value' => 'Hodnota', + 'Version' => 'Verze', + 'VersionIgnore' => 'Ignorovat tuto verzi', + 'VersionRemindDay' => 'Pøipomenout za 1 den', + 'VersionRemindHour' => 'Pøipomenout za hodinu', + 'VersionRemindNever' => 'Nepøipomínat nové veze', + 'VersionRemindWeek' => 'Pøipomenout za týden', + 'Video' => 'Video', + 'VideoFormat' => 'Video formát', + 'VideoGenFailed' => 'Chyba pøi generování videa!', + 'VideoGenFiles' => 'Existující video soubory', + 'VideoGenNoFiles' => '®ádné video soubory nenalezeny', + 'VideoGenParms' => 'Parametry generování videa', + 'VideoGenSucceeded' => 'Video vygenerováno úspì¹nì!', + 'VideoSize' => 'Velikost videa', + 'View' => 'Zobrazit', + 'ViewAll' => 'Zobrazit v¹echny', + 'ViewEvent' => 'Zobrazit záznam', + 'ViewPaged' => 'Zobrazit strákovì', + 'Wake' => 'Vzbudit', + 'WarmupFrames' => 'Zahøívací snímky', + 'Watch' => 'Sledovat', + 'Web' => 'Web', + 'WebColour' => 'Webová barva', + 'Week' => 'Týden', + 'White' => 'Bílá', + 'WhiteBalance' => 'Vyvá¾ení bílé', + 'Wide' => 'Oddálit', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 aktivaèní øetìzec', + 'X10InputAlarmString' => 'X10 input alarm øetìzec', + 'X10OutputAlarmString' => 'X10 output alarm øetìzec', + 'Y' => 'Y', + 'Yes' => 'Ano', + 'YouNoPerms' => 'K tomuto zdroji nemáte oprávnìní.', + 'Zone' => 'Zóna', + 'ZoneAlarmColour' => 'Barva alarmu (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zóny', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zvìt¹it', + 'ZoomOut' => 'Zmen¹it', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Právì je pøihlá¹en \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Posledních %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'Poslední verze je v%1$s, vy máte v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Funkce %1$s kamery', + 'RunningRecentVer' => 'Pou¾íváte poslední verzi ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Záznamù', 1=>'Záznam', 2=>'Záznamy', 5=>'Záznamù' ), + 'Monitor' => array( 0=>'Kamer', 1=>'Kamera', 2=>'Kamery', 5=>'Kamer' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/de_de.php b/web/lang/de_de.php index 1e179cf0e..219ec2b82 100644 --- a/web/lang/de_de.php +++ b/web/lang/de_de.php @@ -264,6 +264,7 @@ $SLANG = array( 'DonateRemindNever' => 'Nein, ich möchte nicht spenden, niemals erinnern.', 'DonateRemindWeek' => 'Noch nicht, erinnere mich in einer Woche noch mal.', 'DonateYes' => 'Ja, ich möchte jetzt spenden.', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Dauer', @@ -527,6 +528,7 @@ $SLANG = array( 'Play' => 'Abspielen', 'PlayAll' => 'Alle zeigen', 'PleaseWait' => 'Bitte warten', + 'Plugins' => 'Plugins', 'Point' => 'Punkt', 'PostEventImageBuffer' => 'Nachereignispuffer', 'PreEventImageBuffer' => 'Vorereignispuffer', @@ -652,6 +654,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Es ist keine Aktualisierung verfügbar.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Benutze Filter', 'UseFilterExprsPost' => ' Filter Ausdrücke', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Benutze ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/de_de.php.orig b/web/lang/de_de.php.orig new file mode 100644 index 000000000..1e179cf0e --- /dev/null +++ b/web/lang/de_de.php.orig @@ -0,0 +1,846 @@ + '24-Bit-Farbe', + '32BitColour' => '32-Bit-Farbe', // Added - 2011-06-15 + '8BitGrey' => '8-Bit-Grau', + 'Action' => 'Aktion', + 'Actual' => 'Original', + 'AddNewControl' => 'Neues Kontrollelement hinzufügen', + 'AddNewMonitor' => 'Neuer Monitor', + 'AddNewUser' => 'Neuer Benutzer', + 'AddNewZone' => 'Neue Zone', + 'Alarm' => 'Alarm', + 'AlarmBrFrames' => 'Alarm-
Bilder', + 'AlarmFrame' => 'Alarm-Bilder', + 'AlarmFrameCount' => 'Alarm-Bildanzahl', + 'AlarmLimits' => 'Alarm-Limits', + 'AlarmMaximumFPS' => 'Alarm-Maximum-FPS', + 'AlarmPx' => 'Alarm-Pixel', + 'AlarmRGBUnset' => 'Sie müssen eine RGB-Alarmfarbe setzen', + 'Alert' => 'Alarm', + 'All' => 'Alle', + 'Apply' => 'OK', + 'ApplyingStateChange' => 'Aktiviere neuen Status', + 'ArchArchived' => 'Nur Archivierte', + 'ArchUnarchived' => 'Nur Nichtarchivierte', + 'Archive' => 'Archivieren', + 'Archived' => 'Archivierte', + 'Area' => 'Bereich', + 'AreaUnits' => 'Bereich (px/%)', + 'AttrAlarmFrames' => 'Alarmbilder', + 'AttrArchiveStatus' => 'Archivstatus', + 'AttrAvgScore' => 'Mittlere Punktzahl', + 'AttrCause' => 'Grund', + 'AttrDate' => 'Datum', + 'AttrDateTime' => 'Datum/Zeit', + 'AttrDiskBlocks' => 'Disk-Bloecke', + 'AttrDiskPercent' => 'Disk-Prozent', + 'AttrDuration' => 'Dauer', + 'AttrFrames' => 'Bilder', + 'AttrId' => 'ID', + 'AttrMaxScore' => 'Maximale Punktzahl', + 'AttrMonitorId' => 'Monitor-ID', + 'AttrMonitorName' => 'Monitorname', + 'AttrName' => 'Name', + 'AttrNotes' => 'Bemerkungen', + 'AttrSystemLoad' => 'Systemlast', + 'AttrTime' => 'Zeit', + 'AttrTotalScore' => 'Totale Punktzahl', + 'AttrWeekday' => 'Wochentag', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto-Stopp-Zeitüberschreitung', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'Mittlere
Punktzahl', + 'Background' => 'Hintergrund', + 'BackgroundFilter' => 'Filter im Hintergrund laufen lassen', + 'BadAlarmFrameCount' => 'Die Bildanzahl muss ganzzahlig 1 oder größer sein', + 'BadAlarmMaxFPS' => 'Alarm-Maximum-FPS muss eine positive Ganzzahl oder eine Gleitkommazahl sein', + 'BadChannel' => 'Der Kanal muss ganzzahlig 0 oder größer sein', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Das Gerät muss eine gültige Systemresource sein', + 'BadFPSReportInterval' => 'Der FPS-Intervall-Puffer-Zähler muss ganzzahlig 0 oder größer sein', + 'BadFormat' => 'Das Format muss ganzzahlig 0 oder größer sein', + 'BadFrameSkip' => 'Der Auslasszähler für Frames muss ganzzahlig 0 oder größer sein', + 'BadHeight' => 'Die Höhe muss auf einen gültigen Wert eingestellt sein', + 'BadHost' => 'Der Host muss auf eine gültige IP-Adresse oder einen Hostnamen (ohne http://) eingestellt sein', + 'BadImageBufferCount' => 'Die Größe des Bildpuffers muss ganzzahlig 10 oder größer sein', + 'BadLabelX' => 'Die x-Koordinate der Bezeichnung muss ganzzahlig 0 oder größer sein', + 'BadLabelY' => 'Die y-Koordinate der Bezeichnung muss ganzzahlig 0 oder größer sein', + 'BadMaxFPS' => 'Maximum-FPS muss eine positive Ganzzahl oder eine Gleitkommazahl sein', + 'BadNameChars' => 'Namen dürfen nur aus Buchstaben, Zahlen und Trenn- oder Unterstrichen bestehen', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Der Pfad muss auf einen gültigen Wert eingestellt sein', + 'BadPort' => 'Der Port muss auf eine gültige Zahl eingestellt sein', + 'BadPostEventCount' => 'Der Zähler für die Ereignisfolgebilder muss ganzzahlig 0 oder größer sein', + 'BadPreEventCount' => 'Der Zähler für die Ereignisvorlaufbilder muss mindestens ganzzahlig 0 und kleiner als die Bildpuffergröße sein', + 'BadRefBlendPerc' => 'Der Referenz-Blenden-Prozentwert muss ganzzahlig 0 oder größer sein', + 'BadSectionLength' => 'Die Bereichslänge muss ganzzahlig 0 oder größer sein', + 'BadSignalCheckColour' => 'Die Signalprüffarbe muss auf einen gültigen Farbwert eingestellt sein', + 'BadStreamReplayBuffer'=> 'Der Wiedergabestrompuffer tream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Die Anzahl der Vorwärmbilder muss ganzzahlig 0 oder größer sein', + 'BadWebColour' => 'Die Webfarbe muss auf einen gültigen Farbwert eingestellt sein', + 'BadWidth' => 'Die Breite muss auf einen gültigen Wert eingestellt sein', + 'Bandwidth' => 'Bandbreite', + 'BlobPx' => 'Blob-Pixel', + 'BlobSizes' => 'Blobgröße', + 'Blobs' => 'Blobs', + 'Brightness' => 'Helligkeit', + 'Buffers' => 'Puffer', + 'CanAutoFocus' => 'Kann Autofokus', + 'CanAutoGain' => 'Kann Auto-Verstärkung', + 'CanAutoIris' => 'Kann Auto-Iris', + 'CanAutoWhite' => 'Kann Auto-Weiß-Abgleich', + 'CanAutoZoom' => 'Kann Auto-Zoom', + 'CanFocus' => 'Kann Fokus', + 'CanFocusAbs' => 'Kann absoluten Fokus', + 'CanFocusCon' => 'Kann kontinuierlichen Fokus', + 'CanFocusRel' => 'Kann relativen Fokus', + 'CanGain' => 'Kann Verstärkung', + 'CanGainAbs' => 'Kann absolute Verstärkung', + 'CanGainCon' => 'Kann kontinuierliche Verstärkung', + 'CanGainRel' => 'Kann relative Verstäkung', + 'CanIris' => 'Kann Iris', + 'CanIrisAbs' => 'Kann absolute Iris', + 'CanIrisCon' => 'Kann kontinuierliche Iris', + 'CanIrisRel' => 'Kann relative Iris', + 'CanMove' => 'Kann Bewegung', + 'CanMoveAbs' => 'Kann absolute Bewegung', + 'CanMoveCon' => 'Kann kontinuierliche Bewegung', + 'CanMoveDiag' => 'Kann diagonale Bewegung', + 'CanMoveMap' => 'Kann Mapped-Bewegung', + 'CanMoveRel' => 'Kann relative Bewegung', + 'CanPan' => 'Kann Pan' , + 'CanReset' => 'Kann Reset', + 'CanSetPresets' => 'Kann Voreinstellungen setzen', + 'CanSleep' => 'Kann Sleep', + 'CanTilt' => 'Kann Neigung', + 'CanWake' => 'Kann Wake', + 'CanWhite' => 'Kann Weiß-Abgleich', + 'CanWhiteAbs' => 'Kann absoluten Weiß-Abgleich', + 'CanWhiteBal' => 'Kann Weiß-Abgleich', + 'CanWhiteCon' => 'Kann kontinuierlichen Weiß-Abgleich', + 'CanWhiteRel' => 'Kann relativen Weiß-Abgleich', + 'CanZoom' => 'Kann Zoom', + 'CanZoomAbs' => 'Kann absoluten Zoom', + 'CanZoomCon' => 'Kann kontinuierlichen Zoom', + 'CanZoomRel' => 'Kann relativen Zoom', + 'Cancel' => 'Abbruch', + 'CancelForcedAlarm' => 'Abbruch des unbedingten Alarms', + 'CaptureHeight' => 'Erfasse Höhe', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Erfasse Farbpalette', + 'CaptureWidth' => 'Erfasse Breite', + 'Cause' => 'Grund', + 'CheckMethod' => 'Alarm-Prüfmethode', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Filterauswahl', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Voreinstellung auswählen', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Schließen', + 'Colour' => 'Farbe', + 'Command' => 'Kommando', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Konfig.', + 'ConfiguredFor' => 'Konfiguriert für', + 'ConfirmDeleteEvents' => 'Sind Sie sicher, dass Sie die ausgewählten Ereignisse löschen wollen?', + 'ConfirmPassword' => 'Passwortbestätigung', + 'ConjAnd' => 'und', + 'ConjOr' => 'oder', + 'Console' => 'Konsole', + 'ContactAdmin' => 'Bitte kontaktieren Sie den Administrator für weitere Details', + 'Continue' => 'Weiter', + 'Contrast' => 'Kontrast', + 'Control' => 'Kontrolle', + 'ControlAddress' => 'Kontrolladresse', + 'ControlCap' => 'Kontrollmöglichkeit', + 'ControlCaps' => 'Kontrollmöglichkeiten', + 'ControlDevice' => 'Kontrollgerät', + 'ControlType' => 'Kontrolltyp', + 'Controllable' => 'Kontrollierbar', + 'Cycle' => 'Zyklus', + 'CycleWatch' => 'Zeitzyklus', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Tag', + 'Debug' => 'Debug', + 'DefaultRate' => 'Standardrate', + 'DefaultScale' => 'Standardskalierung', + 'DefaultView' => 'Standardansicht', + 'Delete' => 'Löschen', + 'DeleteAndNext' => 'Löschen & Nächstes', + 'DeleteAndPrev' => 'Löschen & Vorheriges', + 'DeleteSavedFilter' => 'Lösche gespeichertes Filter', + 'Description' => 'Beschreibung', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Gerätekanal', + 'DeviceFormat' => 'Geräteformat', + 'DeviceNumber' => 'Gerätenummer', + 'DevicePath' => 'Gerätepfad', + 'Devices' => 'Geräte', + 'Dimensions' => 'Abmessungen', + 'DisableAlarms' => 'Alarme abschalten', + 'Disk' => 'Disk', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Bitte spenden Sie.', + 'DonateAlready' => 'Nein, ich habe schon gespendet', + 'DonateEnticement' => 'Sie benutzen ZoneMinder nun schon eine Weile und es ist hoffentlich eine nützliche Applikation zur Verbesserung Ihrer Heim- oder Arbeitssicherheit. Obwohl ZoneMinder eine freie Open-Source-Software ist und bleiben wird, entstehen Kosten bei der Entwicklung und dem Support.

Falls Sie ZoneMinder für Weiterentwicklung in der Zukunft unterstützen möchten, denken Sie bitte über eine Spende für das Projekt unter der Webadresse http://www.zoneminder.com/donate.html oder über nachfolgend stehende Option nach. Spenden sind, wie der Name schon sagt, immer freiwillig. Dem Projekt helfen kleine genauso wie größere Spenden sehr weiter und ein herzlicher Dank ist jedem Spender sicher.

Vielen Dank dafür, dass sie ZoneMinder benutzen. Vergessen Sie nicht die Foren unter ZoneMinder.com, um Support zu erhalten und Ihre Erfahrung mit ZoneMinder zu verbessern!', + 'DonateRemindDay' => 'Noch nicht, erinnere mich in einem Tag noch mal.', + 'DonateRemindHour' => 'Noch nicht, erinnere mich in einer Stunde noch mal.', + 'DonateRemindMonth' => 'Noch nicht, erinnere mich in einem Monat noch mal.', + 'DonateRemindNever' => 'Nein, ich möchte nicht spenden, niemals erinnern.', + 'DonateRemindWeek' => 'Noch nicht, erinnere mich in einer Woche noch mal.', + 'DonateYes' => 'Ja, ich möchte jetzt spenden.', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Dauer', + 'Edit' => 'Bearbeiten', + 'Email' => 'E-Mail', + 'EnableAlarms' => 'Alarme aktivieren', + 'Enabled' => 'Aktiviert', + 'EnterNewFilterName' => 'Neuen Filternamen eingeben', + 'Error' => 'Fehler', + 'ErrorBrackets' => 'Fehler. Bitte nur gleiche Anzahl offener und geschlossener Klammern.', + 'ErrorValidValue' => 'Fehler. Bitte alle Werte auf richtige Eingabe prüfen', + 'Etc' => 'etc.', + 'Event' => 'Ereignis', + 'EventFilter' => 'Ereignisfilter', + 'EventId' => 'Ereignis-ID', + 'EventName' => 'Ereignisname', + 'EventPrefix' => 'Ereignis-Präfix', + 'Events' => 'Ereignisse', + 'Exclude' => 'Ausschluss;', + 'Execute' => 'Ausführen', + 'Export' => 'Exportieren', + 'ExportDetails' => 'Exportiere Ereignis-Details', + 'ExportFailed' => 'Exportieren fehlgeschlagen', + 'ExportFormat' => 'Exportiere Dateiformat', + 'ExportFormatTar' => 'TAR (Bandarchiv)', + 'ExportFormatZip' => 'ZIP (Komprimiert)', + 'ExportFrames' => 'Exportiere Bilddetails', + 'ExportImageFiles' => 'Exportiere Bilddateien', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Exportiere andere Dateien (falls vorhanden)', + 'ExportOptions' => 'Exportierungsoptionen', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Exportiere Videodateien (falls vorhanden)', + 'Exporting' => 'Exportiere', + 'FPS' => 'fps', + 'FPSReportInterval' => 'fps-Meldeintervall', + 'FTP' => 'FTP', + 'Far' => 'Weit', + 'FastForward' => 'Schnell vorwärts', + 'Feed' => 'Eingabe', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'Datei', + 'FilterArchiveEvents' => 'Archivierung aller Treffer', + 'FilterDeleteEvents' => 'Löschen aller Treffer', + 'FilterEmailEvents' => 'Detaillierte E-Mail zu allen Treffern', + 'FilterExecuteEvents' => 'Ausführen bei allen Treffern', + 'FilterMessageEvents' => 'Detaillierte Nachricht zu allen Treffern', + 'FilterPx' => 'Filter-Pixel', + 'FilterUnset' => 'Sie müssen eine Breite und Höhe für das Filter angeben', + 'FilterUploadEvents' => 'Hochladen aller Treffer', + 'FilterVideoEvents' => 'Video für alle Treffer erstellen', + 'Filters' => 'Filter', + 'First' => 'Erstes', + 'FlippedHori' => 'Horizontal gespiegelt', + 'FlippedVert' => 'Vertikal gespiegelt', + 'Focus' => 'Fokus', + 'ForceAlarm' => 'Unbedingter Alarm', + 'Format' => 'Format', + 'Frame' => 'Bild', + 'FrameId' => 'Bild-ID', + 'FrameRate' => 'Abspielgeschwindigkeit', + 'FrameSkip' => 'Bilder auslassen', + 'Frames' => 'Bilder', + 'Func' => 'Fkt.', + 'Function' => 'Funktion', + 'Gain' => 'Verstärkung', + 'General' => 'Allgemeines', + 'GenerateVideo' => 'Erzeuge Video', + 'GeneratingVideo' => 'Erzeuge Video...', + 'GoToZoneMinder' => 'Gehe zu ZoneMinder.com', + 'Grey' => 'Grau', + 'Group' => 'Gruppe', + 'Groups' => 'Gruppen', + 'HasFocusSpeed' => 'Hat Fokus-Geschwindigkeit', + 'HasGainSpeed' => 'Hat Verstäkungs-Geschwindigkeit', + 'HasHomePreset' => 'Hat Standardvoreinstellungen', + 'HasIrisSpeed' => 'Hat Irisgeschwindigkeit', + 'HasPanSpeed' => 'Hat Pan-Geschwindigkeit', + 'HasPresets' => 'Hat Voreinstellungen', + 'HasTiltSpeed' => 'Hat Neigungsgeschwindigkeit', + 'HasTurboPan' => 'Hat Turbo-Pan', + 'HasTurboTilt' => 'Hat Turbo-Neigung', + 'HasWhiteSpeed' => 'Hat Weiß-Abgleichgeschwindigkeit', + 'HasZoomSpeed' => 'Hat Zoom-Geschwindigkeit', + 'High' => 'hohe', + 'HighBW' => 'Hohe B/W', + 'Home' => 'Home', + 'Hour' => 'Stunde', + 'Hue' => 'Farbton', + 'Id' => 'ID', + 'Idle' => 'Leerlauf', + 'Ignore' => 'Ignoriere', + 'Image' => 'Bild', + 'ImageBufferSize' => 'Bildpuffergröße', + 'Images' => 'Bilder', + 'In' => 'In', + 'Include' => 'Einschluss', + 'Inverted' => 'Invertiert', + 'Iris' => 'Iris', + 'KeyString' => 'Schlüsselwort', + 'Label' => 'Bezeichnung', + 'Language' => 'Sprache', + 'Last' => 'Letztes', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'Ergebnisse;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Begrenze nur auf die ersten', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Verbundene Monitore', + 'List' => 'Liste', + 'Load' => 'Last', + 'Local' => 'Lokal', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Angemeldet als', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Anmelden', + 'Login' => 'Anmeldung', + 'Logout' => 'Abmelden', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'niedrige', + 'LowBW' => 'Niedrige B/W', + 'Main' => 'Haupt', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'Markieren', + 'Max' => 'Max', + 'MaxBandwidth' => 'Maximale Bandbreite', + 'MaxBrScore' => 'Maximale
Punktzahl', + 'MaxFocusRange' => 'Maximaler Fokusbereich', + 'MaxFocusSpeed' => 'Maximale Fokusgeschwindigkeit', + 'MaxFocusStep' => 'Maximale Fokusstufe', + 'MaxGainRange' => 'Maximaler Verstärkungsbereich', + 'MaxGainSpeed' => 'Maximale Verstärkungsgeschwindigkeit', + 'MaxGainStep' => 'Maximale Verstärkungsstufe', + 'MaxIrisRange' => 'Maximaler Irisbereich', + 'MaxIrisSpeed' => 'Maximale Irisgeschwindigkeit', + 'MaxIrisStep' => 'Maximale Irisstufe', + 'MaxPanRange' => 'Maximaler Pan-Bereich', + 'MaxPanSpeed' => 'Maximale Pan-Geschw.', + 'MaxPanStep' => 'Maximale Pan-Stufe', + 'MaxTiltRange' => 'Maximaler Neig.-Bereich', + 'MaxTiltSpeed' => 'Maximale Neig.-Geschw.', + 'MaxTiltStep' => 'Maximale Neig.-Stufe', + 'MaxWhiteRange' => 'Maximaler Weiß-Abgl.bereich', + 'MaxWhiteSpeed' => 'Maximale Weiß-Abgl.geschw.', + 'MaxWhiteStep' => 'Maximale Weiß-Abgl.stufe', + 'MaxZoomRange' => 'Maximaler Zoom-Bereich', + 'MaxZoomSpeed' => 'Maximale Zoom-Geschw.', + 'MaxZoomStep' => 'Maximale Zoom-Stufe', + 'MaximumFPS' => 'Maximale FPS', + 'Medium' => 'mittlere', + 'MediumBW' => 'Mittlere B/W', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Der minimale Alarmbereich sollte kleiner sein als der maximale', + 'MinAlarmAreaUnset' => 'Sie müssen einen Minimumwert an Alarmflächenpixeln angeben', + 'MinBlobAreaLtMax' => 'Die minimale Blob-Fläche muss kleiner sein als die maximale', + 'MinBlobAreaUnset' => 'Sie müssen einen Minimumwert an Blobflächenpixeln angeben', + 'MinBlobLtMinFilter' => 'Die minimale Blob-Fläche sollte kleiner oder gleich der minimalen Filterfläche sein', + 'MinBlobsLtMax' => 'Die minimalen Blobs müssen kleiner sein als die maximalen', + 'MinBlobsUnset' => 'Sie müssen einen Minimumwert an Blobs angeben', + 'MinFilterAreaLtMax' => 'Die minimale Filterfläche sollte kleiner sein als die maximale', + 'MinFilterAreaUnset' => 'Sie müssen einen Minimumwert an Filterpixeln angeben', + 'MinFilterLtMinAlarm' => 'Die minimale Filterfläche sollte kleiner oder gleich der minimalen Alarmfläche sein', + 'MinFocusRange' => 'Min. Fokusbereich', + 'MinFocusSpeed' => 'Min. Fokusgeschw.', + 'MinFocusStep' => 'Min. Fokusstufe', + 'MinGainRange' => 'Min. Verstärkungsbereich', + 'MinGainSpeed' => 'Min. Verstärkungsgeschwindigkeit', + 'MinGainStep' => 'Min. Verstärkungsstufe', + 'MinIrisRange' => 'Min. Irisbereich', + 'MinIrisSpeed' => 'Min. Irisgeschwindigkeit', + 'MinIrisStep' => 'Min. Irisstufe', + 'MinPanRange' => 'Min. Pan-Bereich', + 'MinPanSpeed' => 'Min. Pan-Geschwindigkeit', + 'MinPanStep' => 'Min. Pan-Stufe', + 'MinPixelThresLtMax' => 'Der minimale Pixelschwellwert muss kleiner sein als der maximale', + 'MinPixelThresUnset' => 'Sie müssen einen minimalen Pixel-Schwellenwert angeben', + 'MinTiltRange' => 'Min. Neigungsbereich', + 'MinTiltSpeed' => 'Min. Neigungsgeschwindigkeit', + 'MinTiltStep' => 'Min. Neigungsstufe', + 'MinWhiteRange' => 'Min. Weiß-Abgleichbereich', + 'MinWhiteSpeed' => 'Min. Weiß-Abgleichgeschwindigkeit', + 'MinWhiteStep' => 'Min. Weiß-Abgleichstufe', + 'MinZoomRange' => 'Min. Zoom-Bereich', + 'MinZoomSpeed' => 'Min. Zoom-Geschwindigkeit', + 'MinZoomStep' => 'Min. Zoom-Stufe', + 'Misc' => 'Verschiedenes', + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Monitor-ID', + 'MonitorPreset' => 'Monitor-Voreinstellung', + 'MonitorPresetIntro' => 'Wählen Sie eine geeignete Voreinstellung aus der folgenden Liste.

Bitte beachten Sie, dass dies mögliche Einstellungen von Ihnen am Monitor überschreiben kann.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Monitore', + 'Montage' => 'Montage', + 'Month' => 'Monat', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Bewegung', + 'MustBeGe' => 'muss groesser oder gleich sein wie', + 'MustBeLe' => 'muss kleiner oder gleich sein wie', + 'MustConfirmPassword' => 'Sie müssen das Passwort bestätigen.', + 'MustSupplyPassword' => 'Sie müssen ein Passwort vergeben.', + 'MustSupplyUsername' => 'Sie müssen einen Usernamen vergeben.', + 'Name' => 'Name', + 'Near' => 'Nah', + 'Network' => 'Netzwerk', + 'New' => 'Neu', + 'NewGroup' => 'Neue Gruppe', + 'NewLabel' => 'Neuer Bezeichner', + 'NewPassword' => 'Neues Passwort', + 'NewState' => 'Neuer Status', + 'NewUser' => 'Neuer Benutzer', + 'Next' => 'Nächstes', + 'No' => 'Nein', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Es gibt keine Aufnahmen von diesem Ereignis.', + 'NoGroup' => 'Keine Gruppe', + 'NoSavedFilters' => 'Keine gespeicherten Filter', + 'NoStatisticsRecorded' => 'Keine Statistik für dieses Ereignis/diese Bilder', + 'None' => 'ohne', + 'NoneAvailable' => 'Nichts verfügbar', + 'Normal' => 'Normal', + 'Notes' => 'Bemerkungen', + 'NumPresets' => 'Nummerierte Voreinstellungen', + 'Off' => 'Aus', + 'On' => 'An', + 'OpEq' => 'gleich zu', + 'OpGt' => 'groesser als', + 'OpGtEq' => 'groesser oder gleich wie', + 'OpIn' => 'in Satz', + 'OpLt' => 'kleiner als', + 'OpLtEq' => 'kleiner oder gleich wie', + 'OpMatches' => 'zutreffend', + 'OpNe' => 'nicht gleich', + 'OpNotIn' => 'nicht im Satz', + 'OpNotMatches' => 'nicht zutreffend', + 'Open' => 'Öffnen', + 'OptionHelp' => 'Hilfe', + 'OptionRestartWarning' => 'Veränderungen werden erst nach einem Neustart des Programms aktiv.\nFür eine sofortige Änderung starten Sie das Programm bitte neu.', + 'Options' => 'Optionen', + 'OrEnterNewName' => 'oder neuen Namen eingeben', + 'Order' => 'Reihenfolge', + 'Orientation' => 'Ausrichtung', + 'Out' => 'Aus', + 'OverwriteExisting' => 'Überschreibe bestehende', + 'Paged' => 'Seitennummeriert', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan-Left', + 'PanRight' => 'Pan-Right', + 'PanTilt' => 'Pan/Neigung', + 'Parameter' => 'Parameter', + 'Password' => 'Passwort', + 'PasswordsDifferent' => 'Die Passwörter sind unterschiedlich', + 'Paths' => 'Pfade', + 'Pause' => 'Pause', + 'Phone' => 'Telefon', + 'PhoneBW' => 'Tel. B/W', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel-Differenz', + 'Pixels' => 'Pixel', + 'Play' => 'Abspielen', + 'PlayAll' => 'Alle zeigen', + 'PleaseWait' => 'Bitte warten', + 'Point' => 'Punkt', + 'PostEventImageBuffer' => 'Nachereignispuffer', + 'PreEventImageBuffer' => 'Vorereignispuffer', + 'PreserveAspect' => 'Seitenverhältnis beibehalten', + 'Preset' => 'Voreinstellung', + 'Presets' => 'Voreinstellungen', + 'Prev' => 'Vorheriges', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protokoll', + 'Rate' => 'Abspielgeschwindigkeit', + 'Real' => 'Real', + 'Record' => 'Aufnahme', + 'RefImageBlendPct' => 'Referenz-Bildblende', + 'Refresh' => 'Aktualisieren', + 'Remote' => 'Entfernt', + 'RemoteHostName' => 'Entfernter Hostname', + 'RemoteHostPath' => 'Entfernter Hostpfad', + 'RemoteHostPort' => 'Entfernter Hostport', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Entfernte Bildfarbe', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Umbenennen', + 'Replay' => 'Wiederholung', + 'ReplayAll' => 'Alle Ereignisse', + 'ReplayGapless' => 'Lückenlose Ereignisse', + 'ReplaySingle' => 'Einzelereignis', + 'Reset' => 'Zurücksetzen', + 'ResetEventCounts' => 'Lösche Ereignispunktzahl', + 'Restart' => 'Neustart', + 'Restarting' => 'Neustarten', + 'RestrictedCameraIds' => 'Verbotene Kamera-ID', + 'RestrictedMonitors' => 'Eingeschränkte Monitore', + 'ReturnDelay' => 'Rückkehr-Verzögerung', + 'ReturnLocation' => 'Rückkehrpunkt', + 'Rewind' => 'Zurückspulen', + 'RotateLeft' => 'Drehung links', + 'RotateRight' => 'Drehung rechts', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Betriebsmodus', + 'RunState' => 'Laufender Status', + 'Running' => 'In Betrieb', + 'Save' => 'OK', + 'SaveAs' => 'Speichere als', + 'SaveFilter' => 'Speichere Filter', + 'Scale' => 'Skalierung', + 'Score' => 'Punktzahl', + 'Secs' => 'Sekunden', + 'Sectionlength' => 'Sektionslänge', + 'Select' => 'Auswahl', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Wähle Monitore', + 'SelfIntersecting' => 'Die Polygonränder dürfen sich nicht überschneiden.', + 'Set' => 'Setze', + 'SetNewBandwidth' => 'Setze neue Bandbreite', + 'SetPreset' => 'Setze Voreinstellung', + 'Settings' => 'Einstellungen', + 'ShowFilterWindow' => 'Zeige Filterfenster', + 'ShowTimeline' => 'Zeige Zeitlinie', + 'SignalCheckColour' => 'Farbe des Signalchecks', + 'Size' => 'Größe', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Schlaf', + 'SortAsc' => 'aufsteigend', + 'SortBy' => 'Sortieren nach', + 'SortDesc' => 'absteigend', + 'Source' => 'Quelle', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Quellentyp', + 'Speed' => 'Geschwindigkeit', + 'SpeedHigh' => 'Hohe Geschwindigkeit', + 'SpeedLow' => 'Niedrige Geschwindigkeit', + 'SpeedMedium' => 'Mittlere Geschwindigkeit', + 'SpeedTurbo' => 'Turbo-Geschwindigkeit', + 'Start' => 'Start', + 'State' => 'Status', + 'Stats' => 'Status', + 'Status' => 'Status', + 'Step' => 'Stufe', + 'StepBack' => 'Einen Schritt rückwärts', + 'StepForward' => 'Einen Schritt vorwärts', + 'StepLarge' => 'Große Stufe', + 'StepMedium' => 'Mittlere Stufe', + 'StepNone' => 'Keine Stufe', + 'StepSmall' => 'Kleine Stufe', + 'Stills' => 'Bilder', + 'Stop' => 'Stop', + 'Stopped' => 'Gestoppt', + 'Stream' => 'Stream', + 'StreamReplayBuffer' => 'Stream-Wiedergabe-Bildpuffer', + 'Submit' => 'Absenden', + 'System' => 'System', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Miniatur', + 'Tilt' => 'Neigung', + 'Time' => 'Zeit', + 'TimeDelta' => 'Zeitdifferenz', + 'TimeStamp' => 'Zeitstempel', + 'Timeline' => 'Zeitlinie', + 'Timestamp' => 'Zeitstempel', + 'TimestampLabelFormat' => 'Format des Zeitstempels', + 'TimestampLabelX' => 'Zeitstempel-X', + 'TimestampLabelY' => 'Zeitstempel-Y', + 'Today' => 'Heute', + 'Tools' => 'Werkzeuge', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Totale
Punktzahl', + 'TrackDelay' => 'Nachführungsverzögerung', + 'TrackMotion' => 'Bewegungs-Nachführung', + 'Triggers' => 'Auslöser', + 'TurboPanSpeed' => 'Turbo-Pan-Geschwindigkeit', + 'TurboTiltSpeed' => 'Turbo-Neigungsgeschwindigkeit', + 'Type' => 'Typ', + 'Unarchive' => 'Aus Archiv entfernen', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Einheiten', + 'Unknown' => 'Unbekannt', + 'Update' => 'Aktualisieren', + 'UpdateAvailable' => 'Eine Aktualisierung für ZoneMinder ist verfügbar.', + 'UpdateNotNecessary' => 'Es ist keine Aktualisierung verfügbar.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Benutze Filter', + 'UseFilterExprsPost' => ' Filter Ausdrücke', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Benutze ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Benutzer', + 'Username' => 'Benutzername', + 'Users' => 'Benutzer', + 'Value' => 'Wert', + 'Version' => 'Version', + 'VersionIgnore' => 'Ignoriere diese Version', + 'VersionRemindDay' => 'Erinnere mich wieder in 1 Tag.', + 'VersionRemindHour' => 'Erinnere mich wieder in 1 Stunde.', + 'VersionRemindNever' => 'Informiere mich nicht mehr über neue Versionen.', + 'VersionRemindWeek' => 'Erinnere mich wieder in 1 Woche.', + 'Video' => 'Video', + 'VideoFormat' => 'Videoformat', + 'VideoGenFailed' => 'Videoerzeugung fehlgeschlagen!', + 'VideoGenFiles' => 'Existierende Videodateien', + 'VideoGenNoFiles' => 'Keine Videodateien gefunden.', + 'VideoGenParms' => 'Parameter der Videoerzeugung', + 'VideoGenSucceeded' => 'Videoerzeugung erfolgreich!', + 'VideoSize' => 'Videogröße', + 'View' => 'Ansicht', + 'ViewAll' => 'Alles ansehen', + 'ViewEvent' => 'Zeige Ereignis', + 'ViewPaged' => 'Seitenansicht', + 'Wake' => 'Aufwachen', + 'WarmupFrames' => 'Aufwärmbilder', + 'Watch' => 'Beobachte', + 'Web' => 'Web', + 'WebColour' => 'Webfarbe', + 'Week' => 'Woche', + 'White' => 'Weiß', + 'WhiteBalance' => 'Weiß-Abgleich', + 'Wide' => 'Weit', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10-Aktivierungswert', + 'X10InputAlarmString' => 'X10-Eingabe-Alarmwert', + 'X10OutputAlarmString' => 'X10-Ausgabe-Alarmwert', + 'Y' => 'Y', + 'Yes' => 'Ja', + 'YouNoPerms' => 'Keine Erlaubnis zum Zugang dieser Resource.', + 'Zone' => 'Zone', + 'ZoneAlarmColour' => 'Alarmfarbe (Rot/Grün/Blau)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter-Breite/-Höhe (Pixel)', + 'ZoneMinMaxAlarmArea' => 'Min./max. Alarmfläche', + 'ZoneMinMaxBlobArea' => 'Min./max. Blobfläche', + 'ZoneMinMaxBlobs' => 'Min./max. Blobs', + 'ZoneMinMaxFiltArea' => 'Min./max. Filterfläche', + 'ZoneMinMaxPixelThres' => 'Min./max. Pixelschwellwert', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Bildauslassrate bei Systemüberlastung', + 'Zones' => 'Zonen', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Hineinzoomen', + 'ZoomOut' => 'Herauszoomen', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Momentan angemeldet ist \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Letzte %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'Die letzte Version ist v%1$s, Sie haben v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Monitor %1$s Funktion', + 'RunningRecentVer' => 'Sie benutzen die aktuellste Version von Zoneminder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Ereignisse', 1=>'Ereignis;', 2=>'Ereignisse' ), + 'Monitor' => array( 0=>'Monitore', 1=>'Monitor', 2=>'Monitore' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/dk_dk.php b/web/lang/dk_dk.php index 6a8387123..7dcd7ccf7 100644 --- a/web/lang/dk_dk.php +++ b/web/lang/dk_dk.php @@ -265,6 +265,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Forløb', @@ -528,6 +529,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Afspil Alle', 'PleaseWait' => 'Vent venligst', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'Efter Event Billed Buffer', 'PreEventImageBuffer' => 'Før Event Billed Buffer', @@ -653,6 +655,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Ingen updatering er nødvendig.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Brug Filter', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Brug ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/dk_dk.php.orig b/web/lang/dk_dk.php.orig new file mode 100644 index 000000000..6a8387123 --- /dev/null +++ b/web/lang/dk_dk.php.orig @@ -0,0 +1,847 @@ + '24 bit farve', + '32BitColour' => '32 bit farve', // Added - 2011-06-15 + '8BitGrey' => '8 bit greyscale', + 'Action' => 'Action', + 'Actual' => 'Aktuel', + 'AddNewControl' => 'Tilføj Ny kontrol', + 'AddNewMonitor' => 'Tilføj Ny Monitor', + 'AddNewUser' => 'Tilføj Ny Bruger', + 'AddNewZone' => 'Tilføj Ny Zone', + 'Alarm' => 'Alarm', + 'AlarmBrFrames' => 'Alarm
Billeder', + 'AlarmFrame' => 'Alarm Billede', + 'AlarmFrameCount' => 'Alarm Billede Tæller', + 'AlarmLimits' => 'Alarm Begrændsing', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Alarm Px', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Alarm', + 'All' => 'Alle', + 'Apply' => 'Aktiver', + 'ApplyingStateChange' => 'Aktivere State Ændring', + 'ArchArchived' => 'Kun Arkiverede', + 'ArchUnarchived' => 'Kun Ikke Arkiverede', + 'Archive' => 'Arkiver', + 'Archived' => 'Archived', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Alarm Billeder', + 'AttrArchiveStatus' => 'Arkiverings Status', + 'AttrAvgScore' => 'Avg. Skore', + 'AttrCause' => 'Årsag', + 'AttrDate' => 'Dato', + 'AttrDateTime' => 'Dato/Tid', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Procent', + 'AttrDuration' => 'Forløb', + 'AttrFrames' => 'Billeder', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Max. Skore', + 'AttrMonitorId' => 'Monitor Id', + 'AttrMonitorName' => 'Monitor Navn', + 'AttrName' => 'Navn', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Tid', + 'AttrTotalScore' => 'Total Skore', + 'AttrWeekday' => 'Uge Dag', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'Avg.
Skore', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Navne må kun indeholde alphanumeric karaktere plus hyphen og underscore', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'Båndbrede', + 'BlobPx' => 'Blob Px', + 'BlobSizes' => 'Blob Størelse', + 'Blobs' => 'Blobs', + 'Brightness' => 'Brightness', + 'Buffers' => 'Buffere', + 'CanAutoFocus' => 'Kan Auto Focus', + 'CanAutoGain' => 'Kan Auto Gain', + 'CanAutoIris' => 'Kan Auto Iris', + 'CanAutoWhite' => 'Kan Auto White Bal.', + 'CanAutoZoom' => 'Kan Auto Zoom', + 'CanFocus' => 'Kan Focus', + 'CanFocusAbs' => 'Kan Focus Absolut', + 'CanFocusCon' => 'Kan Focus Kontinuerligt', + 'CanFocusRel' => 'Kan Focus Relativt', + 'CanGain' => 'Kan Gain ', + 'CanGainAbs' => 'Kan Gain Absolut', + 'CanGainCon' => 'Kan Gain Kontinuerligt', + 'CanGainRel' => 'Kan Gain Relativt', + 'CanIris' => 'Kan Iris', + 'CanIrisAbs' => 'Kan Iris Absolut', + 'CanIrisCon' => 'Kan Iris Kontinuerligt', + 'CanIrisRel' => 'Kan Iris Relativt', + 'CanMove' => 'Kan Bevæge', + 'CanMoveAbs' => 'Kan Bevæge Absolut', + 'CanMoveCon' => 'Kan Bevæge Kontinuerligt', + 'CanMoveDiag' => 'Kan Bevæge Diagonalt', + 'CanMoveMap' => 'Kan Bevæge Mapped', + 'CanMoveRel' => 'Kan Bevæge Relativt', + 'CanPan' => 'Kan Pan' , + 'CanReset' => 'Kan Reset', + 'CanSetPresets' => 'Kan Set Presets', + 'CanSleep' => 'Kan Sove', + 'CanTilt' => 'Kan Tilt', + 'CanWake' => 'Kan Vågne', + 'CanWhite' => 'Kan White Balance', + 'CanWhiteAbs' => 'Kan White Bal. Absolut', + 'CanWhiteBal' => 'Kan White Bal.', + 'CanWhiteCon' => 'Kan White Bal. Kontinuerligt', + 'CanWhiteRel' => 'Kan White Bal. Relativt', + 'CanZoom' => 'Kan Zoom', + 'CanZoomAbs' => 'Kan Zoom Absolut', + 'CanZoomCon' => 'Kan Zoom Kontinuerligt', + 'CanZoomRel' => 'Kan Zoom Relativt', + 'Cancel' => 'Fortryd', + 'CancelForcedAlarm' => 'Fortryd Forced Alarm', + 'CaptureHeight' => 'Capture Height', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Capture Palette', + 'CaptureWidth' => 'Capture Width', + 'Cause' => 'Årsag', + 'CheckMethod' => 'Alarm Check Methode', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Vælg Filter', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Luk', + 'Colour' => 'Farve', + 'Command' => 'Kommando', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'konfig', + 'ConfiguredFor' => 'Konfigureret for', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Verifiser Password', + 'ConjAnd' => 'og', + 'ConjOr' => 'eller', + 'Console' => 'Konsol', + 'ContactAdmin' => 'Kontakt Din adminstrator for detalier.', + 'Continue' => 'Fortsæt', + 'Contrast' => 'Kontrast', + 'Control' => 'Kontrol', + 'ControlAddress' => 'Kontrol Addresse', + 'ControlCap' => 'Kontrol Capability', + 'ControlCaps' => 'Kontrol Capabilities', + 'ControlDevice' => 'Kontrol Enhed', + 'ControlType' => 'Kontrol Type', + 'Controllable' => 'Controllable', + 'Cycle' => 'Cycle', + 'CycleWatch' => 'Cycle Watch', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Dag', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'Slet', + 'DeleteAndNext' => 'Slet & Næste', + 'DeleteAndPrev' => 'Slet & Forrige', + 'DeleteSavedFilter' => 'Slet Gemte filter', + 'Description' => 'Beskrivelse', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Enheds Kanal', + 'DeviceFormat' => 'Enheds Format', + 'DeviceNumber' => 'Enheds Nummer', + 'DevicePath' => 'Device Path', + 'Devices' => 'Devices', + 'Dimensions' => 'Dimentioner', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Disk', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Forløb', + 'Edit' => 'Rediger', + 'Email' => 'Email', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Aktiv', + 'EnterNewFilterName' => 'Skriv Nyt filter navn', + 'Error' => 'Fejl', + 'ErrorBrackets' => 'Fejl, check at du har lige antal af Åbnings og Lukkende brackets', + 'ErrorValidValue' => 'Fejl, check at alle terms har en valid værdig', + 'Etc' => 'etc', + 'Event' => 'Event', + 'EventFilter' => 'Event Filter', + 'EventId' => 'Event Id', + 'EventName' => 'Event Navn', + 'EventPrefix' => 'Event Prefix', + 'Events' => 'Events', + 'Exclude' => 'Exclude', + 'Execute' => 'Execute', + 'Export' => 'Export', + 'ExportDetails' => 'Export Event Details', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'Exporting', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS Raport Interval', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Feed', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Arkiver alle matchende', + 'FilterDeleteEvents' => 'Slet alle matchende', + 'FilterEmailEvents' => 'Email detalier af alle matchende', + 'FilterExecuteEvents' => 'Kør kommando på alle matchende', + 'FilterMessageEvents' => 'Send detalier af alle matchende', + 'FilterPx' => 'Filter Px', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Upload alle matchende', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filters', + 'First' => 'Første', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Fokus', + 'ForceAlarm' => 'Tving Alarm', + 'Format' => 'Format', + 'Frame' => 'Billede', + 'FrameId' => 'Billede Id', + 'FrameRate' => 'Billede Rate', + 'FrameSkip' => 'Billede Skip', + 'Frames' => 'Billede', + 'Func' => 'Func', + 'Function' => 'Funktion', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'Generer Video', + 'GeneratingVideo' => 'Generere Video', + 'GoToZoneMinder' => 'Gå til ZoneMinder.com', + 'Grey' => 'Grå', + 'Group' => 'Group', + 'Groups' => 'Grupper', + 'HasFocusSpeed' => 'Har Fokus Hastighed', + 'HasGainSpeed' => 'Har Gain Hastighed', + 'HasHomePreset' => 'Har Hjem Preset', + 'HasIrisSpeed' => 'Har Iris Hastighed', + 'HasPanSpeed' => 'Har Pan Hastighed', + 'HasPresets' => 'Har Presets', + 'HasTiltSpeed' => 'Har Tilt Hastighed', + 'HasTurboPan' => 'Har Turbo Pan', + 'HasTurboTilt' => 'Har Turbo Tilt', + 'HasWhiteSpeed' => 'Har White Bal. Hastighed', + 'HasZoomSpeed' => 'Har Zoom Hastighed', + 'High' => 'Høj', + 'HighBW' => 'Høj B/B', + 'Home' => 'Hjem', + 'Hour' => 'Time', + 'Hue' => 'Hue', + 'Id' => 'Id', + 'Idle' => 'Idle', + 'Ignore' => 'Ignorer', + 'Image' => 'Billede', + 'ImageBufferSize' => 'Billede Buffer Størelse (Billeder)', + 'Images' => 'Images', + 'In' => 'Ind', + 'Include' => 'Inkluder', + 'Inverted' => 'Inverteret', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Sprog', + 'Last' => 'Sidste', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Load', + 'Local' => 'Lokal', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Logget Ind Som', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Logger Ind', + 'Login' => 'Logind', + 'Logout' => 'Logud', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Lav', + 'LowBW' => 'Lav B/B', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'Marker', + 'Max' => 'Max', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'Max.
Skore', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => 'Maximale FPS', + 'Medium' => 'Medium', + 'MediumBW' => 'Medium B/B', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Minimum blob område bør være mindre end maximum', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Minimum blobs bør være mindre end maximum', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'Minimum pixel threshold bør være mindre end maximum', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'Misc', + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Monitor Ids', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Monitore', + 'Montage' => 'Montage', + 'Month' => 'Måned', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Flyt', + 'MustBeGe' => 'skal være støre end eller ligmed', + 'MustBeLe' => 'Skal være mindre end eller ligmed', + 'MustConfirmPassword' => 'Du skal konfimere password', + 'MustSupplyPassword' => 'Du skal angive et password', + 'MustSupplyUsername' => 'Du skal opgive et username', + 'Name' => 'Navn', + 'Near' => 'Near', + 'Network' => 'Netværk', + 'New' => 'Ny', + 'NewGroup' => 'Ny Gruppe', + 'NewLabel' => 'New Label', + 'NewPassword' => 'Nyt Password', + 'NewState' => 'Ny State', + 'NewUser' => 'Ny User', + 'Next' => 'Næste', + 'No' => 'Nej', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Der er ingen billeder optaget for denne event', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => 'NoSavedFilters', + 'NoStatisticsRecorded' => 'Der er ingen statestikker optaget for denne event/frame', + 'None' => 'Ingen', + 'NoneAvailable' => 'Ingen Tilstede', + 'Normal' => 'Normal', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'ligmed', + 'OpGt' => 'støre end', + 'OpGtEq' => 'støre end eller ligmed', + 'OpIn' => 'i sættet', + 'OpLt' => 'mindre end', + 'OpLtEq' => 'mindre end eller ligmed', + 'OpMatches' => 'matches', + 'OpNe' => 'ikke ligmed', + 'OpNotIn' => 'ikke i sættet', + 'OpNotMatches' => 'does not match', + 'Open' => 'Åben', + 'OptionHelp' => 'OptionHelp', + 'OptionRestartWarning' => 'Disse ændringer træder ikke i fuld effect\nmens systemt køre. Når du har\nafsluttet ændringer bedes du\ngenstarte ZoneMinder.', + 'Options' => 'Indstillinger', + 'OrEnterNewName' => 'eller skriv nyt navn', + 'Order' => 'Order', + 'Orientation' => 'Orientation', + 'Out' => 'Ud', + 'OverwriteExisting' => 'Overskriv Eksisterende', + 'Paged' => 'Paged', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Parameter', + 'Password' => 'Password', + 'PasswordsDifferent' => 'Det nye og konfimerede passwords er forskellige', + 'Paths' => 'Stiger', + 'Pause' => 'Pause', + 'Phone' => 'Telefon', + 'PhoneBW' => 'Telefon B/B', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pixels', + 'Play' => 'Play', + 'PlayAll' => 'Afspil Alle', + 'PleaseWait' => 'Vent venligst', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'Efter Event Billed Buffer', + 'PreEventImageBuffer' => 'Før Event Billed Buffer', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'Prev', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Rate', + 'Real' => 'Real', + 'Record' => 'Optag', + 'RefImageBlendPct' => 'Reference Billede Blend %ge', + 'Refresh' => 'Opdater', + 'Remote' => 'Remote', + 'RemoteHostName' => 'Remote Host Navn', + 'RemoteHostPath' => 'Remote Host Stig', + 'RemoteHostPort' => 'Remote Host Port', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Remote Image Farver', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Omdøb', + 'Replay' => 'Spil Igen', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Nulstil', + 'ResetEventCounts' => 'Reset Event Counts', + 'Restart' => 'Genstart', + 'Restarting' => 'Genstarter', + 'RestrictedCameraIds' => 'Begranset Kamera Ids', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Rotate Left', + 'RotateRight' => 'Rotate Right', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Kørsels Mode', + 'RunState' => 'Run State', + 'Running' => 'Køre', + 'Save' => 'Gem', + 'SaveAs' => 'Gem Som', + 'SaveFilter' => 'Gem Filter', + 'Scale' => 'Scale', + 'Score' => 'Skore', + 'Secs' => 'Sekunder', + 'Sectionlength' => 'Sektion længde', + 'Select' => 'Vælg', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Sæt', + 'SetNewBandwidth' => 'Sæt Ny Båndbrede', + 'SetPreset' => 'Sæt Preset', + 'Settings' => 'Indstillinger', + 'ShowFilterWindow' => 'VisFilterVindue', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sov', + 'SortAsc' => 'Asc', + 'SortBy' => 'Sorter efter', + 'SortDesc' => 'Desc', + 'Source' => 'Enhed', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Enheds Type', + 'Speed' => 'Hastighed', + 'SpeedHigh' => 'Høj Hastighed', + 'SpeedLow' => 'Lav Hastighed', + 'SpeedMedium' => 'Medium Hastighed', + 'SpeedTurbo' => 'Turbo Hastighed', + 'Start' => 'Start', + 'State' => 'State', + 'Stats' => 'Stats', + 'Status' => 'Status', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => 'Stills', + 'Stop' => 'Stop', + 'Stopped' => 'Stoppet', + 'Stream' => 'Stream', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => 'System', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => 'Tid', + 'TimeDelta' => 'Time Delta', + 'TimeStamp' => 'Tids Stempel', + 'Timeline' => 'Timeline', + 'Timestamp' => 'Tidsstempel', + 'TimestampLabelFormat' => 'Tidsstempel Mærkning´s Format', + 'TimestampLabelX' => 'Tidsstempel Mærkning X', + 'TimestampLabelY' => 'Tidsstempel Mærkning Y', + 'Today' => 'Idag', + 'Tools' => 'Tools', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Total
Skore', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Triggers', + 'TurboPanSpeed' => 'Turbo Pan Hastighed', + 'TurboTiltSpeed' => 'Turbo Tilt Hastighed', + 'Type' => 'Type', + 'Unarchive' => 'Unarchive', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Units', + 'Unknown' => 'Unknown', + 'Update' => 'Update', + 'UpdateAvailable' => 'En updatering til ZoneMinder er tilstede.', + 'UpdateNotNecessary' => 'Ingen updatering er nødvendig.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Brug Filter', + 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Brug ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Bruger', + 'Username' => 'Bruger Navn', + 'Users' => 'Brugere', + 'Value' => 'Værdig', + 'Version' => 'Version', + 'VersionIgnore' => 'Ignorer denne version', + 'VersionRemindDay' => 'Påmind igen om 1 dag', + 'VersionRemindHour' => 'Påmind igen om 1 time', + 'VersionRemindNever' => 'Mind ikke om nye versioner', + 'VersionRemindWeek' => 'Påmind igen om 1 uge', + 'Video' => 'Video', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'Video Generering Fejlede!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'Video Generaring Parametre', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'Video Størelse', + 'View' => 'Vis', + 'ViewAll' => 'Vis Alle', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'View Paged', + 'Wake' => 'Wake', + 'WarmupFrames' => 'Varmop Billeder', + 'Watch' => 'Se', + 'Web' => 'Web', + 'WebColour' => 'Web Colour', + 'Week' => 'Uge', + 'White' => 'White', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 Activerings Streng', + 'X10InputAlarmString' => 'X10 Input Alarm Streng', + 'X10OutputAlarmString' => 'X10 Output Alarm Streng', + 'Y' => 'Y', + 'Yes' => 'Ja', + 'YouNoPerms' => 'Du har ikke adgang til denne resourse.', + 'Zone' => 'Zone', + 'ZoneAlarmColour' => 'Alarm Farve (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zoner', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Nuværende login er \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Sidste %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'Den Seneste version er v%1$s, du har v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Monitor %1$s Function', + 'RunningRecentVer' => 'Du Køre med seneste version af ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Events', 1=>'Event', 2=>'Events' ), + 'Monitor' => array( 0=>'Monitors', 1=>'Monitor', 2=>'Monitors' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/en_gb.php b/web/lang/en_gb.php index 3f703dd24..cf889520d 100644 --- a/web/lang/en_gb.php +++ b/web/lang/en_gb.php @@ -271,6 +271,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', 'Duration' => 'Duration', @@ -528,6 +529,7 @@ $SLANG = array( 'Pixels' => 'pixels', 'PlayAll' => 'Play All', 'Play' => 'Play', + 'Plugins' => 'Plugins', 'PleaseWait' => 'Please Wait', 'Point' => 'Point', 'PostEventImageBuffer' => 'Post Event Image Count', @@ -653,6 +655,7 @@ $SLANG = array( 'Update' => 'Update', 'Upload' => 'Upload', 'Updated' => 'Updated', + 'UsedPlugins' => 'Used Plugins', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Use ', // This is used at the beginning of the phrase 'use N filter expressions' 'UseFilter' => 'Use Filter', diff --git a/web/lang/en_gb.php.orig b/web/lang/en_gb.php.orig new file mode 100644 index 000000000..3f703dd24 --- /dev/null +++ b/web/lang/en_gb.php.orig @@ -0,0 +1,846 @@ + Translation by + +// Notes for Translators +// 0. Get some credit, put your name in the line above (optional) +// 1. When composing the language tokens in your language you should try and keep to roughly the +// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places. +// 2. There are four types of string replacement +// a) Simple replacements are words or short phrases that are static and used directly. This type of +// replacement can be used 'as is'. +// b) Complex replacements involve some dynamic element being included and so may require substitution +// or changing into a different order. The token listed in this file will be passed through sprintf as +// a formatting string. If the dynamic element is a number you will usually need to use a variable +// replacement also as described below. +// c) Variable replacements are used in conjunction with complex replacements and involve the generation +// of a singular or plural noun depending on the number passed into the zmVlang function. See the +// the zmVlang section below for a further description of this. +// d) Optional strings which can be used to replace the prompts and/or help text for the Options section +// of the web interface. These are not listed below as they are quite large and held in the database +// so that they can also be used by the zmconfig.pl script. However you can build up your own list +// quite easily from the Config table in the database if necessary. +// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore +// you can safely assume that a single word token will only be used in that context. +// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a +// maintenance point of view to include the original language file and override the old definitions rather +// than copy all the language tokens across. To do this change the line below to whatever your base language +// is and uncomment it. +// require_once( 'zm_lang_en_gb.php' ); + +// You may need to change the character set here, if your web server does not already +// do this by default, uncomment this if required. +// +// Example +// header( "Content-Type: text/html; charset=iso-8859-1" ); + +// You may need to change your locale here if your default one is incorrect for the +// language described in this file, or if you have multiple languages supported. +// If you do need to change your locale, be aware that the format of this function +// is subtlely different in versions of PHP before and after 4.3.0, see +// http://uk2.php.net/manual/en/function.setlocale.php for details. +// Also be aware that changing the whole locale may affect some floating point or decimal +// arithmetic in the database, if this is the case change only the individual locale areas +// that don't affect this rather than all at once. See the examples below. +// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared +// threaded environment, if you get funny errors it may be this. +// +// Examples +// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0 +// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after +// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after +// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after + +// Simple String Replacements +$SLANG = array( + 'SystemLog' => 'System Log', + 'DateTime' => 'Date/Time', + 'Component' => 'Component', + 'Pid' => 'PID', + 'Level' => 'Level', + 'Message' => 'Message', + 'Line' => 'Line', + 'More' => 'More', + 'Clear' => 'Clear', + '24BitColour' => '24 bit colour', + '32BitColour' => '32 bit colour', + '8BitGrey' => '8 bit greyscale', + 'Action' => 'Action', + 'Actual' => 'Actual', + 'AddNewControl' => 'Add New Control', + 'AddNewMonitor' => 'Add New Monitor', + 'AddNewUser' => 'Add New User', + 'AddNewZone' => 'Add New Zone', + 'Alarm' => 'Alarm', + 'AlarmBrFrames' => 'Alarm
Frames', + 'AlarmFrame' => 'Alarm Frame', + 'AlarmFrameCount' => 'Alarm Frame Count', + 'AlarmLimits' => 'Alarm Limits', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Alarm Px', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Alert', + 'All' => 'All', + 'Apply' => 'Apply', + 'ApplyingStateChange' => 'Applying State Change', + 'ArchArchived' => 'Archived Only', + 'Archive' => 'Archive', + 'Archived' => 'Archived', + 'ArchUnarchived' => 'Unarchived Only', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Alarm Frames', + 'AttrArchiveStatus' => 'Archive Status', + 'AttrAvgScore' => 'Avg. Score', + 'AttrCause' => 'Cause', + 'AttrDate' => 'Date', + 'AttrDateTime' => 'Date/Time', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Percent', + 'AttrDuration' => 'Duration', + 'AttrFrames' => 'Frames', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Max. Score', + 'AttrMonitorId' => 'Monitor Id', + 'AttrMonitorName' => 'Monitor Name', + 'AttrName' => 'Name', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Time', + 'AttrTotalScore' => 'Total Score', + 'AttrWeekday' => 'Weekday', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', + 'AvgBrScore' => 'Avg.
Score', + 'Available' => 'Available', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadDevice' => 'Device must be set to a valid value', + 'BadFormat' => 'Format must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', + 'BadPalette' => 'Palette must be set to a valid value', + 'BadColours' => 'Target colour must be set to a valid value', + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer' => 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'Bandwidth', + 'BlobPx' => 'Blob Px', + 'Blobs' => 'Blobs', + 'BlobSizes' => 'Blob Sizes', + 'Brightness' => 'Brightness', + 'Buffers' => 'Buffers', + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'Cancel' => 'Cancel', + 'CancelForcedAlarm' => 'Cancel Forced Alarm', + 'CanFocusAbs' => 'Can Focus Absolute', + 'CanFocus' => 'Can Focus', + 'CanFocusCon' => 'Can Focus Continuous', + 'CanFocusRel' => 'Can Focus Relative', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGain' => 'Can Gain ', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIris' => 'Can Iris', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMoveAbs' => 'Can Move Absolute', + 'CanMove' => 'Can Move', + 'CanMoveCon' => 'Can Move Continuous', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relative', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhite' => 'Can White Balance', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoomAbs' => 'Can Zoom Absolute', + 'CanZoom' => 'Can Zoom', + 'CanZoomCon' => 'Can Zoom Continuous', + 'CanZoomRel' => 'Can Zoom Relative', + 'CaptureHeight' => 'Capture Height', + 'CaptureMethod' => 'Capture Method', + 'CapturePalette' => 'Capture Palette', + 'CaptureWidth' => 'Capture Width', + 'Cause' => 'Cause', + 'CheckMethod' => 'Alarm Check Method', + 'ChooseDetectedCamera' => 'Choose Detected Camera', + 'ChooseFilter' => 'Choose Filter', + 'ChooseLogFormat' => 'Choose a log format', + 'ChooseLogSelection' => 'Choose a log selection', + 'ChoosePreset' => 'Choose Preset', + 'Close' => 'Close', + 'Colour' => 'Colour', + 'Command' => 'Command', + 'Config' => 'Config', + 'ConfiguredFor' => 'Configured for', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Confirm Password', + 'ConjAnd' => 'and', + 'ConjOr' => 'or', + 'Console' => 'Console', + 'ContactAdmin' => 'Please contact your adminstrator for details.', + 'Continue' => 'Continue', + 'Contrast' => 'Contrast', + 'ControlAddress' => 'Control Address', + 'ControlCap' => 'Control Capability', + 'ControlCaps' => 'Control Capabilities', + 'Control' => 'Control', + 'ControlDevice' => 'Control Device', + 'Controllable' => 'Controllable', + 'ControlType' => 'Control Type', + 'Cycle' => 'Cycle', + 'CycleWatch' => 'Cycle Watch', + 'Day' => 'Day', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'DeleteAndNext' => 'Delete & Next', + 'DeleteAndPrev' => 'Delete & Prev', + 'Delete' => 'Delete', + 'DeleteSavedFilter' => 'Delete saved filter', + 'Description' => 'Description', + 'DetectedCameras' => 'Detected Cameras', + 'DeviceChannel' => 'Device Channel', + 'DeviceFormat' => 'Device Format', + 'DeviceNumber' => 'Device Number', + 'DevicePath' => 'Device Path', + 'Device' => 'Device', + 'Devices' => 'Devices', + 'Dimensions' => 'Dimensions', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Disk', + 'Display' => 'Display', + 'Displaying' => 'Displaying', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'Donate' => 'Please Donate', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', + 'Duration' => 'Duration', + 'Edit' => 'Edit', + 'Email' => 'Email', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Enabled', + 'EnterNewFilterName' => 'Enter new filter name', + 'ErrorBrackets' => 'Error, please check you have an equal number of opening and closing brackets', + 'Error' => 'Error', + 'ErrorValidValue' => 'Error, please check that all terms have a valid value', + 'Etc' => 'etc', + 'Event' => 'Event', + 'EventFilter' => 'Event Filter', + 'EventId' => 'Event Id', + 'EventName' => 'Event Name', + 'EventPrefix' => 'Event Prefix', + 'Events' => 'Events', + 'Exclude' => 'Exclude', + 'Execute' => 'Execute', + 'ExportDetails' => 'Export Event Details', + 'Export' => 'Export', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', + 'Exporting' => 'Exporting', + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Feed', + 'Ffmpeg' => 'Ffmpeg', + 'File' => 'File', + 'FilterArchiveEvents' => 'Archive all matches', + 'FilterDeleteEvents' => 'Delete all matches', + 'FilterEmailEvents' => 'Email details of all matches', + 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterMessageEvents' => 'Message details of all matches', + 'FilterPx' => 'Filter Px', + 'Filters' => 'Filters', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Upload all matches', + 'FilterVideoEvents' => 'Create video for all matches', + 'First' => 'First', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Focus', + 'ForceAlarm' => 'Force Alarm', + 'Format' => 'Format', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS Report Interval', + 'Frame' => 'Frame', + 'FrameId' => 'Frame Id', + 'FrameRate' => 'Frame Rate', + 'Frames' => 'Frames', + 'FrameSkip' => 'Frame Skip', + 'FTP' => 'FTP', + 'Func' => 'Func', + 'Function' => 'Function', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'Generate Video', + 'GeneratingVideo' => 'Generating Video', + 'GoToZoneMinder' => 'Go to ZoneMinder.com', + 'Grey' => 'Grey', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'HighBW' => 'High B/W', + 'High' => 'High', + 'Home' => 'Home', + 'Hour' => 'Hour', + 'Hue' => 'Hue', + 'Id' => 'Id', + 'Idle' => 'Idle', + 'Ignore' => 'Ignore', + 'ImageBufferSize' => 'Image Buffer Size (frames)', + 'Image' => 'Image', + 'Images' => 'Images', + 'Include' => 'Include', + 'In' => 'In', + 'Inverted' => 'Inverted', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Language', + 'Last' => 'Last', + 'Layout' => 'Layout', + 'LimitResultsPost' => 'results only', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only' + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Load', + 'Local' => 'Local', + 'Log' => 'Log', + 'Logs' => 'Logs', + 'Logging' => 'Logging', + 'LoggedInAs' => 'Logged in as', + 'LoggingIn' => 'Logging In', + 'Login' => 'Login', + 'Logout' => 'Logout', + 'LowBW' => 'Low B/W', + 'Low' => 'Low', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'Mark', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'Max.
Score', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaximumFPS' => 'Maximum FPS', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'Max' => 'Max', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MediumBW' => 'Medium B/W', + 'Medium' => 'Medium', + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Minimum blobs should be less than maximum', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'Misc', + 'MonitorIds' => 'Monitor Ids', + 'Monitor' => 'Monitor', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for the current monitor.

', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', + 'MonitorProbe' => 'Monitor Probe', + 'Monitors' => 'Monitors', + 'Montage' => 'Montage', + 'Month' => 'Month', + 'Move' => 'Move', + 'MustBeGe' => 'must be greater than or equal to', + 'MustBeLe' => 'must be less than or equal to', + 'MustConfirmPassword' => 'You must confirm the password', + 'MustSupplyPassword' => 'You must supply a password', + 'MustSupplyUsername' => 'You must supply a username', + 'Name' => 'Name', + 'Near' => 'Near', + 'Network' => 'Network', + 'NewGroup' => 'New Group', + 'NewLabel' => 'New Label', + 'New' => 'New', + 'NewPassword' => 'New Password', + 'NewState' => 'New State', + 'NewUser' => 'New User', + 'Next' => 'Next', + 'NoDetectedCameras' => 'No Detected Cameras', + 'NoFramesRecorded' => 'There are no frames recorded for this event', + 'NoGroup' => 'No Group', + 'NoneAvailable' => 'None available', + 'None' => 'None', + 'No' => 'No', + 'Normal' => 'Normal', + 'NoSavedFilters' => 'NoSavedFilters', + 'NoStatisticsRecorded' => 'There are no statistics recorded for this event/frame', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'Open' => 'Open', + 'OpEq' => 'equal to', + 'OpGtEq' => 'greater than or equal to', + 'OpGt' => 'greater than', + 'OpIn' => 'in set', + 'OpLtEq' => 'less than or equal to', + 'OpLt' => 'less than', + 'OpMatches' => 'matches', + 'OpNe' => 'not equal to', + 'OpNotIn' => 'not in set', + 'OpNotMatches' => 'does not match', + 'OptionHelp' => 'Option Help', + 'OptionRestartWarning' => 'These changes may not come into effect fully\nwhile the system is running. When you have\nfinished making your changes please ensure that\nyou restart ZoneMinder.', + 'Options' => 'Options', + 'Order' => 'Order', + 'OrEnterNewName' => 'or enter new name', + 'Orientation' => 'Orientation', + 'Out' => 'Out', + 'OverwriteExisting' => 'Overwrite Existing', + 'Paged' => 'Paged', + 'PanLeft' => 'Pan Left', + 'Pan' => 'Pan', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Parameter', + 'Password' => 'Password', + 'PasswordsDifferent' => 'The new and confirm passwords are different', + 'Paths' => 'Paths', + 'Pause' => 'Pause', + 'PhoneBW' => 'Phone B/W', + 'Phone' => 'Phone', + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pixels', + 'PlayAll' => 'Play All', + 'Play' => 'Play', + 'PleaseWait' => 'Please Wait', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'Post Event Image Count', + 'PreEventImageBuffer' => 'Pre Event Image Count', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'Prev', + 'Probe' => 'Probe', + 'Protocol' => 'Protocol', + 'Rate' => 'Rate', + 'Real' => 'Real', + 'Record' => 'Record', + 'RefImageBlendPct' => 'Reference Image Blend %ge', + 'Refresh' => 'Refresh', + 'RemoteHostName' => 'Remote Host Name', + 'RemoteHostPath' => 'Remote Host Path', + 'RemoteHostSubPath' => 'Remote Host SubPath', + 'RemoteHostPort' => 'Remote Host Port', + 'RemoteImageColours' => 'Remote Image Colours', + 'RemoteMethod' => 'Remote Method', + 'RemoteProtocol' => 'Remote Protocol', + 'Remote' => 'Remote', + 'Rename' => 'Rename', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'Replay' => 'Replay', + 'ReplaySingle' => 'Single Event', + 'ResetEventCounts' => 'Reset Event Counts', + 'Reset' => 'Reset', + 'Restarting' => 'Restarting', + 'Restart' => 'Restart', + 'RestrictedCameraIds' => 'Restricted Camera Ids', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Rotate Left', + 'RotateRight' => 'Rotate Right', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', + 'RunMode' => 'Run Mode', + 'Running' => 'Running', + 'RunState' => 'Run State', + 'SaveAs' => 'Save as', + 'SaveFilter' => 'Save Filter', + 'Save' => 'Save', + 'Scale' => 'Scale', + 'Score' => 'Score', + 'Secs' => 'Secs', + 'Sectionlength' => 'Section length', + 'SelectMonitors' => 'Select Monitors', + 'Select' => 'Select', + 'SelectFormat' => 'Select Format', + 'SelectLog' => 'Select Log', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'SetNewBandwidth' => 'Set New Bandwidth', + 'SetPreset' => 'Set Preset', + 'Set' => 'Set', + 'Settings' => 'Settings', + 'ShowFilterWindow' => 'Show Filter Window', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', + 'Sleep' => 'Sleep', + 'SortAsc' => 'Asc', + 'SortBy' => 'Sort by', + 'SortDesc' => 'Desc', + 'Source' => 'Source', + 'SourceColours' => 'Source Colours', + 'SourcePath' => 'Source Path', + 'SourceType' => 'Source Type', + 'SpeedHigh' => 'High Speed', + 'SpeedLow' => 'Low Speed', + 'SpeedMedium' => 'Medium Speed', + 'Speed' => 'Speed', + 'SpeedTurbo' => 'Turbo Speed', + 'Start' => 'Start', + 'State' => 'State', + 'Stats' => 'Stats', + 'Status' => 'Status', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Step' => 'Step', + 'Stills' => 'Stills', + 'Stopped' => 'Stopped', + 'Stop' => 'Stop', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Stream' => 'Stream', + 'Submit' => 'Submit', + 'System' => 'System', + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'TimeDelta' => 'Time Delta', + 'Timeline' => 'Timeline', + 'TimestampLabelFormat' => 'Timestamp Label Format', + 'TimestampLabelX' => 'Timestamp Label X', + 'TimestampLabelY' => 'Timestamp Label Y', + 'Timestamp' => 'Timestamp', + 'TimeStamp' => 'Time Stamp', + 'Time' => 'Time', + 'Today' => 'Today', + 'Tools' => 'Tools', + 'Total' => 'Total', + 'TotalBrScore' => 'Total
Score', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Triggers', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'Type', + 'Unarchive' => 'Unarchive', + 'Undefined' => 'Undefined', + 'Units' => 'Units', + 'Unknown' => 'Unknown', + 'UpdateAvailable' => 'An update to ZoneMinder is available.', + 'UpdateNotNecessary' => 'No update is necessary.', + 'Update' => 'Update', + 'Upload' => 'Upload', + 'Updated' => 'Updated', + 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Use ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UseFilter' => 'Use Filter', + 'Username' => 'Username', + 'Users' => 'Users', + 'User' => 'User', + 'Value' => 'Value', + 'VersionIgnore' => 'Ignore this version', + 'VersionRemindDay' => 'Remind again in 1 day', + 'VersionRemindHour' => 'Remind again in 1 hour', + 'VersionRemindNever' => 'Don\'t remind about new versions', + 'VersionRemindWeek' => 'Remind again in 1 week', + 'Version' => 'Version', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'Video Generation Failed!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'Video Generation Parameters', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'Video Size', + 'Video' => 'Video', + 'ViewAll' => 'View All', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'View Paged', + 'View' => 'View', + 'Wake' => 'Wake', + 'WarmupFrames' => 'Warmup Frames', + 'Watch' => 'Watch', + 'WebColour' => 'Web Colour', + 'Web' => 'Web', + 'Week' => 'Week', + 'WhiteBalance' => 'White Balance', + 'White' => 'White', + 'Wide' => 'Wide', + 'X10ActivationString' => 'X10 Activation String', + 'X10InputAlarmString' => 'X10 Input Alarm String', + 'X10OutputAlarmString' => 'X10 Output Alarm String', + 'X10' => 'X10', + 'X' => 'X', + 'Yes' => 'Yes', + 'YouNoPerms' => 'You do not have permissions to access this resource.', + 'Y' => 'Y', + 'ZoneAlarmColour' => 'Alarm Colour (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinderLog' => 'ZoneMinder Log', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zones', + 'Zone' => 'Zone', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', + 'Zoom' => 'Zoom', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Current login is \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Last %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'The latest release is v%1$s, you have v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Monitor %1$s Function', + 'RunningRecentVer' => 'You are running the most recent version of ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// 'Potato' => array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ), +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Events', 1=>'Event', 2=>'Events' ), + 'Monitor' => array( 0=>'Monitors', 1=>'Monitor', 2=>'Monitors' ), +); +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $CLANG['MonitorCount'], count($monitors), zmVlang( $VLANG['VlangMonitor'], count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/es_ar.php b/web/lang/es_ar.php index 452f7d1ef..fca303cc7 100644 --- a/web/lang/es_ar.php +++ b/web/lang/es_ar.php @@ -215,6 +215,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Duración', @@ -478,6 +479,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Play All', 'PleaseWait' => 'Espere por favor', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'Buffer Imagenes despues evento', 'PreEventImageBuffer' => 'Buffer Imagenes antes evento', @@ -603,6 +605,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'No se requiere Actualización', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Usar Filtro', 'UseFilterExprsPost' => ' filtrar sentencias', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Utilizar ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/es_ar.php.orig b/web/lang/es_ar.php.orig new file mode 100644 index 000000000..452f7d1ef --- /dev/null +++ b/web/lang/es_ar.php.orig @@ -0,0 +1,699 @@ + 'Color 24 bits', + '32BitColour' => 'Color 32 bits', // Added - 2011-06-15 + '8BitGrey' => 'Grises 8 bits', + 'Action' => 'Action', + 'Actual' => 'Actual', + 'AddNewControl' => 'Add New Control', + 'AddNewMonitor' => 'Agregar Nuevo Monitor', + 'AddNewUser' => 'Agregar Nuevo Usuario', + 'AddNewZone' => 'Agregar Nueva Zona', + 'Alarm' => 'Alarma', + 'AlarmBrFrames' => 'Alarma
Cuadros', + 'AlarmFrame' => 'Cuadro Alarma', + 'AlarmFrameCount' => 'Alarm Frame Count', + 'AlarmLimits' => 'Alarm Limits', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Alarm Px', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Alerta', + 'All' => 'Todo', + 'Apply' => 'Aplicar', + 'ApplyingStateChange' => 'Aplicar Cambio Estado', + 'ArchArchived' => 'Solo Archivados', + 'ArchUnarchived' => 'Solo Sin Archivar', + 'Archive' => 'Archivar', + 'Archived' => 'Archived', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Alarm Frames', + 'AttrArchiveStatus' => 'Estado Archivo', + 'AttrAvgScore' => 'Puntaje Prom.', + 'AttrCause' => 'Cause', + 'AttrDate' => 'Fecha', + 'AttrDateTime' => 'Fecha/Hora', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Percent', + 'AttrDuration' => 'Duración', + 'AttrFrames' => 'Cuadros', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Puntaje Máximo', + 'AttrMonitorId' => 'Monitor Id', + 'AttrMonitorName' => 'Nombre Monitor', + 'AttrName' => 'Name', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Hora', + 'AttrTotalScore' => 'Puntaje Total', + 'AttrWeekday' => 'Día Semana', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'Punt.
Promedio', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Los nombres pueden contener solamente caracteres alfanuméricos más el guión y la raya', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'Velocidad', + 'BlobPx' => 'Blob Px', + 'BlobSizes' => 'Blob Sizes', + 'Blobs' => 'Blobs', + 'Brightness' => 'Brillo', + 'Buffers' => 'Buffers', + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'CanFocus' => 'Can Focus', + 'CanFocusAbs' => 'Can Focus Absolute', + 'CanFocusCon' => 'Can Focus Continuous', + 'CanFocusRel' => 'Can Focus Relative', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'Can Move', + 'CanMoveAbs' => 'Can Move Absolute', + 'CanMoveCon' => 'Can Move Continuous', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relative', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoom' => 'Can Zoom', + 'CanZoomAbs' => 'Can Zoom Absolute', + 'CanZoomCon' => 'Can Zoom Continuous', + 'CanZoomRel' => 'Can Zoom Relative', + 'Cancel' => 'Cancelar', + 'CancelForcedAlarm' => 'Cancelar Alarma Forzada', + 'CaptureHeight' => 'Captura Alto', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Captura Paleta', + 'CaptureWidth' => 'Captura Ancho', + 'Cause' => 'Cause', + 'CheckMethod' => 'Alarm Check Method', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Elegir Filtro', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Cerrar', + 'Colour' => 'Color', + 'Command' => 'Command', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Config.', + 'ConfiguredFor' => 'Configurado Para', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Confirmar Contraseña', + 'ConjAnd' => 'y', + 'ConjOr' => 'o', + 'Console' => 'Console', + 'ContactAdmin' => 'Contacte el Administrador para detalles.', + 'Continue' => 'Continue', + 'Contrast' => 'Contraste', + 'Control' => 'Control', + 'ControlAddress' => 'Control Address', + 'ControlCap' => 'Control Capability', + 'ControlCaps' => 'Control Capabilities', + 'ControlDevice' => 'Control Device', + 'ControlType' => 'Control Type', + 'Controllable' => 'Controllable', + 'Cycle' => 'Cycle', + 'CycleWatch' => 'Cycle Watch', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Día', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'Borrar', + 'DeleteAndNext' => 'Borrar & Próximo', + 'DeleteAndPrev' => 'Borrar & Anterior', + 'DeleteSavedFilter' => 'Borrar Filtro Guardado', + 'Description' => 'Descripción', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Canal', + 'DeviceFormat' => 'Señal', + 'DeviceNumber' => 'Fuente', + 'DevicePath' => 'Device Path', + 'Devices' => 'Devices', + 'Dimensions' => 'Dimensiones', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Disco', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Duración', + 'Edit' => 'Editar', + 'Email' => 'Email', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Habilitado', + 'EnterNewFilterName' => 'Ingresar Nuevo Nombre De Filtro', + 'Error' => 'Error', + 'ErrorBrackets' => 'Error, Revisar si tiene la misma cantidad de paréntesis de apertura', + 'ErrorValidValue' => 'Error, Revisar si los términos tienen nombres validos', + 'Etc' => 'etc', + 'Event' => 'Evento', + 'EventFilter' => 'Filtro de Evento', + 'EventId' => 'Event Id', + 'EventName' => 'Event Name', + 'EventPrefix' => 'Event Prefix', + 'Events' => 'Eventos', + 'Exclude' => 'Excluir', + 'Execute' => 'Execute', + 'Export' => 'Export', + 'ExportDetails' => 'Export Event Details', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'Exporting', + 'FPS' => 'fps', + 'FPSReportInterval' => 'Intervalo de Reporte FPS', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Vista', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Archivar todos los eventos', + 'FilterDeleteEvents' => 'Borrar todos los eventos', + 'FilterEmailEvents' => 'Mandar un mail de todos los eventos', + 'FilterExecuteEvents' => 'Ejecutar un comando en las coincidencias', + 'FilterMessageEvents' => 'Mandar un mensaje de los eventos', + 'FilterPx' => 'Filtro Px', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Subir los eventos que coincidan', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filters', + 'First' => 'Primero', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Focus', + 'ForceAlarm' => 'Forzar Alarma', + 'Format' => 'Format', + 'Frame' => 'Cuadro', + 'FrameId' => 'Id Cuadro', + 'FrameRate' => 'Velocidad del video', + 'FrameSkip' => 'Saltear Cuadro', + 'Frames' => 'Cuadros', + 'Func' => 'Func', + 'Function' => 'Función', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'Crear Video', + 'GeneratingVideo' => 'Creando Video', + 'GoToZoneMinder' => 'Ir a Zoneminder.com', + 'Grey' => 'Gris', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'High' => 'Alta', + 'HighBW' => 'Alta B/W', + 'Home' => 'Home', + 'Hour' => 'Hora', + 'Hue' => 'Saturación', + 'Id' => 'Id', + 'Idle' => 'Pasivo', + 'Ignore' => 'Ignorar', + 'Image' => 'Imagen', + 'ImageBufferSize' => 'Tamaño del Buffer de Imagen', + 'Images' => 'Images', + 'In' => 'In', + 'Include' => 'Incluir', + 'Inverted' => 'Invertido', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Lenguaje', + 'Last' => 'Ultimo', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'Resultados;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Solo los primeros', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Carga', + 'Local' => 'Local', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Registrado Como', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Ingresando', + 'Login' => 'Ingresar', + 'Logout' => 'Salir', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Baja', + 'LowBW' => 'Baja B/W', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'Marca', + 'Max' => 'Max', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'Puntaje
Max.', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => 'Maximos FPS', + 'Medium' => 'Media', + 'MediumBW' => 'Media B/W', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Minimum blobs should be less than maximum', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'Otros', + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Ids Monitor', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Monitores', + 'Montage' => 'Cámara Múltiple', + 'Month' => 'Mes', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Move', + 'MustBeGe' => 'Debe ser mayor o igual que', + 'MustBeLe' => 'Debe ser menor o igual que', + 'MustConfirmPassword' => 'Debe confirmar la contraseña', + 'MustSupplyPassword' => 'Debe ingresar una contraseña', + 'MustSupplyUsername' => 'You must supply a username', // Added - 2009-02-08 + 'Name' => 'Nombre', + 'Near' => 'Near', + 'Network' => 'Red', + 'New' => 'Nuevo', + 'NewGroup' => 'New Group', + 'NewLabel' => 'New Label', + 'NewPassword' => 'Nueva Contraseña', + 'NewState' => 'Nuevo Estado', + 'NewUser' => 'Nuevo Usuario', + 'Next' => 'Siguiente', + 'No' => 'No', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'No hay movimientos grabados para este evento', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => 'FiltrosNoGuardados', + 'NoStatisticsRecorded' => 'No hay estadisticas guardadas para este evento/marco', + 'None' => 'Ninguno', + 'NoneAvailable' => 'Ninguno Disponible', + 'Normal' => 'Normal', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'igual que', + 'OpGt' => 'mayor que', + 'OpGtEq' => 'mayor o igual que', + 'OpIn' => 'En sistema', + 'OpLt' => 'menor que', + 'OpLtEq' => 'menor o igual que', + 'OpMatches' => 'Coincide', + 'OpNe' => 'distinto que', + 'OpNotIn' => 'No en sistema', + 'OpNotMatches' => 'No coincide', + 'Open' => 'Open', + 'OptionHelp' => 'Ayuda', + 'OptionRestartWarning' => 'Estos cambios no se guardaran completamente\nmientras el sistema se ejecute. Cuando termine\nde realizar los cambios asegurese de\nreiniciar Zoneminder.', + 'Options' => 'Opciones', + 'OrEnterNewName' => 'o agregue nombre', + 'Order' => 'Order', + 'Orientation' => 'Orientación', + 'Out' => 'Out', + 'OverwriteExisting' => 'Sobreescribir Exitente', + 'Paged' => 'Paged', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Parametro', + 'Password' => 'Contraseña', + 'PasswordsDifferent' => 'Las contraseñas nueva y de confirmacion son diferentes', + 'Paths' => 'Enlaces', + 'Pause' => 'Pause', + 'Phone' => 'Phone', + 'PhoneBW' => 'Tel. B/N', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', // Added - 2009-02-08 + 'Pixels' => 'pixels', + 'Play' => 'Play', + 'PlayAll' => 'Play All', + 'PleaseWait' => 'Espere por favor', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'Buffer Imagenes despues evento', + 'PreEventImageBuffer' => 'Buffer Imagenes antes evento', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'Prev', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Ritmo', + 'Real' => 'Real', + 'Record' => 'Registro', + 'RefImageBlendPct' => 'Reference Image Blend %ge', + 'Refresh' => 'Actualizar', + 'Remote' => 'Remote', + 'RemoteHostName' => 'Nombre Servidor Remoto', + 'RemoteHostPath' => 'Enlace Servidor Remoto', + 'RemoteHostPort' => 'Puerto Servidor Remoto', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Remote Image Colours', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Renombrar', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => 'Borrar Contador Eventos', + 'Restart' => 'Reiniciar', + 'Restarting' => 'Reiniciando', + 'RestrictedCameraIds' => 'Id. Camara restringida', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Rotar a la derecha', + 'RotateRight' => 'Rotar a la izquierda', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Metodo Ejecucion', + 'RunState' => 'Estado de Ejecución', + 'Running' => 'Ejecutando', + 'Save' => 'Guardar', + 'SaveAs' => 'Guardar Como', + 'SaveFilter' => 'Guardar Filtro', + 'Scale' => 'Escala', + 'Score' => 'Res.', + 'Secs' => 'Seg', + 'Sectionlength' => 'Longitud Sección', + 'Select' => 'Select', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Set', + 'SetNewBandwidth' => 'Nuevo Ancho de Banda', + 'SetPreset' => 'Set Preset', + 'Settings' => 'Configuracion', + 'ShowFilterWindow' => 'Abrir Filtro', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Asc', + 'SortBy' => 'Ordenar por', + 'SortDesc' => 'Desc', + 'Source' => 'Origen', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Tipo Origen', + 'Speed' => 'Speed', + 'SpeedHigh' => 'High Speed', + 'SpeedLow' => 'Low Speed', + 'SpeedMedium' => 'Medium Speed', + 'SpeedTurbo' => 'Turbo Speed', + 'Start' => 'Iniciar', + 'State' => 'Estado', + 'Stats' => 'Est.', + 'Status' => 'Estado', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => 'Fotos', + 'Stop' => 'Desactivar', + 'Stopped' => 'Apagado', + 'Stream' => 'Stream', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => 'Sistema', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => 'Hora', + 'TimeDelta' => 'Hora Delta', + 'TimeStamp' => 'Etiqueta Hora', + 'Timeline' => 'Timeline', + 'Timestamp' => 'Etiqueta Hora', + 'TimestampLabelFormat' => 'Formato Etiqueta Hora', + 'TimestampLabelX' => 'Eje X Etiqueta Hora', + 'TimestampLabelY' => 'Eje Y Etiqueta Hora', + 'Today' => 'Today', + 'Tools' => 'Herra.', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Total
puntuación', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Gatillos', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'Tipo', + 'Unarchive' => 'Desarchivar', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Unidades', + 'Unknown' => 'Desconocido', + 'Update' => 'Update', + 'UpdateAvailable' => 'Una Actualización a ZoneMinder esta disponible', + 'UpdateNotNecessary' => 'No se requiere Actualización', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Usar Filtro', + 'UseFilterExprsPost' => ' filtrar sentencias', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Utilizar ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Usuario', + 'Username' => 'Nombre', + 'Users' => 'Usuarios', + 'Value' => 'Valor', + 'Version' => 'Versión', + 'VersionIgnore' => 'Ignore esta versión', + 'VersionRemindDay' => 'Recordar en 1 día', + 'VersionRemindHour' => 'Recordar en 1 hora', + 'VersionRemindNever' => 'No avizar de nuevas versiones', + 'VersionRemindWeek' => 'Recordar en 1 semana', + 'Video' => 'Video', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'Fallo la creacion del video!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'Parametros Generacion Video', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'Tamaño Video', + 'View' => 'Ver', + 'ViewAll' => 'Ver Todo', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'View Paged', + 'Wake' => 'Wake', + 'WarmupFrames' => 'Avisos Movimiento', + 'Watch' => 'Monitor', + 'Web' => 'Web', + 'WebColour' => 'Web Colour', + 'Week' => 'Semana', + 'White' => 'White', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 Comando Activación', + 'X10InputAlarmString' => 'X10 Comando Entrada Alarma', + 'X10OutputAlarmString' => 'X10 Output Alarm String', + 'Y' => 'Y', + 'Yes' => 'Si', + 'YouNoPerms' => 'No tiene permisos para acceder a este recurso.', + 'Zone' => 'Zona', + 'ZoneAlarmColour' => 'Color Alarma (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zonas', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Usuario actual es \'%1$s\'', + 'EventCount' => '%1$s %2$s', + 'LastEvents' => 'Ultimo %1$s %2$s', + 'LatestRelease' => 'The latest release is v%1$s, you have v%2$s.', + 'MonitorCount' => '%1$s %2$s', + 'MonitorFunction' => 'Monitor %1$s Funcion', + 'RunningRecentVer' => 'You are running the most recent version of Zoneminder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Eventos', 1=>'Evento', 2=>'Eventos' ), + 'Monitor' => array( 0=>'Monitores', 1=>'Monitor', 2=>'Monitores' ), +); + +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +$OLANG = array( +); + +?> diff --git a/web/lang/et_ee.php b/web/lang/et_ee.php index a6d23903e..0a1e2a09d 100644 --- a/web/lang/et_ee.php +++ b/web/lang/et_ee.php @@ -523,6 +523,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Play All', 'PleaseWait' => 'Please Wait', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'Post Event Image Count', 'PreEventImageBuffer' => 'Pre Event Image Count', diff --git a/web/lang/fr_fr.php b/web/lang/fr_fr.php index 97dfe5e6e..666373cbd 100644 --- a/web/lang/fr_fr.php +++ b/web/lang/fr_fr.php @@ -264,6 +264,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Durée', @@ -527,6 +528,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Play All', 'PleaseWait' => 'Attendez', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'Post Event Image Count', 'PreEventImageBuffer' => 'Pre Event Image Count', @@ -652,6 +654,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Pas de mise à jour dispo.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Util. Filtre', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Util. ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/fr_fr.php.orig b/web/lang/fr_fr.php.orig new file mode 100644 index 000000000..97dfe5e6e --- /dev/null +++ b/web/lang/fr_fr.php.orig @@ -0,0 +1,846 @@ + 'Couleur 24 bit', + '32BitColour' => 'Couleur 32 bit', // Added - 2011-06-15 + '8BitGrey' => 'Gris 8 bit', + 'Action' => 'Action', + 'Actual' => 'Réel', + 'AddNewControl' => 'Add New Control', + 'AddNewMonitor' => 'Aj. nouv. écran', + 'AddNewUser' => 'Aj. nouv. util.', + 'AddNewZone' => 'Aj. nouv. zone', + 'Alarm' => 'Alarme', + 'AlarmBrFrames' => 'Images
alarme', + 'AlarmFrame' => 'Image alarme', + 'AlarmFrameCount' => 'Alarm Frame Count', + 'AlarmLimits' => 'Limites alarme', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Px Alarme', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Alerte', + 'All' => 'Tous', + 'Apply' => 'Appliquer', + 'ApplyingStateChange' => 'Appl. chgt état', + 'ArchArchived' => 'Archivé seul.', + 'ArchUnarchived' => 'Non-arch. seul.', + 'Archive' => 'Archiver', + 'Archived' => 'Archived', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Images alarme', + 'AttrArchiveStatus' => 'Etat Archive', + 'AttrAvgScore' => 'Score moy.', + 'AttrCause' => 'Cause', + 'AttrDate' => 'Date', + 'AttrDateTime' => 'Date/temps', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Percent', + 'AttrDuration' => 'Durée', + 'AttrFrames' => 'Images', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Score max.', + 'AttrMonitorId' => 'N° écran', + 'AttrMonitorName' => 'Nom écran', + 'AttrName' => 'Name', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Temps', + 'AttrTotalScore' => 'Score total', + 'AttrWeekday' => 'Semaine', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'Score
moy.', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Les noms ne peuvent contenir que des lettres, chiffres, trait d\'union ou souligné', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'Bande-pass.', + 'BlobPx' => 'Px forme', + 'BlobSizes' => 'Taille forme', + 'Blobs' => 'Formes', + 'Brightness' => 'Luminosité;', + 'Buffers' => 'Tampons', + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'CanFocus' => 'Can Focus', + 'CanFocusAbs' => 'Can Focus Absolute', + 'CanFocusCon' => 'Can Focus Continuous', + 'CanFocusRel' => 'Can Focus Relative', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'Can Move', + 'CanMoveAbs' => 'Can Move Absolute', + 'CanMoveCon' => 'Can Move Continuous', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relative', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoom' => 'Can Zoom', + 'CanZoomAbs' => 'Can Zoom Absolute', + 'CanZoomCon' => 'Can Zoom Continuous', + 'CanZoomRel' => 'Can Zoom Relative', + 'Cancel' => 'Annul.', + 'CancelForcedAlarm' => 'Annul. Forcé Alarme', + 'CaptureHeight' => 'Haut. capture', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'palette capture', + 'CaptureWidth' => 'Larg. capture', + 'Cause' => 'Cause', + 'CheckMethod' => 'Méthode vérif. alarme', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Choisir filtre', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Fermer', + 'Colour' => 'Couleur', + 'Command' => 'Command', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Config', + 'ConfiguredFor' => 'Configuré pour', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Confirmer mt de pass.', + 'ConjAnd' => 'et', + 'ConjOr' => 'ou', + 'Console' => 'Console', + 'ContactAdmin' => 'Contactez votre administrateur SVP', + 'Continue' => 'Continue', + 'Contrast' => 'Contraste', + 'Control' => 'Control', + 'ControlAddress' => 'Control Address', + 'ControlCap' => 'Control Capability', + 'ControlCaps' => 'Control Capabilities', + 'ControlDevice' => 'Control Device', + 'ControlType' => 'Control Type', + 'Controllable' => 'Controllable', + 'Cycle' => 'Cycle', + 'CycleWatch' => 'Cycle vision', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Jour', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'Eff.', + 'DeleteAndNext' => 'Eff. & suiv.', + 'DeleteAndPrev' => 'Eff. & prec.', + 'DeleteSavedFilter' => 'Eff. filtre sauvé', + 'Description' => 'Description', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Canal caméra', + 'DeviceFormat' => 'Format caméra', + 'DeviceNumber' => 'Numéro caméra', + 'DevicePath' => 'Device Path', + 'Devices' => 'Devices', + 'Dimensions' => 'Dimensions', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Disk', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Durée', + 'Edit' => 'Editer', + 'Email' => 'Courriel', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Activé', + 'EnterNewFilterName' => 'Entrer nom nouv. filtre', + 'Error' => 'Erreur', + 'ErrorBrackets' => 'Erreur, vérifiez que toutes les parenthèses ouvertes sont fermées', + 'ErrorValidValue' => 'Erreur, vérifiez que tous les termes ont une valeur valide', + 'Etc' => 'etc', + 'Event' => 'Evènt', + 'EventFilter' => 'Filtre evènt', + 'EventId' => 'Event Id', + 'EventName' => 'Event Name', + 'EventPrefix' => 'Event Prefix', + 'Events' => 'Evènts', + 'Exclude' => 'Exclure', + 'Execute' => 'Execute', + 'Export' => 'Export', + 'ExportDetails' => 'Export Event Details', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'Exporting', + 'FPS' => 'i/s', + 'FPSReportInterval' => 'FPS Report Interval', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Feed', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Archive all matches', + 'FilterDeleteEvents' => 'Delete all matches', + 'FilterEmailEvents' => 'Email details of all matches', + 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterMessageEvents' => 'Message details of all matches', + 'FilterPx' => 'Filter Px', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Upload all matches', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filters', + 'First' => 'Prem.', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Focus', + 'ForceAlarm' => 'Force Alarme', + 'Format' => 'Format', + 'Frame' => 'Image', + 'FrameId' => 'N° image', + 'FrameRate' => 'Débit image', + 'FrameSkip' => 'Saut image', + 'Frames' => 'images', + 'Func' => 'Fct', + 'Function' => 'Fonction', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'Générer Vidéo', + 'GeneratingVideo' => 'Génération Vidéo', + 'GoToZoneMinder' => 'Aller sur ZoneMinder.com', + 'Grey' => 'Gris', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'High' => 'Haut', + 'HighBW' => 'Haut N/B', + 'Home' => 'Home', + 'Hour' => 'Heure', + 'Hue' => 'Teinte', + 'Id' => 'N°', + 'Idle' => 'Vide', + 'Ignore' => 'Ignorer', + 'Image' => 'Image', + 'ImageBufferSize' => 'Taille tampon image', + 'Images' => 'Images', + 'In' => 'In', + 'Include' => 'Inclure', + 'Inverted' => 'Inversé', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Langue', + 'Last' => 'Dernier', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Load', + 'Local' => 'Local', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Connecté cô', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Connexion', + 'Login' => 'Login', + 'Logout' => 'Déconnexion', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Bas', + 'LowBW' => 'Basse N/B', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'Marque', + 'Max' => 'Max', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'Score
max', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => 'i/s maximum', + 'Medium' => 'Medium', + 'MediumBW' => 'Moy. N/B', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Aire blob min. doit ê < aire blob maximum', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Blobs min. doit ê < blobs max.', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'Seuil pixel min. doit ê < seuil pixel max.', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'Div.', + 'Monitor' => 'Ecran', + 'MonitorIds' => 'N° écran', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Ecrans', + 'Montage' => 'Montage', + 'Month' => 'Mois', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Move', + 'MustBeGe' => 'doit être sup. ou égal à', + 'MustBeLe' => 'doit être inf. ou égal à', + 'MustConfirmPassword' => 'Confirmez le mot de passe', + 'MustSupplyPassword' => 'Entrez un mot de passe', + 'MustSupplyUsername' => 'Entrez un nom d\'utilisateur', + 'Name' => 'Nom', + 'Near' => 'Near', + 'Network' => 'Réseau', + 'New' => 'Nouv.', + 'NewGroup' => 'New Group', + 'NewLabel' => 'New Label', + 'NewPassword' => 'Nouv. mt de passe', + 'NewState' => 'Nv état', + 'NewUser' => 'Nv util.', + 'Next' => 'Suiv.', + 'No' => 'Non', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Pas d\'image enregistrée pour cet évènement', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => 'Pasfiltressauv', + 'NoStatisticsRecorded' => 'Pas de statistiques disponibles pour cet évènmnt/imag.', + 'None' => 'Aucun', + 'NoneAvailable' => 'Aucun disponible', + 'Normal' => 'Normal', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'égal à', + 'OpGt' => 'sup. à', + 'OpGtEq' => 'plus grand ou égal à', + 'OpIn' => 'en lot', + 'OpLt' => 'inf. à', + 'OpLtEq' => 'inf. ou égal à', + 'OpMatches' => 'correspond', + 'OpNe' => 'diff. de', + 'OpNotIn' => 'pas en lot', + 'OpNotMatches' => 'ne correspond pas', + 'Open' => 'Open', + 'OptionHelp' => 'OptionAide', + 'OptionRestartWarning' => 'These changes may not come into effect fully\nwhile the system is running. When you have\nfinished making your changes please ensure that\nyou restart ZoneMinder.', + 'Options' => 'Options', + 'OrEnterNewName' => 'ou entrez nv nom', + 'Order' => 'Order', + 'Orientation' => 'Orientation', + 'Out' => 'Out', + 'OverwriteExisting' => 'Ecraser l\'existant', + 'Paged' => 'Paged', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Paramètre', + 'Password' => 'Mt de passe', + 'PasswordsDifferent' => 'Les 2 mots de passe sont différents', + 'Paths' => 'Paths', + 'Pause' => 'Pause', + 'Phone' => 'Phone', + 'PhoneBW' => 'Phone B/W', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pixels', + 'Play' => 'Play', + 'PlayAll' => 'Play All', + 'PleaseWait' => 'Attendez', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'Post Event Image Count', + 'PreEventImageBuffer' => 'Pre Event Image Count', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'Prec.', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Débit', + 'Real' => 'Réel', + 'Record' => 'Enreg.', + 'RefImageBlendPct' => 'Reference Image Blend %ge', + 'Refresh' => 'Rafraîchir', + 'Remote' => 'Remote', + 'RemoteHostName' => 'Remote Host Name', + 'RemoteHostPath' => 'Remote Host Path', + 'RemoteHostPort' => 'Remote Host Port', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Remote Image Colours', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Renommer', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => 'Rem. à 0 comptage des évts', + 'Restart' => 'Redémarrer', + 'Restarting' => 'Redémarrage', + 'RestrictedCameraIds' => 'N° caméras confid.', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Rotation g.', + 'RotateRight' => 'Rotation d.', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Run Mode', + 'RunState' => 'Run State', + 'Running' => 'Ca tourne', + 'Save' => 'Enr.', + 'SaveAs' => 'Enr. ss', + 'SaveFilter' => 'Save Filter', + 'Scale' => 'Echelle', + 'Score' => 'Score', + 'Secs' => 'Secs', + 'Sectionlength' => 'Longueur section', + 'Select' => 'Select', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Set', + 'SetNewBandwidth' => 'Régler la bande passante', + 'SetPreset' => 'Set Preset', + 'Settings' => 'Réglages', + 'ShowFilterWindow' => 'Montrerfen.filtre', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Asc', + 'SortBy' => 'Sort by', + 'SortDesc' => 'Desc', + 'Source' => 'Source', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Source Type', + 'Speed' => 'Speed', + 'SpeedHigh' => 'High Speed', + 'SpeedLow' => 'Low Speed', + 'SpeedMedium' => 'Medium Speed', + 'SpeedTurbo' => 'Turbo Speed', + 'Start' => 'Démarrer', + 'State' => 'Etat', + 'Stats' => 'Stats', + 'Status' => 'Statut', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => 'Photos', + 'Stop' => 'Stop', + 'Stopped' => 'Arrêté', + 'Stream' => 'Flux', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => 'Système', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => 'Temps', + 'TimeDelta' => 'Time Delta', + 'TimeStamp' => 'Time Stamp', + 'Timeline' => 'Timeline', + 'Timestamp' => 'Timestamp', + 'TimestampLabelFormat' => 'Timestamp Label Format', + 'TimestampLabelX' => 'Timestamp Label X', + 'TimestampLabelY' => 'Timestamp Label Y', + 'Today' => 'Today', + 'Tools' => 'Outils', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Score
total', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Déclenchements', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'Type', + 'Unarchive' => 'Désarchiv.', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Unités', + 'Unknown' => 'Inconnu', + 'Update' => 'Update', + 'UpdateAvailable' => 'Mise à jour de ZM dispo.', + 'UpdateNotNecessary' => 'Pas de mise à jour dispo.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Util. Filtre', + 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Util. ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Util.', + 'Username' => 'nom util.', + 'Users' => 'Utils', + 'Value' => 'Valeur', + 'Version' => 'Version', + 'VersionIgnore' => 'Ignorer cette version', + 'VersionRemindDay' => 'Me rappeler ds 1 j.', + 'VersionRemindHour' => 'Me rappleler dans 1 h.', + 'VersionRemindNever' => 'Ne pas avertir des nvelles versions', + 'VersionRemindWeek' => 'Me rappeler ds 1 sem.', + 'Video' => 'Vidéo', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'Echec génération vidéo!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'Paramètres génération vidéo', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'taille vidéo', + 'View' => 'Voir', + 'ViewAll' => 'Voir tt', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'Vue recherchée', + 'Wake' => 'Wake', + 'WarmupFrames' => 'Images test', + 'Watch' => 'Regarder', + 'Web' => 'Web', + 'WebColour' => 'Web Colour', + 'Week' => 'Semaine', + 'White' => 'White', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10:chaîne activation', + 'X10InputAlarmString' => 'X10:chaîne alarme entrée', + 'X10OutputAlarmString' => 'X10:chaîne alarme sortie', + 'Y' => 'Y', + 'Yes' => 'Oui', + 'YouNoPerms' => 'Permissions nécessaires pour cette ressource.', + 'Zone' => 'Zone', + 'ZoneAlarmColour' => 'Couleur alarme (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zones', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Util. Actuel: \'%1$s\'', + 'EventCount' => '%1$s %2$s', // par ex. '37 évènts' (voir Vlang ci-dessous) + 'LastEvents' => '%1$s derniers %2$s', // par ex. '37 derniers évènts' (voir Vlang ci-dessous) + 'LatestRelease' => 'La dernière version est v%1$s, vous avez v%2$s.', + 'MonitorCount' => '%1$s %2$s', // par exemple '4 écrans' (voir Vlang ci-dessous) + 'MonitorFunction' => 'Ecran %1$s Fonction', + 'RunningRecentVer' => 'Vs avez la dernière version de ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'évènts', 1=>'évènt', 2=>'évènts' ), + 'Monitor' => array( 0=>'écrans', 1=>'écran', 2=>'écrans' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/he_il.php b/web/lang/he_il.php index fbff24de0..2449f3d9a 100755 --- a/web/lang/he_il.php +++ b/web/lang/he_il.php @@ -264,6 +264,7 @@ $SLANG = array( 'DonateRemindNever' => 'ìà, àðé ìà øåöä ìúøåí, àì úúæëø àåúé', 'DonateRemindWeek' => 'òãééï ìà, äæëø ìé áòåã ùáåò àçã', 'DonateYes' => 'ëï, àðé îòåðééï ìúøåí òëùéå', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'äåøã', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'îùê æîï', @@ -527,6 +528,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'ðâï äëì', 'PleaseWait' => 'äîúï áá÷ùä', + 'Plugins' => 'Plugins', 'Point' => 'ð÷åãä', 'PostEventImageBuffer' => 'Post Event Image Count', 'PreEventImageBuffer' => 'Pre Event Image Count', @@ -652,6 +654,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'òãëåï àéðå äëøçé.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'ùéîåù áîñðï', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'ùéîåù ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/he_il.php.orig b/web/lang/he_il.php.orig new file mode 100755 index 000000000..fbff24de0 --- /dev/null +++ b/web/lang/he_il.php.orig @@ -0,0 +1,846 @@ + 'öáò 24 áéè', + '32BitColour' => 'öáò 32 áéè', // Added - 2011-06-15 + '8BitGrey' => 'âååðé àôåø 8 áéè', + 'Action' => 'ôòåìä', + 'Actual' => 'î÷åøé', + 'AddNewControl' => 'äåñó ÷åðèøåì çãù', + 'AddNewMonitor' => 'äåñó îåðéèåø çãù', + 'AddNewUser' => 'äåñó îùúîù çãù', + 'AddNewZone' => 'äåñó àéæåø çãù', + 'Alarm' => 'àæò÷ä', + 'AlarmBrFrames' => 'àæò÷ú
ôøééîéí', + 'AlarmFrame' => 'àæò÷ú ôøééîéí', + 'AlarmFrameCount' => 'ñôéøú àæò÷åú ôøééîéí', + 'AlarmLimits' => 'äâáìåú àæò÷ä', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'àæò÷ú Px', + 'AlarmRGBUnset' => 'äéðê çééá ìàúçì àæò÷ú öáò', + 'Alert' => 'äúøàä', + 'All' => 'äëì', + 'Apply' => 'äçì', + 'ApplyingStateChange' => 'äçì ùéðåé îöá', + 'ArchArchived' => 'àøëéá áìáã', + 'ArchUnarchived' => 'ìà ìàøëéá áìáã', + 'Archive' => 'àøëéá', + 'Archived' => 'àåøëá', + 'Area' => 'àæåø', + 'AreaUnits' => 'àæåø (px/%)', + 'AttrAlarmFrames' => 'Alarm Frames', + 'AttrArchiveStatus' => 'Archive Status', + 'AttrAvgScore' => 'ðé÷åã îîåöò', + 'AttrCause' => 'ñéáä', + 'AttrDate' => 'úàøéê', + 'AttrDateTime' => 'úàøéê/ùòä', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Percent', + 'AttrDuration' => 'îùê æîï', + 'AttrFrames' => 'ôøééîéí', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'ðé÷åã î÷ñéîìé', + 'AttrMonitorId' => 'Monitor Id', + 'AttrMonitorName' => 'ùí îåðéèåø', + 'AttrName' => 'ùí', + 'AttrNotes' => 'äòøåú', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'ùòä', + 'AttrTotalScore' => 'ñê ñëåí', + 'AttrWeekday' => 'éåí áùáåò', + 'Auto' => 'àåèå', + 'AutoStopTimeout' => 'ôñ÷ æîï òöéøä àåèå', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'ðé÷åã
îîåöò', + 'Background' => 'ø÷ò', + 'BackgroundFilter' => 'äøõ îñðï áø÷ò', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'øåçá ôñ', + 'BlobPx' => 'Blob Px', + 'BlobSizes' => 'Blob Sizes', + 'Blobs' => 'Blobs', + 'Brightness' => 'áäéøåú', + 'Buffers' => 'Buffers', + 'CanAutoFocus' => 'àôùø äúî÷ãåú àåèåîèé', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'àôùø æåí àåèåîèé', + 'CanFocus' => 'àôùø äúî÷ãåú', + 'CanFocusAbs' => 'àôùø äúî÷ãåú àáñåìåèé', + 'CanFocusCon' => 'àôùø äúî÷ãåú îúîùê', + 'CanFocusRel' => 'àôùø äúî÷ãåú éçñé', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'àôùø úðåòä', + 'CanMoveAbs' => 'àôùø úðåòä àáñåìåèéú', + 'CanMoveCon' => 'àôùø úæåæä îúîùëú', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'àôùø úæåæä éçñéú', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'àôùø àúçåì', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'àôùø îöá ùéðä', + 'CanTilt' => 'àôùø æòæåò', + 'CanWake' => 'àôùø éöéàä îîöá ùéðä', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoom' => 'àôùø æåí', + 'CanZoomAbs' => 'àôùø æåí àáñåìåèé', + 'CanZoomCon' => 'àôùø æåí îúîùê', + 'CanZoomRel' => 'àôùø æåí éçñé', + 'Cancel' => 'áèì', + 'CancelForcedAlarm' => 'Cancel Forced Alarm', + 'CaptureHeight' => 'Capture Height', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Capture Palette', + 'CaptureWidth' => 'Capture Width', + 'Cause' => 'ñéáä', + 'CheckMethod' => 'Alarm Check Method', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'áçø îñðï', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'ñâåø', + 'Colour' => 'öáò', + 'Command' => 'ô÷åãä', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'úöåøä', + 'ConfiguredFor' => 'úöåøä òáåø', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'àùø ñéñîà', + 'ConjAnd' => 'å', + 'ConjOr' => 'àå', + 'Console' => '÷åðñåì', + 'ContactAdmin' => 'öåø ÷ùø òí îðäì äîòøëú áùáéì ôøèéí ðåñôéí.', + 'Continue' => 'äîùê', + 'Contrast' => 'ðéâåãéåú', + 'Control' => '÷åðèøåì', + 'ControlAddress' => 'ëúåáú ä÷åðèøåì', + 'ControlCap' => 'éëåìú ä÷åðèøåì', + 'ControlCaps' => 'éëåìåú ä÷åðèøåì', + 'ControlDevice' => 'äú÷ï ä÷åðèøåì', + 'ControlType' => 'ñåâ ä÷åðèøåì', + 'Controllable' => 'Controllable', + 'Cycle' => 'îçæåøé', + 'CycleWatch' => 'öôééä îçæåøéú', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'éåí', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'îç÷', + 'DeleteAndNext' => 'îç÷ & äáà', + 'DeleteAndPrev' => 'îç÷ & ä÷åãí', + 'DeleteSavedFilter' => 'îç÷ îñðï ùîåø', + 'Description' => 'úéàåø', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'òøåõ ääú÷ï', + 'DeviceFormat' => 'úáðéú ääú÷ï', + 'DeviceNumber' => 'îñôø ääú÷ï', + 'DevicePath' => 'ðúéá ääú÷ï', + 'Devices' => 'äú÷ðéí', + 'Dimensions' => 'îéîãéí', + 'DisableAlarms' => 'ðèøì àæò÷åú', + 'Disk' => 'ãéñ÷', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'úøåí áá÷ùä', + 'DonateAlready' => 'ìà, úøîúé ëáø', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'òãééï ìà, äæëø ìà áòåã éåí àçã', + 'DonateRemindHour' => 'òãééï ìà, äæëø ìé áòåã ùòä àçú', + 'DonateRemindMonth' => 'òãééï ìà, äæëø ìé áòåã çåãù àçã', + 'DonateRemindNever' => 'ìà, àðé ìà øåöä ìúøåí, àì úúæëø àåúé', + 'DonateRemindWeek' => 'òãééï ìà, äæëø ìé áòåã ùáåò àçã', + 'DonateYes' => 'ëï, àðé îòåðééï ìúøåí òëùéå', + 'Download' => 'äåøã', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'îùê æîï', + 'Edit' => 'òøåê', + 'Email' => 'ãåà"ì', + 'EnableAlarms' => 'àôùø àæò÷åú', + 'Enabled' => 'àôùø', + 'EnterNewFilterName' => 'äæï îñðï çãù', + 'Error' => 'ùâéàä', + 'ErrorBrackets' => 'Error, please check you have an equal number of opening and closing brackets', + 'ErrorValidValue' => 'Error, please check that all terms have a valid value', + 'Etc' => 'åëå\'', + 'Event' => 'àéøåò', + 'EventFilter' => 'îñðï àéøåò', + 'EventId' => 'æéäåé àéøåò', + 'EventName' => 'ùí àéøåò', + 'EventPrefix' => 'Event Prefix', + 'Events' => 'àéøåòéí', + 'Exclude' => 'ììà', + 'Execute' => 'áöò', + 'Export' => 'éöà', + 'ExportDetails' => 'éöà ôøèé àéøåò', + 'ExportFailed' => 'éöåà ðëùì', + 'ExportFormat' => 'éöà úáðéú ÷åáõ', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'éöà ÷áöé úîåðä', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'éöà ÷áöéí àçøéí (àí éùðí)', + 'ExportOptions' => 'éöà àôùøåéåú', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'îééöà', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS Report Interval', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Feed', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => '÷åáõ', + 'FilterArchiveEvents' => 'àøëá úåàîéí', + 'FilterDeleteEvents' => 'îç÷ úåàîéí', + 'FilterEmailEvents' => 'ùìç ãåàø ùì ëì äúåàîéí', + 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterMessageEvents' => 'Message details of all matches', + 'FilterPx' => 'Filter Px', + 'FilterUnset' => 'òìéê ìöééï øåçá åâåáä îñðï', + 'FilterUploadEvents' => 'òìä àú ëì äúåàîéí', + 'FilterVideoEvents' => 'öåø åéãàå ìëì äúåàîéí', + 'Filters' => 'îñððéí', + 'First' => 'äøàùåï', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'äúî÷ã', + 'ForceAlarm' => 'äëøç àæò÷ä', + 'Format' => 'úáðéú', + 'Frame' => 'ôøééí', + 'FrameId' => 'Frame Id', + 'FrameRate' => 'Frame Rate', + 'FrameSkip' => 'ãìâ ôøééí', + 'Frames' => 'ôøééîéí', + 'Func' => 'ôåð÷', + 'Function' => 'ôåð÷öéä', + 'Gain' => 'Gain', + 'General' => 'ëììé', + 'GenerateVideo' => 'öåø åéãàå', + 'GeneratingVideo' => 'îééöø åéãàå', + 'GoToZoneMinder' => 'á÷ø ZoneMinder.com', + 'Grey' => 'àôåø', + 'Group' => '÷áåöä', + 'Groups' => '÷áåöåú', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'High' => 'âáåä', + 'HighBW' => 'âáåä ø/ô', + 'Home' => 'áéú', + 'Hour' => 'ùòä', + 'Hue' => 'Hue', + 'Id' => 'æéäåé', + 'Idle' => 'äîúðä', + 'Ignore' => 'äúòìí', + 'Image' => 'úîåðä', + 'ImageBufferSize' => 'Image Buffer Size (frames)', + 'Images' => 'úîåðåú', + 'In' => 'áúåê', + 'Include' => 'ëìåì', + 'Inverted' => 'äôåê', + 'Iris' => 'Iris', + 'KeyString' => 'îçøåæú úåéí', + 'Label' => 'úååéú', + 'Language' => 'ùôä', + 'Last' => 'àçøåï', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'úåöàåú áìáã;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'äâáì ìøàùåï', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'îåðéèåøéí î÷åùøéí', + 'List' => 'øùéîä', + 'Load' => 'èòï', + 'Local' => 'î÷åîé', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'äúçáø ë', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'îúçáø', + 'Login' => 'äúçáø', + 'Logout' => 'äúðú÷', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'ðîåê', + 'LowBW' => 'ðîåê ø/ô', + 'Main' => 'îøëæé', + 'Man' => 'îãøéê', + 'Manual' => 'îãøéê', + 'Mark' => 'ñîï', + 'Max' => 'î÷ñ', + 'MaxBandwidth' => 'øåçá ôñ î÷ñ', + 'MaxBrScore' => 'ðé÷åã
î÷ñéîìé', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => 'Maximum FPS', + 'Medium' => 'áéðåðé', + 'MediumBW' => 'Medium B/W', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Minimum blobs should be less than maximum', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'Misc', + 'Monitor' => 'îåðéèåø', + 'MonitorIds' => 'Monitor Ids', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'îåðéèåøéí', + 'Montage' => 'Montage', + 'Month' => 'çåãù', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'äææ', + 'MustBeGe' => 'must be greater than or equal to', + 'MustBeLe' => 'must be less than or equal to', + 'MustConfirmPassword' => 'You must confirm the password', + 'MustSupplyPassword' => 'You must supply a password', + 'MustSupplyUsername' => 'You must supply a username', + 'Name' => 'ùí', + 'Near' => 'ìéã', + 'Network' => 'øùú', + 'New' => 'çãù', + 'NewGroup' => '÷áåöä çãùä', + 'NewLabel' => 'úååéú çãùä', + 'NewPassword' => 'ñéñîà çãùä', + 'NewState' => 'îöá çãù', + 'NewUser' => 'îùúîù çãù', + 'Next' => 'äáà', + 'No' => 'ìà', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'There are no frames recorded for this event', + 'NoGroup' => 'ììà ÷áåöä', + 'NoSavedFilters' => 'NoSavedFilters', + 'NoStatisticsRecorded' => 'There are no statistics recorded for this event/frame', + 'None' => 'øé÷', + 'NoneAvailable' => 'áìúé æîéï', + 'Normal' => 'ðåøîìé', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'ëáåé', + 'On' => 'ãìå÷', + 'OpEq' => 'ùååä ì', + 'OpGt' => 'âãåì î', + 'OpGtEq' => 'greater than or equal to', + 'OpIn' => 'in set', + 'OpLt' => 'ôçåú î', + 'OpLtEq' => 'less than or equal to', + 'OpMatches' => 'matches', + 'OpNe' => 'àéðå ùååä', + 'OpNotIn' => 'not in set', + 'OpNotMatches' => 'àéðå úåàí', + 'Open' => 'ôúç', + 'OptionHelp' => 'OptionHelp', + 'OptionRestartWarning' => 'These changes may not come into effect fully\nwhile the system is running. When you have\nfinished making your changes please ensure that\nyou restart ZoneMinder.', + 'Options' => 'àôùøåéåú', + 'OrEnterNewName' => 'or enter new name', + 'Order' => 'îéåï', + 'Orientation' => 'Orientation', + 'Out' => 'Out', + 'OverwriteExisting' => 'Overwrite Existing', + 'Paged' => 'Paged', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'ôøîèø', + 'Password' => 'ñéñîà', + 'PasswordsDifferent' => 'The new and confirm passwords are different', + 'Paths' => 'ðúéáéí', + 'Pause' => 'Pause', + 'Phone' => 'èìôåï', + 'PhoneBW' => 'ø/ô èìôåï', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'ôé÷ñìéí', + 'Play' => 'Play', + 'PlayAll' => 'ðâï äëì', + 'PleaseWait' => 'äîúï áá÷ùä', + 'Point' => 'ð÷åãä', + 'PostEventImageBuffer' => 'Post Event Image Count', + 'PreEventImageBuffer' => 'Pre Event Image Count', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'ä÷åãí', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'ãéøåâ', + 'Real' => 'àîéúé', + 'Record' => 'ä÷ìèä', + 'RefImageBlendPct' => 'Reference Image Blend %ge', + 'Refresh' => 'øòðåï', + 'Remote' => 'îøåç÷', + 'RemoteHostName' => 'ùí îàøç îøåç÷', + 'RemoteHostPath' => 'ðúéá îàøç îøåç÷', + 'RemoteHostPort' => 'ôåøè îàøç îøåç÷', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Remote Image Colours', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'ùðä ùí', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'àôñ', + 'ResetEventCounts' => 'Reset Event Counts', + 'Restart' => 'àúçì', + 'Restarting' => 'îàúçì', + 'RestrictedCameraIds' => 'Restricted Camera Ids', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'çæøä îäùäéä', + 'ReturnLocation' => 'îé÷åí çæøä', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'ñåáá ùîàìä', + 'RotateRight' => 'ñåáá éîéðä', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'öåøú øéöä', + 'RunState' => 'îöá øéöä', + 'Running' => 'îøéõ', + 'Save' => 'ùîåø', + 'SaveAs' => 'ùîåø áùí', + 'SaveFilter' => 'ùîåø îñðï', + 'Scale' => 'ñ÷àìä', + 'Score' => 'ðé÷åã', + 'Secs' => 'ùðéåú', + 'Sectionlength' => 'àåøê ÷èò', + 'Select' => 'áçø', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'áçø îåðéèåøéí', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => '÷áò', + 'SetNewBandwidth' => 'Set New Bandwidth', + 'SetPreset' => 'Set Preset', + 'Settings' => 'äâãøåú', + 'ShowFilterWindow' => 'Show Filter Window', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'âåãì', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'ùéðä', + 'SortAsc' => 'Asc', + 'SortBy' => 'Sort by', + 'SortDesc' => 'Desc', + 'Source' => 'î÷åø', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'ñåâ î÷åø', + 'Speed' => 'îäéøåú', + 'SpeedHigh' => 'îäéøåú âáåää', + 'SpeedLow' => 'îäéøåú ðîåëä', + 'SpeedMedium' => 'îöìîä áéðåðéú', + 'SpeedTurbo' => 'îäéøåú èåøáå', + 'Start' => 'äúçì', + 'State' => 'îöá', + 'Stats' => 'îöáéí', + 'Status' => 'ñèèåñ', + 'Step' => 'öòã', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'öòã âãåì', + 'StepMedium' => 'öòã áéðåðé', + 'StepNone' => 'àì úöòã', + 'StepSmall' => 'öòã ÷èï', + 'Stills' => 'ñèéìñ', + 'Stop' => 'òöåø', + 'Stopped' => 'ðòöø', + 'Stream' => 'ñèøéí', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => 'îòøëú', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'èì', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => 'æîï', + 'TimeDelta' => 'ùéðåé áæîï', + 'TimeStamp' => 'çåúîú æîï', + 'Timeline' => '÷å æîï', + 'Timestamp' => 'çåúîú æîï', + 'TimestampLabelFormat' => 'Timestamp Label Format', + 'TimestampLabelX' => 'Timestamp Label X', + 'TimestampLabelY' => 'Timestamp Label Y', + 'Today' => 'äéåí', + 'Tools' => 'ëìéí', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'ñê
ðé÷åã', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'èøéâøéí', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'ñåâ', + 'Unarchive' => 'áìúé àøëéá', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'éçéãåú', + 'Unknown' => 'áìúé éãåò', + 'Update' => 'òãëåï', + 'UpdateAvailable' => 'òãëåï ìæåï-îéðãø àôùøé.', + 'UpdateNotNecessary' => 'òãëåï àéðå äëøçé.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'ùéîåù áîñðï', + 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'ùéîåù ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'îùúîù', + 'Username' => 'ùí îùúîù', + 'Users' => 'îùúîùéí', + 'Value' => 'òøê', + 'Version' => 'âéøñä', + 'VersionIgnore' => 'äúòìí îâéøñä æå', + 'VersionRemindDay' => 'äæëø ìé áòåã éåí àçã', + 'VersionRemindHour' => 'äæëø ìé áòåã ùòä àçú', + 'VersionRemindNever' => 'Don\'t remind about new versions', + 'VersionRemindWeek' => 'Remind again in 1 week', + 'Video' => 'åéãàå', + 'VideoFormat' => 'úáðéú åéãàå', + 'VideoGenFailed' => 'Video Generation Failed!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'Video Generation Parameters', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'âåãì åéãàå', + 'View' => 'äöâ', + 'ViewAll' => 'äöâ äëì', + 'ViewEvent' => 'äöâ àéøåò', + 'ViewPaged' => 'View Paged', + 'Wake' => 'äòø', + 'WarmupFrames' => 'Warmup Frames', + 'Watch' => 'öôä', + 'Web' => 'àéðèøðè', + 'WebColour' => 'öáò àéðèøðè', + 'Week' => 'ùáåò', + 'White' => 'ìáï', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'øçá', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 Activation String', + 'X10InputAlarmString' => 'X10 Input Alarm String', + 'X10OutputAlarmString' => 'X10 Output Alarm String', + 'Y' => 'Y', + 'Yes' => 'ëï', + 'YouNoPerms' => 'àéï ìê äøùàä ìäéëðñ ìî÷åø æä.', + 'Zone' => 'àæåø', + 'ZoneAlarmColour' => 'Alarm Colour (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'àæåøéí', + 'Zoom' => 'æåí', + 'ZoomIn' => 'æåí ôðéîä', + 'ZoomOut' => 'æåí äçåöä', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Current login is \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Last %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'The latest release is v%1$s, you have v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Monitor %1$s Function', + 'RunningRecentVer' => 'You are running the most recent version of ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Events', 1=>'Event', 2=>'Events' ), + 'Monitor' => array( 0=>'Monitors', 1=>'Monitor', 2=>'Monitors' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/hu_hu.php b/web/lang/hu_hu.php index 2a27a9c9a..2936f58a3 100644 --- a/web/lang/hu_hu.php +++ b/web/lang/hu_hu.php @@ -273,6 +273,7 @@ $SLANG = array( 'DonateRemindNever' => 'Nem akarom támogatni, ne is emlékeztess', 'DonateRemindWeek' => 'Nem most, figyelmeztess 1 hét múlva', 'DonateYes' => 'Igen, most szeretném támogatni', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Letölt', 'DuplicateMonitorName' => 'Monitor nevének duplikálása', 'Duration' => 'Idõtartam', @@ -536,6 +537,7 @@ $SLANG = array( 'Play' => 'Lejátszás', 'PlayAll' => 'Mind lejátszása', 'PleaseWait' => 'Kérlek várj...', + 'Plugins' => 'Plugins', 'Point' => 'Pont', 'PostEventImageBuffer' => 'Esemény utáni képpuffer', 'PreEventImageBuffer' => 'Esemény elötti képpuffer', @@ -661,6 +663,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Nem szükséges a frissítés.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Szûrõt használ', 'UseFilterExprsPost' => ' szürõ kifejezés használata', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => ' ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/hu_hu.php.orig b/web/lang/hu_hu.php.orig new file mode 100644 index 000000000..2a27a9c9a --- /dev/null +++ b/web/lang/hu_hu.php.orig @@ -0,0 +1,855 @@ + '24 bites szín', + '32BitColour' => '32 bites szín', // Added - 2011-06-15 + '8BitGrey' => '8 bit szürkeárnyalat', + 'Action' => 'Mûvelet', + 'Actual' => 'Valós', + 'AddNewControl' => 'Új vezérlés', + 'AddNewMonitor' => 'Új monitor', + 'AddNewUser' => 'Új felhasználó', + 'AddNewZone' => 'Új zóna', + 'Alarm' => 'Riadó', + 'AlarmBrFrames' => 'Riadó
képek', + 'AlarmFrame' => 'Riadó kép', + 'AlarmFrameCount' => 'Riadó képek száma', + 'AlarmLimits' => 'Riasztási határok', + 'AlarmMaximumFPS' => 'Maximális FPS riasztásnál', + 'AlarmPx' => 'Riadó képpont', + 'AlarmRGBUnset' => 'Be kell állítani egy RGB színt a riasztáshoz', + 'Alert' => 'Riasztás', + 'All' => 'Mind', + 'Apply' => 'Alkalmaz', + 'ApplyingStateChange' => 'Állapot váltás...', + 'ArchArchived' => 'Csak archivált', + 'ArchUnarchived' => 'Csak archiválatlan', + 'Archive' => 'Archiválás', + 'Archived' => 'Archívum', + 'Area' => 'Terület', + 'AreaUnits' => 'Terület (képpont / %)', + 'AttrAlarmFrames' => 'Riadó képkockák', + 'AttrArchiveStatus' => 'Archivált állapot', + 'AttrAvgScore' => 'Átlagos érték', + 'AttrCause' => 'Okozó', + 'AttrDate' => 'Dátum', + 'AttrDateTime' => 'Dátum/Idõ', + 'AttrDiskBlocks' => 'Lemez blokkok', + 'AttrDiskPercent' => 'Lemez százalék', + 'AttrDuration' => 'Idõtartam', + 'AttrFrames' => 'Képkockák', + 'AttrId' => 'Azonosító', + 'AttrMaxScore' => 'Max. érték', + 'AttrMonitorId' => 'Monitor azon.', + 'AttrMonitorName' => 'Monitor név', + 'AttrName' => 'Név', + 'AttrNotes' => 'Megjegyzés', + 'AttrSystemLoad' => 'Rendszer terhelés', + 'AttrTime' => 'Idõ', + 'AttrTotalScore' => 'Össz. érték', + 'AttrWeekday' => 'Hétköznap', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto megállási idõ túllépés', + 'Available' => 'Elérhetõ', + 'AvgBrScore' => 'Átlag
érték', + 'Background' => 'Háttér', + 'BackgroundFilter' => 'Szûrõ futtatása a háttérben', + 'BadAlarmFrameCount' => 'Riadó képek száma 1 vagy nagyobb egész szám legyen', + 'BadAlarmMaxFPS' => 'A riadó maximális FPS száma pozitív szám legyen', + 'BadChannel' => 'A csatorna száma 0 vagy nagyobb egész szám legyen', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Az eszköz érték valós legyen', + 'BadFPSReportInterval' => 'FPS információs idõköz puffer számlálója 0 vagy nagyobb egész legyen', + 'BadFormat' => 'A típus 0 vagy nagyobb egész szám legyen', + 'BadFrameSkip' => 'Képkocka eldobások száma 0 vagy nagyobb egész szám legyen', + 'BadHeight' => 'A képmagasság érvényes érték legyen képpontban', + 'BadHost' => 'A hoszt valós IP cím vagy hosztnév legyen, http:// nélkül', + 'BadImageBufferCount' => 'Kép puffer mérete legyen 10 vagy nagyobb szám', + 'BadLabelX' => 'A cimke X koordinátája legyen 0 vagy nagyobb egész szám', + 'BadLabelY' => 'A cimke Y koordinátája legyen 0 vagy nagyobb egész szám', + 'BadMaxFPS' => 'A maximális FPS nullánál nagyobb szám legyen', + 'BadNameChars' => 'A név csak alfanumerikus karaktereket, plusz-, kötõ-, és aláhúzásjelet tartalmazhat', + 'BadPalette' => 'A palettának egy helyes értéket kell megadni', + 'BadPath' => 'A kép elérési útvonala valós legyen', + 'BadPort' => 'A portszám valós legyen', + 'BadPostEventCount' => 'Az esemény utáni képek puffere 0 vagy nagyobb egész szám legyen', + 'BadPreEventCount' => 'Az esemény elõtti képek puffere 0 vagy nagyobb egész szám legyen', + 'BadRefBlendPerc' => 'A referencia képkeverék-százalék pozitív egész szám legyen', + 'BadSectionLength' => 'Egy egység hossza 30 vagy hosszabb legyen', + 'BadSignalCheckColour' => 'A jel ellenõrzési szín egy érvényes RGP kód kell legyen', + 'BadStreamReplayBuffer'=> 'Folyam visszajátszó puffer 0 vagy nagyobb egész szám legyen', + 'BadWarmupCount' => 'Bemelegítõ képek száma 0 vagy nagyobb egész szám legyen', + 'BadWebColour' => 'A web szín érvényes web szín kód legyen', + 'BadWidth' => 'A képszélesség érvényes érték legyen képpontban', + 'Bandwidth' => 'sávszélességre', + 'BlobPx' => 'Blob képpont', + 'BlobSizes' => 'Blob mérete', + 'Blobs' => 'Blob-ok', + 'Brightness' => 'Fényerõ', + 'Buffers' => 'Pufferek', + 'CanAutoFocus' => 'Auto fókusz van', + 'CanAutoGain' => 'Auto gain van', + 'CanAutoIris' => 'Auto írisz van', + 'CanAutoWhite' => 'Van autómata fehér egyensúly', + 'CanAutoZoom' => 'Auto zoom van', + 'CanFocus' => 'Tud fókuszálni', + 'CanFocusAbs' => 'Tud abszolút fókuszt', + 'CanFocusCon' => 'Tud folyamatos fókuszt', + 'CanFocusRel' => 'Tud relatív fókuszt', + 'CanGain' => 'Tud erõsíteni', + 'CanGainAbs' => 'Tud abszolút erõsítést', + 'CanGainCon' => 'Tud folyamatos erõsítést', + 'CanGainRel' => 'Tud relatív erõsítést', + 'CanIris' => 'Tud íriszt változtatni', + 'CanIrisAbs' => 'Tud abszolut íriszt', + 'CanIrisCon' => 'Folyamatosan tud íriszt változtatni', + 'CanIrisRel' => 'Relatíven tud íriszt változtatni', + 'CanMove' => 'Tud mozogni', + 'CanMoveAbs' => 'Tud abszolult mozgást', + 'CanMoveCon' => 'Folyamatosan tud mozogni', + 'CanMoveDiag' => 'Diagonálban tud mozogni', + 'CanMoveMap' => 'Útvonalon tud mozogni', + 'CanMoveRel' => 'Relatíven tud mozogni', + 'CanPan' => 'Tud jobb-bal mozgást' , + 'CanReset' => 'Tud alaphelyzetbe jönni', + 'CanSetPresets' => 'Tud menteni profilokat', + 'CanSleep' => 'Tud phihenõ üzemmódot', + 'CanTilt' => 'Tud fel-le mozgást', + 'CanWake' => 'Tud feléledni', + 'CanWhite' => 'Tud fehér egyensúlyt', + 'CanWhiteAbs' => 'Tud abszolut fehér egyensúlyt', + 'CanWhiteBal' => 'Tud fehér egyensúlyt', + 'CanWhiteCon' => 'Tud folyamatos fehér egyensúlyt', + 'CanWhiteRel' => 'Tud relatív fehér egyensúlyt', + 'CanZoom' => 'Tud zoom-olni', + 'CanZoomAbs' => 'Tud abszolut zoom-ot', + 'CanZoomCon' => 'Tud folyamatos zoom-ot', + 'CanZoomRel' => 'Tud relatív zoom-ot', + 'Cancel' => 'Mégsem', + 'CancelForcedAlarm' => 'Kézi riasztás leállítása', + 'CaptureHeight' => 'Képmagasság', + 'CaptureMethod' => 'Digitalizálás módszere', + 'CapturePalette' => 'Digitalizálás szín-palettája', + 'CaptureWidth' => 'Képszélesség', + 'Cause' => 'Okozó', + 'CheckMethod' => 'A riasztás figyelésének módja', + 'ChooseDetectedCamera' => 'Válasszon érzékelt kamerát', + 'ChooseFilter' => 'Válassz szûrõt', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Válassz profilt', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Bezár', + 'Colour' => 'Szín', + 'Command' => 'Parancs', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Beállítás', + 'ConfiguredFor' => 'Beállítva', + 'ConfirmDeleteEvents' => 'Biztos benne, hogy törli a kiválasztott eseményeket?', + 'ConfirmPassword' => 'Jelszó megerõsítés', + 'ConjAnd' => 'és', + 'ConjOr' => 'vagy', + 'Console' => 'Konzol', + 'ContactAdmin' => 'Kérem vegye fel a kapcsolatot a rendszergazdával a részletekért.', + 'Continue' => 'Folytatás', + 'Contrast' => 'Kontraszt', + 'Control' => 'Vezérlés', + 'ControlAddress' => 'Vezérlési jogok', + 'ControlCap' => 'Vezérlési lehetõség', + 'ControlCaps' => 'Vezérlési lehetõségek', + 'ControlDevice' => 'Vezérlõ eszköz', + 'ControlType' => 'Vezérlés típusa', + 'Controllable' => 'Vezérelhetõ', + 'Cycle' => 'Körbekapcsolás', + 'CycleWatch' => 'Körbekapcsolás', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Napon', + 'Debug' => 'Nyomon
követés', + 'DefaultRate' => 'Alapértelmezett sebesség', + 'DefaultScale' => 'Alapértelmezett méret', + 'DefaultView' => 'Alapértelmezett nézet', + 'Delete' => 'Töröl', + 'DeleteAndNext' => 'Töröl &
következõ', + 'DeleteAndPrev' => 'Töröl &
elõzõ', + 'DeleteSavedFilter' => 'Mentett szûrõ törlése', + 'Description' => 'Leírás', + 'DetectedCameras' => 'Érzékelt kamerák', + 'Device' => 'Eszköz', + 'DeviceChannel' => 'Eszköz csatornája', + 'DeviceFormat' => 'Eszköz formátuma', + 'DeviceNumber' => 'Eszköz szám', + 'DevicePath' => 'Eszköz elérési útvonala', + 'Devices' => 'Eszközök', + 'Dimensions' => 'Dimenziók', + 'DisableAlarms' => 'Riasztás tiltása', + 'Disk' => 'Tárhely', + 'Display' => 'Megjelenés', + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Kérem támogasson', + 'DonateAlready' => 'Nem, én már támogattam', + 'DonateEnticement' => 'Ön már jó ideje használja a ZoneMindert remélhetõleg hasznos kiegészítésnek tartja háza vagy munkahelye biztosításában. Bár ZoneMinder szabad, nyílt forráskódú, és az is marad; a fejlesztése pénzbe kerül. Ha támogatni szeretné a jövõbeni fejlesztéseket és az új funkciókat kérem támogasson. A támogatás teljesen önkéntes, de nagyon megbecsült és annyival tud támogatni amennyivel kíván.

Ha támogatni szertne kérem válasszon az alábbi lehetõségekbõl vagy látogassa meg a http://www.zoneminder.com/donate.html oldalt.

Köszönöm, hogy használja a ZoneMinder-t és ne felejtse el meglátogatni a fórumokat a ZoneMinder.com oldalon támogatásért és ötletekért, hogy tudja még jobban használni a ZoneMinder-t.', + 'DonateRemindDay' => 'Nem most, figyelmeztess 1 nap múlva', + 'DonateRemindHour' => 'Nem most, figyelmeztess 1 óra múlva', + 'DonateRemindMonth' => 'Nem most, figyelmeztess 1 hónap múlva', + 'DonateRemindNever' => 'Nem akarom támogatni, ne is emlékeztess', + 'DonateRemindWeek' => 'Nem most, figyelmeztess 1 hét múlva', + 'DonateYes' => 'Igen, most szeretném támogatni', + 'Download' => 'Letölt', + 'DuplicateMonitorName' => 'Monitor nevének duplikálása', + 'Duration' => 'Idõtartam', + 'Edit' => 'Szerkeszt', + 'Email' => 'Email', + 'EnableAlarms' => 'Riasztás feloldása', + 'Enabled' => 'Engedélyezve', + 'EnterNewFilterName' => 'Írd be az új szûrõ nevét', + 'Error' => 'Hiba', + 'ErrorBrackets' => 'Hiba, ellenõrizd, hogy ugyanannyi nyitó és záró zárójel van', + 'ErrorValidValue' => 'Hiba, ellenõrizd, hogy minden beállításnak érvényes értéke van', + 'Etc' => 'stb', + 'Event' => 'Esemény', + 'EventFilter' => 'Esemény szûrõ', + 'EventId' => 'Esemény azonosító', + 'EventName' => 'Esemény név', + 'EventPrefix' => 'Esemény elõtag', + 'Events' => 'Események', + 'Exclude' => 'Kizár', + 'Execute' => 'Futtat', + 'Export' => 'Exportál', + 'ExportDetails' => 'Esemény adatainak exportálása', + 'ExportFailed' => 'Hibás exportálás', + 'ExportFormat' => 'Exportált fájl formátuma', + 'ExportFormatTar' => 'TAR', + 'ExportFormatZip' => 'ZIP', + 'ExportFrames' => 'Képek adatainak exportálása', + 'ExportImageFiles' => 'Képek exportálása', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Egyéb fájlok exportálása (ha vannak)', + 'ExportOptions' => 'Exportálás beállításai', + 'ExportSucceeded' => 'Az exportálás sikerült', + 'ExportVideoFiles' => 'Videó fájlok exportálása (ha vannak)', + 'Exporting' => 'Exportálás...', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS megjelenítés idõköze', + 'FTP' => 'FTP', + 'Far' => 'Távol', + 'FastForward' => 'Elõre tekerés', + 'Feed' => 'Folyam', + 'Ffmpeg' => 'Ffmpeg', + 'File' => 'Fájl', + 'FilterArchiveEvents' => 'Minden találat archiválása', + 'FilterDeleteEvents' => 'Minden találat törlése', + 'FilterEmailEvents' => 'Minden találat adatainak elküldése E-mailben', + 'FilterExecuteEvents' => 'Parancs futtatása minden találaton', + 'FilterMessageEvents' => 'Minden találat adatainak üzenése', + 'FilterPx' => 'Szûrt képkockák', + 'FilterUnset' => 'Meg kell adnod a szûrõ szélességét és magasságát', + 'FilterUploadEvents' => 'Minden találat feltöltése', + 'FilterVideoEvents' => 'Videó készítése minden találatról', + 'Filters' => 'Szûrõk', + 'First' => 'Elsõ', + 'FlippedHori' => 'Vízszintes tükrözés', + 'FlippedVert' => 'Függõleges tükrözés', + 'Focus' => 'Fókusz', + 'ForceAlarm' => 'Kézi riasztás', + 'Format' => 'Formátum', + 'Frame' => 'Képkocka', + 'FrameId' => 'Képkocka azonosító', + 'FrameRate' => 'FPS', + 'FrameSkip' => 'Képkocka kihagyás', + 'Frames' => 'Képkocka', + 'Func' => 'Funk.', + 'Function' => 'Funkció', + 'Gain' => 'Erõsítés', + 'General' => 'Általános', + 'GenerateVideo' => 'Videó készítés', + 'GeneratingVideo' => 'Videó készítése...', + 'GoToZoneMinder' => 'Látogatás a ZoneMinder.com-ra', + 'Grey' => 'Szürke', + 'Group' => 'Csoport', + 'Groups' => 'Csoportok', + 'HasFocusSpeed' => 'Van fókusz sebesség', + 'HasGainSpeed' => 'Van erõsítés sebesség', + 'HasHomePreset' => 'Van kedvenc profilja', + 'HasIrisSpeed' => 'Van írisz sebesség', + 'HasPanSpeed' => 'Van jobb-bal sebesség', + 'HasPresets' => 'Vannak profiljai', + 'HasTiltSpeed' => 'Van le-fel sebesség', + 'HasTurboPan' => 'Van turbó jobb-bal', + 'HasTurboTilt' => 'Van turbó le-fel', + 'HasWhiteSpeed' => 'Van fehér egyensúly sebesség', + 'HasZoomSpeed' => 'Van zoom sebesség', + 'High' => 'Magas', + 'HighBW' => 'Magas
sávsz.', + 'Home' => 'Home', + 'Hour' => 'Órában', + 'Hue' => 'Színárnyalat', + 'Id' => 'Az.', + 'Idle' => 'Nyugalom', + 'Ignore' => 'Figyelmen kívül hagy', + 'Image' => 'Kép', + 'ImageBufferSize' => 'Képpuffer mérete (képkockák)', + 'Images' => 'Kép', + 'In' => 'In', + 'Include' => 'Beágyaz', + 'Inverted' => 'Invertálva', + 'Iris' => 'Írisz', + 'KeyString' => 'Kulcs karaktersor', + 'Label' => 'Cimke', + 'Language' => 'Nyelv', + 'Last' => 'Utolsó', + 'Layout' => 'Elrendezés', + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'találatig korlátoz', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Az elsõ', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Összefüggõ monitorok', + 'List' => 'Lista', + 'Load' => 'Terhelés', + 'Local' => 'Helyi', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Bejelentkezve mint', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Bejelentkezés folyamatban', + 'Login' => 'Bejelentkezés', + 'Logout' => 'Kilépés', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Alacsony', + 'LowBW' => 'Alacsony
sávsz.', + 'Main' => 'Fõ', + 'Man' => 'Man', + 'Manual' => 'Kézikönyv', + 'Mark' => 'Jelölés', + 'Max' => 'Max.', + 'MaxBandwidth' => 'Max. sávszélesség', + 'MaxBrScore' => 'Max.
érték', + 'MaxFocusRange' => 'Max. fókusz tartomány', + 'MaxFocusSpeed' => 'Max. fókusz sebesség', + 'MaxFocusStep' => 'Max. fókusz lépés', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max. írisz tartomány', + 'MaxIrisSpeed' => 'Max. írisz sebesség', + 'MaxIrisStep' => 'Max. írisz lépés', + 'MaxPanRange' => 'Max. jobb-bal tartomány', + 'MaxPanSpeed' => 'Max. jobb-bal sebesség', + 'MaxPanStep' => 'Max. jobb-bal lépés', + 'MaxTiltRange' => 'Max. fel-le tartomány', + 'MaxTiltSpeed' => 'Max. fel-le sebesség', + 'MaxTiltStep' => 'Max. fel-le lépés', + 'MaxWhiteRange' => 'Max. fehér egyensúly tartomány', + 'MaxWhiteSpeed' => 'Max. fehér egyensúly sebesség', + 'MaxWhiteStep' => 'Max. fehér egyensúly lépés', + 'MaxZoomRange' => 'Max. zoom tartomány', + 'MaxZoomSpeed' => 'Max. zoom sebesség', + 'MaxZoomStep' => 'Max. zoom lépés', + 'MaximumFPS' => 'Maximum FPS', + 'Medium' => 'Közepes', + 'MediumBW' => 'Közepes
sávsz.', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'A minimum riasztott területnek kisebbnek kell lennie mint a maximumnak', + 'MinAlarmAreaUnset' => 'Meg kell adnod a minimum riasztott képpontok számát', + 'MinBlobAreaLtMax' => 'A minimum blob területnek kisebbnek kell lennie mint a maximumnak', + 'MinBlobAreaUnset' => 'Meg kell adnod a minimum blob képpontok számát', + 'MinBlobLtMinFilter' => 'A minimum blob területnek kisebbnek vagy egyenlõnek kell lennie a megszûrt területtel', + 'MinBlobsLtMax' => 'A minimum bloboknak kisebbeknek kell lenniük, mint a maximum', + 'MinBlobsUnset' => 'Meg kell adnod a blobok számát', + 'MinFilterAreaLtMax' => 'A minimum megszûrt területnek kisebbnek kell lennie mint a maximum', + 'MinFilterAreaUnset' => 'Meg kell adnod a megszûrt terület képpontjainak számát', + 'MinFilterLtMinAlarm' => 'A megszûrt területnek kisebbnek vagy ugyanakkorának kell lennie mint a riasztott terület', + 'MinFocusRange' => 'Min. fókusz terület', + 'MinFocusSpeed' => 'Min. fókusz sebesség', + 'MinFocusStep' => 'Min. fókusz lépés', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min. írisz terület', + 'MinIrisSpeed' => 'Min. írisz sebesség', + 'MinIrisStep' => 'Min. írisz lépés', + 'MinPanRange' => 'Min. jobb-bal tartomány', + 'MinPanSpeed' => 'Min. jobb-bal sebesség', + 'MinPanStep' => 'Min. jobb-bal lépés', + 'MinPixelThresLtMax' => 'A képpont minimum eltérési küszöbének kisebbnek kell lennie, mint a maximum', + 'MinPixelThresUnset' => 'Meg kell adnod a képpont minimum eltérési küszöbét', + 'MinTiltRange' => 'Min. fel-le tartomány', + 'MinTiltSpeed' => 'Min. fel-le sebesség', + 'MinTiltStep' => 'Min. fel-le lépés', + 'MinWhiteRange' => 'Min. fehér egyensúly terület', + 'MinWhiteSpeed' => 'Min. fehér egyensúly sebesség', + 'MinWhiteStep' => 'Min. fehér egyensúly lépés', + 'MinZoomRange' => 'Min. zoom terület', + 'MinZoomSpeed' => 'Min. zoom sebesség', + 'MinZoomStep' => 'Min. zoom lépés', + 'Misc' => 'Egyéb', + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Monitor azonosítók', + 'MonitorPreset' => 'Elõre beállított monitorprofilok', + 'MonitorPresetIntro' => 'Válassz egy, az elõre meghatározott
értékprofilt az alábbiak közül.

Vedd figyelembe, hogy ez felülírhatja
az általad már beállított értékeket.

', + 'MonitorProbe' => 'Monitor észlelés', + 'MonitorProbeIntro' => 'Az alábbi listában találhatók az automatikusan érzékelt analóg és hálózati kamerákat, illetve azt, hogy közülük melyik van használatban, vagy kiválasztható.

Válasszon egyet az alábbi listából.

Figyelem! Nem biztos, hogy minden kamerát lehet automatikusan érzékelni. Az itt kiválasztott kamara adatai felülírhatják azokat, amelyeket már ehhez a monitorhoz beállított.

', + 'Monitors' => 'Monitorok', + 'Montage' => 'Többkamerás nézet', + 'Month' => 'Hónapban', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Mozgás', + 'MustBeGe' => 'nagyobbnak vagy egyenlõnek kell lennie', + 'MustBeLe' => 'kisebbnek vagy egyenlõnek kell lennie', + 'MustConfirmPassword' => 'Meg kell erõsítened a jelszót', + 'MustSupplyPassword' => 'Meg kell adnod a jelszót', + 'MustSupplyUsername' => 'Meg kell adnod felhasználói nevet', + 'Name' => 'Név', + 'Near' => 'Közel', + 'Network' => 'Hálózat', + 'New' => 'Uj', + 'NewGroup' => 'Új csoport', + 'NewLabel' => 'Új cimke', + 'NewPassword' => 'Új jelszó', + 'NewState' => 'Új állapot neve', + 'NewUser' => 'Új felhasználó', + 'Next' => 'Következõ', + 'No' => 'Nem', + 'NoDetectedCameras' => 'Nincsenek érzékelt kamerák', + 'NoFramesRecorded' => 'Nincs felvett képkocka ehhez az eseményhez', + 'NoGroup' => 'Nincs csoport', + 'NoSavedFilters' => 'Nincs mentett szûrõ', + 'NoStatisticsRecorded' => 'Nincs mentett statisztika ehhez az eseményhez/képkockához', + 'None' => 'Nincs kiválasztva', + 'NoneAvailable' => 'Nem elérhetõ', + 'Normal' => 'Normál', + 'Notes' => 'Megjegyzések', + 'NumPresets' => 'Profilok száma', + 'Off' => 'Ki', + 'On' => 'Be', + 'OpEq' => 'egyenlõ', + 'OpGt' => 'nagyobb mint', + 'OpGtEq' => 'nagyobb van egyenlõ', + 'OpIn' => 'beállítva', + 'OpLt' => 'kisebb mint', + 'OpLtEq' => 'kisebb vagy egyenlõ', + 'OpMatches' => 'találatok', + 'OpNe' => 'nem egyenlõ', + 'OpNotIn' => 'nincs beállítva', + 'OpNotMatches' => 'nincs találat', + 'Open' => 'Megnyitás', + 'OptionHelp' => 'Beállítási segítség', + 'OptionRestartWarning' => 'Ez a beállítás nem jut teljesen érvényre\namíg a rendszer fut. Ha megtettél minden\nbeállítást, indítsd újra a ZoneMinder szolgáltatást.', + 'Options' => 'Beállítások', + 'OrEnterNewName' => 'vagy adj meg új nevet', + 'Order' => 'Sorrend', + 'Orientation' => 'Orientáció', + 'Out' => 'Kifelé', + 'OverwriteExisting' => 'Meglévõ felülírása', + 'Paged' => 'Lapozva', + 'Pan' => 'Jobb-bal mozgás', + 'PanLeft' => 'Mozgás balra', + 'PanRight' => 'Mozgás jobbra', + 'PanTilt' => 'Mozgat', + 'Parameter' => 'Paraméter', + 'Password' => 'Jelszó', + 'PasswordsDifferent' => 'Az új és a megerõsített jelszó különbözik!', + 'Paths' => 'Útvonalak', + 'Pause' => 'Szünet', + 'Phone' => 'Telefonon betárcsázva', + 'PhoneBW' => 'Betárcsázó
sávsz.', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Képpont eltérés', + 'Pixels' => 'képpont', + 'Play' => 'Lejátszás', + 'PlayAll' => 'Mind lejátszása', + 'PleaseWait' => 'Kérlek várj...', + 'Point' => 'Pont', + 'PostEventImageBuffer' => 'Esemény utáni képpuffer', + 'PreEventImageBuffer' => 'Esemény elötti képpuffer', + 'PreserveAspect' => 'Képarány megtartása', + 'Preset' => 'Elõre beállított profil', + 'Presets' => 'Elõre beállított profilok', + 'Prev' => 'Elõzõ', + 'Probe' => 'Érzékelés', + 'Protocol' => 'Protocol', + 'Rate' => 'FPS', + 'Real' => 'Valós', + 'Record' => 'Felvétel', + 'RefImageBlendPct' => 'Változás a referenciaképtõl %-ban', + 'Refresh' => 'Frissít', + 'Remote' => 'Hálózati', + 'RemoteHostName' => 'Hálózati IP cím/hosztnév', + 'RemoteHostPath' => 'A kép elérési útvonala', + 'RemoteHostPort' => 'Hálózati portszám', + 'RemoteHostSubPath' => 'A kép elérési al-útvonala', + 'RemoteImageColours' => 'A kép színe', + 'RemoteMethod' => 'Hálózati metódus', + 'RemoteProtocol' => 'Hálózati protokoll', + 'Rename' => 'Átnevezés', + 'Replay' => 'Visszajátszás', + 'ReplayAll' => 'Minden eseményt', + 'ReplayGapless' => 'Folyamatos eseményeket', + 'ReplaySingle' => 'Egyéni esemény', + 'Reset' => 'Alapértékre állít', + 'ResetEventCounts' => 'Esemény számláló nullázása', + 'Restart' => 'A szolgáltatás újraindítása', + 'Restarting' => 'Újraindítás', + 'RestrictedCameraIds' => 'Korlátozott kamerák azonosítói', + 'RestrictedMonitors' => 'Korlátozott kamerák', + 'ReturnDelay' => 'Visszaérkezés késleltetése', + 'ReturnLocation' => 'Visszaérkezés helye', + 'Rewind' => 'Visszatekerés', + 'RotateLeft' => 'Balra forgatás', + 'RotateRight' => 'Jobbra forgatás', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Futási mód', + 'RunState' => 'A ZoneMinder állapota', + 'Running' => 'Éles', + 'Save' => 'Mentés', + 'SaveAs' => 'Mentés mint', + 'SaveFilter' => 'Szûrõ mentése', + 'Scale' => 'Méret', + 'Score' => 'Pontszám', + 'Secs' => 'mp.', + 'Sectionlength' => 'Rész hossz', + 'Select' => 'Kiválasztás', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Monitorok kiválasztása', + 'SelfIntersecting' => 'A sokszög szélei nem keresztezõdhetnek', + 'Set' => 'Beállít', + 'SetNewBandwidth' => 'Új sávszélesség beállítás', + 'SetPreset' => 'Alapértelmezett beállítása', + 'Settings' => 'Beállítások', + 'ShowFilterWindow' => 'Szûrõablak megjelenítés', + 'ShowTimeline' => 'Idõvonal megjelenítés', + 'SignalCheckColour' => 'Szín a jel kimaradásakor', + 'Size' => 'Fájlméret', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Alvás', + 'SortAsc' => 'Növekvõ', + 'SortBy' => 'Sorbarendezés:', + 'SortDesc' => 'Csökkenõ', + 'Source' => 'Forrás', + 'SourceColours' => 'A kép színe', + 'SourcePath' => 'A kép elérési útvonala', + 'SourceType' => 'Kép-forrás típusa', + 'Speed' => 'Sebesség', + 'SpeedHigh' => 'Nagy sebsség', + 'SpeedLow' => 'Alacsony sebesség', + 'SpeedMedium' => 'Közepes sebesség', + 'SpeedTurbo' => 'Turbó sebesség', + 'Start' => 'Indít', + 'State' => 'Állapot', + 'Stats' => 'Statisztikák', + 'Status' => 'Státusz', + 'Step' => 'Ugrás', + 'StepBack' => 'Visszalépés', + 'StepForward' => 'Elõrelépés', + 'StepLarge' => 'Nagy ugrás', + 'StepMedium' => 'Közepes ugrás', + 'StepNone' => 'Nincs ugrás', + 'StepSmall' => 'Kis ugrás', + 'Stills' => 'Állóképek', + 'Stop' => 'A szolgáltatás leállítása', + 'Stopped' => 'Leállítva', + 'Stream' => 'Élõ folyam', + 'StreamReplayBuffer' => 'Folyam visszajátszó képpuffer', + 'Submit' => 'Elküld', + 'System' => 'Rendszer', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Táv', + 'Thumbnail' => 'Elõnézet', + 'Tilt' => 'Fel-le mozgás', + 'Time' => 'Idõpont', + 'TimeDelta' => 'Idõ változás', + 'TimeStamp' => 'Idõbélyeg', + 'Timeline' => 'Idõvonal', + 'Timestamp' => 'Idõbélyeg', + 'TimestampLabelFormat' => 'Idõbélyeg formátum', + 'TimestampLabelX' => 'Elhelyezés X pozició', + 'TimestampLabelY' => 'Elhelyezés Y pozició', + 'Today' => 'Ma', + 'Tools' => 'Eszközök', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Össz.
pontszám', + 'TrackDelay' => 'Késleltetés követése', + 'TrackMotion' => 'Mozgás követése', + 'Triggers' => 'Elõidézõk', + 'TurboPanSpeed' => 'Turbó jobb-bal sebesség', + 'TurboTiltSpeed' => 'Turbo fel-le sebesség', + 'Type' => 'Típus', + 'Unarchive' => 'Archívumból ki', + 'Undefined' => 'Nincs megadva', + 'Units' => 'Egység', + 'Unknown' => 'Ismeretlen', + 'Update' => 'Frissítés', + 'UpdateAvailable' => 'Elérhetõ ZoneMinder frissítés.', + 'UpdateNotNecessary' => 'Nem szükséges a frissítés.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Szûrõt használ', + 'UseFilterExprsPost' => ' szürõ kifejezés használata', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => ' ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Felhasználó', + 'Username' => 'Felhasználónév', + 'Users' => 'Felhasználók', + 'Value' => 'Érték', + 'Version' => 'Verzió', + 'VersionIgnore' => 'Ennek a verziónak a figyelmen kívül hagyása', + 'VersionRemindDay' => '1 nap múlva emlékeztess', + 'VersionRemindHour' => '1 óra múlva emlékeztess', + 'VersionRemindNever' => 'Ne emlékeztess az új verzióról', + 'VersionRemindWeek' => '1 hét múlva emlékeztess', + 'Video' => 'Videó', + 'VideoFormat' => 'Videó formátum', + 'VideoGenFailed' => 'Hiba a videó készítésekor!', + 'VideoGenFiles' => 'Létezõ videók', + 'VideoGenNoFiles' => 'Nem találhatók videók', + 'VideoGenParms' => 'Videó készítési paraméterek', + 'VideoGenSucceeded' => 'A videó elkészült!', + 'VideoSize' => 'Kép mérete', + 'View' => 'Megtekint', + 'ViewAll' => 'Az összes listázása', + 'ViewEvent' => 'Események nézet', + 'ViewPaged' => 'Oldal nézet', + 'Wake' => 'Ébreszt', + 'WarmupFrames' => 'Bemelegítõ képkockák', + 'Watch' => 'Figyel', + 'Web' => 'Web', + 'WebColour' => 'Szín az idõvonal ablakban', + 'Week' => 'Héten', + 'White' => 'Fehér', + 'WhiteBalance' => 'Fehér egyensúly', + 'Wide' => 'Széles', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 élesítõ karaktersor', + 'X10InputAlarmString' => 'X10 bemeneti riadó karaktersor', + 'X10OutputAlarmString' => 'X10 kimeneti riadó karaktersor', + 'Y' => 'Y', + 'Yes' => 'Igen', + 'YouNoPerms' => 'Nincs jogod az erõforrás eléréséhez.', + 'Zone' => 'Zóna:', + 'ZoneAlarmColour' => 'Riadó színezés (R/G/B)', + 'ZoneArea' => 'Zóna lefedettsége', + 'ZoneFilterSize' => 'Szûrt szélesség/magasság
(képpont)', + 'ZoneMinMaxAlarmArea' => 'Min/Max riadó terület', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob terület', + 'ZoneMinMaxBlobs' => 'Min/Max Blobok', + 'ZoneMinMaxFiltArea' => 'Min/Max szûrt terület', + 'ZoneMinMaxPixelThres' => 'Min/Max képpont eltérési
küszöb (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Túlterhelés esetén
ennyi képkocka hagyható ki', + 'Zones' => 'Zónák', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom be', + 'ZoomOut' => 'Zoom ki', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Jelenleg belépve mint \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Utolsó %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'Az utolsó kiadás v%1$s, ami neked van v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Megfigyelés funkció: %1$s', + 'RunningRecentVer' => 'A legfrissebb ZoneMinder verziót használod, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Esemény', 1=>'Esemény', 2=>'Esemény' ), + 'Monitor' => array( 0=>'Monitor', 1=>'Monitor', 2=>'Monitor' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/it_it.php b/web/lang/it_it.php index 3cda3c37a..f44ccbdc1 100644 --- a/web/lang/it_it.php +++ b/web/lang/it_it.php @@ -269,6 +269,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, io non voglio donare, non lo faro\' mai', 'DonateRemindWeek' => 'Non ancora, ricordamelo ancora tra 1 settimana', 'DonateYes' => 'Si,mi piacerebbe donare qualcosa ora', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Il nome del monitor e\' gia\' presente', // Added - 2009-03-31 'Duration' => 'Durata', @@ -532,6 +533,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Vedi tutti', 'PleaseWait' => 'Attendere prego', + 'Plugins' => 'Plugins', 'Point' => 'Punto', 'PostEventImageBuffer' => 'Buffer di immagini Dopo Evento', 'PreEventImageBuffer' => 'Buffer di immagini Pre Evento', @@ -657,6 +659,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Nessun aggiornamento necessario.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Usa Filtro', 'UseFilterExprsPost' => ' espressioni filtri', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Usa ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/it_it.php.orig b/web/lang/it_it.php.orig new file mode 100644 index 000000000..3cda3c37a --- /dev/null +++ b/web/lang/it_it.php.orig @@ -0,0 +1,851 @@ + 'colori a 24 bit', + '32BitColour' => 'colori a 32 bit', // Added - 2011-06-15 + '8BitGrey' => '8 bit scala di grigio', + 'Action' => 'Azione', + 'Actual' => 'Attuale', + 'AddNewControl' => 'Aggiungi nuovo Controllo', + 'AddNewMonitor' => 'Aggiungi nuovo Monitor', + 'AddNewUser' => 'Aggiungi nuovo Utente', + 'AddNewZone' => 'Aggiungi nuova Zona', + 'Alarm' => 'Allarme', + 'AlarmBrFrames' => 'Immagini
Allarme', + 'AlarmFrame' => 'Immagine Allarme', + 'AlarmFrameCount' => 'Allarme Conta frame', + 'AlarmLimits' => 'Limiti Allarme', + 'AlarmMaximumFPS' => 'FPS massimi durante l\'allarme', + 'AlarmPx' => 'Pixel Allarme', + 'AlarmRGBUnset' => 'Devi settare un colore RGB di allarme', + 'Alert' => 'Attenzione', + 'All' => 'Tutto', + 'Apply' => 'Applica', + 'ApplyingStateChange' => 'Sto applicando le modifiche', + 'ArchArchived' => 'Archiviato', + 'ArchUnarchived' => 'Non archiviare', + 'Archive' => 'Archivio', + 'Archived' => 'Archiviato', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Immagini in Allarme', + 'AttrArchiveStatus' => 'Stato Archivio', + 'AttrAvgScore' => 'Punteggio medio', + 'AttrCause' => 'Causa', + 'AttrDate' => 'Data', + 'AttrDateTime' => 'Data/Ora', + 'AttrDiskBlocks' => 'Blocchi del Disco', + 'AttrDiskPercent' => 'Percentuale del Disco', + 'AttrDuration' => 'Durata', + 'AttrFrames' => 'Immagini', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Punteggio massimo', + 'AttrMonitorId' => 'Id Monitor', + 'AttrMonitorName' => 'Nome Monitor', + 'AttrName' => 'Nome', + 'AttrNotes' => 'Note', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Ora', + 'AttrTotalScore' => 'Punteggio totale', + 'AttrWeekday' => 'Giorno della settimana', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Disponibile', // Added - 2009-03-31 + 'AvgBrScore' => 'Punteggio
medio', + 'Background' => 'Background', + 'BackgroundFilter' => 'Esegui filtro in background', + 'BadAlarmFrameCount' => 'Il numero di frame di un allarme deve essere un numero intero superiore a uno', + 'BadAlarmMaxFPS' => 'Il numero massimo di FPS dell\'allarme deve essere un numero intero positivo o un valore in virgola mobile', + 'BadChannel' => 'Il canale deve essere settato con un numero intero uguale o maggiore di zero', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Il dispositivo deve essere impostato con un valore valido', + 'BadFPSReportInterval' => 'L\'intervallo di FPS per i report deve essere un numero intero superiore a 0', + 'BadFormat' => 'Il formato deve essere impostato con un numero intero come 0 o maggiore', + 'BadFrameSkip' => 'Il numero di Frame da scartare deve essere un intero uguale a 0 o superiore', + 'BadHeight' => 'L\'altezza deve essere impostata con un valore valido', + 'BadHost' => 'L\'host deve essere impostato con un indirizzo ip valido o con un hostname, non includendo http://', + 'BadImageBufferCount' => 'La dimensione del buffer dell\'immagine deve essere impostata con un numero intero pari a 10 o maggiore', + 'BadLabelX' => 'L\'etichetta della coordinata X deve essere un numero intero pari a 0 o maggiore', + 'BadLabelY' => 'L\'etichetta della coordinata Y deve essere un numero intero pari a 0 o maggiore', + 'BadMaxFPS' => 'I frame per secondo (FPS) massimi devono essere un numero intero positivo o un valore in virgola mobile', + 'BadNameChars' => 'I nomi possono contenere solo caratteri alfanumerici più i caratteri - e _', + 'BadPalette' => 'La palette dei colori deve essere impostata ad un valore valido', // Added - 2009-03-31 + 'BadPath' => 'Il percorso deve essere impostato con un valore valido', + 'BadPort' => 'La porta deve essere settata con un valore valido', + 'BadPostEventCount' => 'Il buffer d\'immagine successivo ad un evento deve essere un numero maggiore o uguale a zero', + 'BadPreEventCount' => 'Il buffer d\'immagine antecedente ad un evento deve essere minimo 0 e comunque minore della dimensione del buffer d\'immagine', + 'BadRefBlendPerc' => 'La percentuale di miscela di riferimento deve essere un intero positivo', + 'BadSectionLength' => 'La lunghezza della sezione deve essere un numero intero pari a 30 o maggiore', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Il numero di frame di allarme deve essere un numero intero maggiore o uguale a zero', + 'BadWebColour' => 'L\'identificativo del colore deve essere una stringa valida', + 'BadWidth' => 'La larghezza deve essere impostata con un valore valido', + 'Bandwidth' => 'Banda', + 'BlobPx' => 'Blob Px', + 'BlobSizes' => 'Dimensioni Blob', + 'Blobs' => 'Blobs', + 'Brightness' => 'Luminosità', + 'Buffers' => 'Buffers', + 'CanAutoFocus' => 'Puo\' Auto Focus', + 'CanAutoGain' => 'Puo\' Auto Gains', + 'CanAutoIris' => 'Puo\' Auto Iris', + 'CanAutoWhite' => 'Puo\' Auto bil bianco', + 'CanAutoZoom' => 'Puo\' Auto Zoom', + 'CanFocus' => 'Puo\' Fuoco', + 'CanFocusAbs' => 'Puo\' Fuoco Assoluto', + 'CanFocusCon' => 'Puo\' Fuoco Continuo ', + 'CanFocusRel' => 'Puo\' Fuoco Relativo', + 'CanGain' => 'Puo\' Gain ', + 'CanGainAbs' => 'Puo\' Gain Assoluto', + 'CanGainCon' => 'Puo\' Gain Continuo ', + 'CanGainRel' => 'Puo\' Gain Relativo', + 'CanIris' => 'Puo\' Iris', + 'CanIrisAbs' => 'Puo\' Iris Assoluto', + 'CanIrisCon' => 'Puo\' Iris Continuo ', + 'CanIrisRel' => 'Puo\' Iris Relativo', + 'CanMove' => 'Puo\' Mov.', + 'CanMoveAbs' => 'Puo\' Mov. Assoluto', + 'CanMoveCon' => 'Puo\' Mov. Continuo ', + 'CanMoveDiag' => 'Puo\' Mov. Diagonale ', + 'CanMoveMap' => 'Puo\' Mov Mappato', + 'CanMoveRel' => 'Puo\' Mov. Relativo', + 'CanPan' => 'Puo\' Pan' , + 'CanReset' => 'Puo\' Reset', + 'CanSetPresets' => 'Puo\' impostare preset', + 'CanSleep' => 'Puo\' andare in sleep', + 'CanTilt' => 'Puo\' Tilt', + 'CanWake' => 'Puo\' essere riattivato', + 'CanWhite' => 'Puo\' bilanciare il bianco', + 'CanWhiteAbs' => 'Puo\' bilanciare il bianco assoluto', + 'CanWhiteBal' => 'Puo\' bilanciare il bianco', + 'CanWhiteCon' => 'Puo\' bilanciare il bianco Continuo', + 'CanWhiteRel' => 'Puo\' bilanciare il bianco Relativo', + 'CanZoom' => 'Puo\' Zoom', + 'CanZoomAbs' => 'Puo\' Zoom Assoluto', + 'CanZoomCon' => 'Puo\' Zoom Continuo', + 'CanZoomRel' => 'Puo\' Zoom Relativo', + 'Cancel' => 'Annulla', + 'CancelForcedAlarm' => 'Annulla Allarme Forzato', + 'CaptureHeight' => 'Altezza img catturata', + 'CaptureMethod' => 'Metodo di cattura', // Added - 2009-02-08 + 'CapturePalette' => 'Paletta img Catturata', + 'CaptureWidth' => 'Larghezza img Catturata', + 'Cause' => 'Causa', + 'CheckMethod' => 'Metodo di Controllo Allarme', + 'ChooseDetectedCamera' => 'Scegli telecamera rilevata', // Added - 2009-03-31 + 'ChooseFilter' => 'Scegli Filtro', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Scegli Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Chiudi', + 'Colour' => 'Colori', + 'Command' => 'Comando', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Configura', + 'ConfiguredFor' => 'Configurato per', + 'ConfirmDeleteEvents' => 'Sei sicuro di voler cancellare gli eventi selezionati', + 'ConfirmPassword' => 'Conferma Password', + 'ConjAnd' => 'e', + 'ConjOr' => 'o', + 'Console' => 'Console', + 'ContactAdmin' => 'Contatta il tuo amministratore per dettagli.', + 'Continue' => 'Continuo', + 'Contrast' => 'Contrasto', + 'Control' => 'Controllo', + 'ControlAddress' => 'Indirizzo di controllo', + 'ControlCap' => 'Capacita\' di controllo', + 'ControlCaps' => 'Capacita\' di controllo', + 'ControlDevice' => 'Dispositivo di controllo', + 'ControlType' => 'Tipo Controllo', + 'Controllable' => 'Controllabile', + 'Cycle' => 'Cicla', + 'CycleWatch' => 'Vista Ciclica', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Giorno', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Scala di default', + 'DefaultView' => 'Visualizzazione di default', + 'Delete' => 'Elimina', + 'DeleteAndNext' => 'Elimina & Prossimo', + 'DeleteAndPrev' => 'Elimina & Precedente', + 'DeleteSavedFilter' => 'Elimina il filtro salvato', + 'Description' => 'Descrizione', + 'DetectedCameras' => 'Telecamere Rilevate', // Added - 2009-03-31 + 'Device' => 'Periferica', // Added - 2009-02-08 + 'DeviceChannel' => 'Canale Periferica', + 'DeviceFormat' => 'Formato', + 'DeviceNumber' => 'Numero Periferica', + 'DevicePath' => 'Percorso Dispositivo', + 'Devices' => 'Dispositivi', + 'Dimensions' => 'Dimensioni', + 'DisableAlarms' => 'Disabil Allarme', + 'Disk' => 'Utilizzo Disco', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Donate,per favore', + 'DonateAlready' => 'No, ho gia donato... ', + 'DonateEnticement' => 'Stai usando ZoneMinder da un po\' di tempo e spero che tu lo stia trovando utile per la sicurezza di casa tua o del tuo posto di lavoro..Anche se ZoneMinder e\' distribuito liberamente come software libero,costa soldi sia svilupparlo che supportarlo. Se preferisci che questo software continui ad avere supporto e sviluppo in futuro allora considera l\idea di fare una piccola donazione. Donare e\' ovviamente opzionale, ma apprezzato e puoi donare quanto vuoi,quel poco o tanto che tu desideri.

Se hai voglia per cortesia seleziona l\'opzione sotto o punta il tuo browser a http://www.zoneminder.com/donate.html .

Grazie per usare ZoneMinder e non dimenticare di visitare il forum in ZoneMinder.com se cerchi supporto o hai suggerimenti riguardo a come rendere migliore Zoneminder.', + 'DonateRemindDay' => 'Non ancora, ricordamelo ancora tra 1 giorno', + 'DonateRemindHour' => 'Non ancora, ricordamelo ancora tra 1 ora', + 'DonateRemindMonth' => 'Non ancora, ricordamelo ancora tra 1 mese', + 'DonateRemindNever' => 'No, io non voglio donare, non lo faro\' mai', + 'DonateRemindWeek' => 'Non ancora, ricordamelo ancora tra 1 settimana', + 'DonateYes' => 'Si,mi piacerebbe donare qualcosa ora', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Il nome del monitor e\' gia\' presente', // Added - 2009-03-31 + 'Duration' => 'Durata', + 'Edit' => 'Modifica', + 'Email' => 'Email', + 'EnableAlarms' => 'Abilita Allarmi', + 'Enabled' => 'Attivo', + 'EnterNewFilterName' => 'Inserisci il nome del nuovo filtro', + 'Error' => 'Errore', + 'ErrorBrackets' => 'Errore, controlla di avere un ugual numero di parentesti aperte e chiuse.', + 'ErrorValidValue' => 'Errore, controlla che tutti i termini abbiano un valore valido', + 'Etc' => 'ecc.', + 'Event' => 'Evento', + 'EventFilter' => 'Filtro Eventi', + 'EventId' => 'Id Evento', + 'EventName' => 'Nome Evento', + 'EventPrefix' => 'Prefisso Evento', + 'Events' => 'Eventi', + 'Exclude' => 'Escludi', + 'Execute' => 'Esegui', + 'Export' => 'Esporta', + 'ExportDetails' => 'Esp. dettagli eventi', + 'ExportFailed' => 'Esp. Fallita ', + 'ExportFormat' => 'Formato File Esp. ', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Dettagli frame espo.', + 'ExportImageFiles' => 'Esporta le immagini', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Esporto Altri file (se presenti)', + 'ExportOptions' => 'Opzioni Esportazione', + 'ExportSucceeded' => 'Export completata con successo', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Esporto File Video (se presenti)', + 'Exporting' => 'In corso.', + 'FPS' => 'fps', + 'FPSReportInterval' => 'Intervallo Report FPS', + 'FTP' => 'FTP', + 'Far' => 'Lontano', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Feed', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Archivia gli eventi', + 'FilterDeleteEvents' => 'Elimina gli eventi', + 'FilterEmailEvents' => 'Invia dettagli via email', + 'FilterExecuteEvents' => 'Esegui un comando', + 'FilterMessageEvents' => 'Invia dettagli tramite messaggio', + 'FilterPx' => 'Px Filtro', + 'FilterUnset' => 'Devi specificare altezza e larghezza per il filtro', + 'FilterUploadEvents' => 'Fai upload eventi (FTP)', + 'FilterVideoEvents' => 'Crea video per tutte le corrispondenze', + 'Filters' => 'Filtri', + 'First' => 'Primo', + 'FlippedHori' => 'ribaltato orizzontale', + 'FlippedVert' => 'ribaltato verticale', + 'Focus' => 'Focus', + 'ForceAlarm' => 'Forza Allarme', + 'Format' => 'Formato', + 'Frame' => 'Immagini', + 'FrameId' => 'Id Immagine', + 'FrameRate' => 'Immagini al secondo', + 'FrameSkip' => 'Immagini saltate', + 'Frames' => 'Immagini', + 'Func' => 'Funz', + 'Function' => 'Funzione', + 'Gain' => 'Gain', + 'General' => 'Generale', + 'GenerateVideo' => 'Genera Video', + 'GeneratingVideo' => 'Sto generando il Video', + 'GoToZoneMinder' => 'Vai su zoneminder.com', + 'Grey' => 'Grigio', + 'Group' => 'Gruppo', + 'Groups' => 'Gruppi', + 'HasFocusSpeed' => 'Ha velocita\' di focus', + 'HasGainSpeed' => 'Ha velocita\' di guadagno', + 'HasHomePreset' => 'Ha posizioni di present', + 'HasIrisSpeed' => 'Ha velocota\' di iris', + 'HasPanSpeed' => 'Ha velocita\' di Pan', + 'HasPresets' => 'Ha preset', + 'HasTiltSpeed' => 'Ha velocita\' di Tilt', + 'HasTurboPan' => 'Ha il Turbo Pan', + 'HasTurboTilt' => 'Ha il Turbo Tilt', + 'HasWhiteSpeed' => 'Ha velocita\' di bilanciamento del bianco', + 'HasZoomSpeed' => 'Ha velocita\' di zoom', + 'High' => 'Alta', + 'HighBW' => 'Banda Alta', + 'Home' => 'Home', + 'Hour' => 'Ora', + 'Hue' => 'Tinta', + 'Id' => 'Id', + 'Idle' => 'Inattivo', + 'Ignore' => 'Ignora', + 'Image' => 'Immagine', + 'ImageBufferSize' => 'Grandezza Buffer Immagine (frames)', + 'Images' => 'Immagini', + 'In' => 'In', + 'Include' => 'Includi', + 'Inverted' => 'Invertito', + 'Iris' => 'Iris', + 'KeyString' => 'Stringa Chiave', + 'Label' => 'Etichetta', + 'Language' => 'Linguaggio', + 'Last' => 'Ultimo', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'risultati;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Limita ai primi', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Monitor Collegati', + 'List' => 'Lista', + 'Load' => 'Carico Sistema', + 'Local' => 'Locale', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Collegato come:', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Mi Sto Collegando', + 'Login' => 'Login', + 'Logout' => 'Logout', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Bassa', + 'LowBW' => 'Banda Bassa', + 'Main' => 'Principale', + 'Man' => 'Man', + 'Manual' => 'Manuale', + 'Mark' => 'Seleziona', + 'Max' => 'Massima', + 'MaxBandwidth' => 'Banda Massima', + 'MaxBrScore' => 'Punteggio
Massimo', + 'MaxFocusRange' => 'Massimo range del focus', + 'MaxFocusSpeed' => 'Massima velocita\' del focus', + 'MaxFocusStep' => 'Massimo step del focus', + 'MaxGainRange' => 'Massimo range del guadagno', + 'MaxGainSpeed' => 'Massima velocita\' del guadagno', + 'MaxGainStep' => 'Massimo step del guadagno', + 'MaxIrisRange' => 'Massima range dell\'Iris', + 'MaxIrisSpeed' => 'Massima velocita\' dell\'Iris', + 'MaxIrisStep' => 'Massimo step dell\'Iris', + 'MaxPanRange' => 'Massimo range del pan', + 'MaxPanSpeed' => 'Massima velocita\' del tilt', + 'MaxPanStep' => 'Massimo step del pan', + 'MaxTiltRange' => 'Massimo range del tilt', + 'MaxTiltSpeed' => 'Massima velocita\' del tilt', + 'MaxTiltStep' => 'Massimo passo del tilt', + 'MaxWhiteRange' => 'Massimo range del bilanciamento del bianco', + 'MaxWhiteSpeed' => 'Massima velocita\' del bilanciamento del bianco', + 'MaxWhiteStep' => 'Massimo Step del bilanciamento del bianco', + 'MaxZoomRange' => 'Massimo range dello zoom', + 'MaxZoomSpeed' => 'Massima velocita\' dello zoom', + 'MaxZoomStep' => 'Massimo step dello zoom', + 'MaximumFPS' => 'Massimi FPS', + 'Medium' => 'Media', + 'MediumBW' => 'Banda Media', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'L\'area minima dell\'allarme deve essere minore di quella massima', + 'MinAlarmAreaUnset' => 'Devi specificare il numero minimo di pixel per l\'allarme', + 'MinBlobAreaLtMax' => 'L\'area di blob minima deve essere minore dell\'area di blob massima', + 'MinBlobAreaUnset' => 'Devi specificare il numero minimo di pixel per il blob', + 'MinBlobLtMinFilter' => 'L\'area minima di blob deve essere minore o uguale dell\'area minima del filtro', + 'MinBlobsLtMax' => 'I blob minimi devono essere minori dei blob massimi', + 'MinBlobsUnset' => 'Devi specificare il numero minimo di blob', + 'MinFilterAreaLtMax' => 'L\'area minima del filtro deve essere minore di quella massima', + 'MinFilterAreaUnset' => 'Devi specificare il numero minimo di pixel per il filtro', + 'MinFilterLtMinAlarm' => 'L\'area minima di filtro deve essere minore o uguale dell\area minima di allarme', + 'MinFocusRange' => 'Range minimo del Focus', + 'MinFocusSpeed' => 'Velocita\' minima del Focus', + 'MinFocusStep' => 'Minimo step del Focus', + 'MinGainRange' => 'Minimo range del Guadagno', + 'MinGainSpeed' => 'Velocita\' minima del Guadagno', + 'MinGainStep' => 'Step minimo del guadagno', + 'MinIrisRange' => 'Range minimo dell\'Iris', + 'MinIrisSpeed' => 'Velocita\' minima dell\'Iris', + 'MinIrisStep' => 'Step minimo dell\'Iris', + 'MinPanRange' => 'Range minimo del pan', + 'MinPanSpeed' => 'Velocita\' minima del Pan', + 'MinPanStep' => 'Step minimo del Pan', + 'MinPixelThresLtMax' => 'I pixel minimi della soglia devono essere minori dei pixel massimi della soglia', + 'MinPixelThresUnset' => 'Devi specificare una soglia minima di pixel', // Added - 2009-02-08 + 'MinTiltRange' => 'Range minimo del Tilt', + 'MinTiltSpeed' => 'Velocita\' minima del Tilt', + 'MinTiltStep' => 'Step minimo del Tilt', + 'MinWhiteRange' => 'Range minimo del bilanciamento del bianco', + 'MinWhiteSpeed' => 'Velocita\' minima del bialnciamento del bianco', + 'MinWhiteStep' => 'Minimo step del bilanciamento del bianco', + 'MinZoomRange' => 'Range minimo dello zoom', + 'MinZoomSpeed' => 'Velocita\' minima dello zoom', + 'MinZoomStep' => 'Step minimo dello zoom', + 'Misc' => 'Altro', + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Monitor Ids', + 'MonitorPreset' => 'Monitor Presenti', + 'MonitorPresetIntro' => 'Selezionare un appropriato pre settaggio dalla lista riportata qui sotto.

Per favore notare che questo potrebbe sovrascrivere ogni valore che hai già configurato su questo monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Monitors', + 'Montage' => 'Montaggio', + 'Month' => 'Mese', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Sposta', + 'MustBeGe' => 'deve essere superiore a', + 'MustBeLe' => 'deve essere inferiore o pari a', + 'MustConfirmPassword' => 'Devi confermare la password', + 'MustSupplyPassword' => 'Devi inserire una password', + 'MustSupplyUsername' => 'Devi specificare un nome utente', + 'Name' => 'Nome', + 'Near' => 'Vicino', + 'Network' => 'Rete', + 'New' => 'Nuovo', + 'NewGroup' => 'Nuovo Gruppo', + 'NewLabel' => 'Nuova Etichetta', + 'NewPassword' => 'Nuova Password', + 'NewState' => 'Nuovo Stato', + 'NewUser' => 'Nuovo Utente', + 'Next' => 'Prossimo', + 'No' => 'No', + 'NoDetectedCameras' => 'Nessuna telecamera rilevata', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Non ci sono immagini salvate per questo evento', + 'NoGroup' => 'Nessun gruppo', // Added - 2009-02-08 + 'NoSavedFilters' => 'NessunFiltroSalvato', + 'NoStatisticsRecorded' => 'Non ci sono statistiche salvate per questo evento/immagine', + 'None' => 'Nessuno', + 'NoneAvailable' => 'Nessuno disponibile', + 'Normal' => 'Normale', + 'Notes' => 'Note', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'uguale a', + 'OpGt' => 'maggiore di', + 'OpGtEq' => 'maggiore o uguale a', + 'OpIn' => 'impostato', + 'OpLt' => 'minore di', + 'OpLtEq' => 'minore o uguale a', + 'OpMatches' => 'corrisponde', + 'OpNe' => 'diverso da', + 'OpNotIn' => 'non impostato', + 'OpNotMatches' => 'non corrisponde', + 'Open' => 'Apri', + 'OptionHelp' => 'Opzioni di Aiuto', + 'OptionRestartWarning' => 'Queste modifiche potrebbero essere attive solo dopo un riavvio del sistema. Riavviare ZoneMinder.', + 'Options' => 'Opzioni', + 'OrEnterNewName' => 'o inserisci un nuovo nome', + 'Order' => 'Ordine', + 'Orientation' => 'Orientamento', + 'Out' => 'Out', + 'OverwriteExisting' => 'Sovrascrivi', + 'Paged' => 'Con paginazione', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Sinistra', + 'PanRight' => 'Pan Destra', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Parametri', + 'Password' => 'Password', + 'PasswordsDifferent' => 'Le password non coincidono', + 'Paths' => 'Percorsi', + 'Pause' => 'Pause', + 'Phone' => 'Telefono', + 'PhoneBW' => 'Banda Tel', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pixels', + 'Play' => 'Play', + 'PlayAll' => 'Vedi tutti', + 'PleaseWait' => 'Attendere prego', + 'Point' => 'Punto', + 'PostEventImageBuffer' => 'Buffer di immagini Dopo Evento', + 'PreEventImageBuffer' => 'Buffer di immagini Pre Evento', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'Prec', + 'Probe' => 'Prova la telecamera', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Velocita\'', + 'Real' => 'Reale', + 'Record' => 'Registra', + 'RefImageBlendPct' => 'Riferimento Miscela Immagine percentuale', + 'Refresh' => 'Aggiorna', + 'Remote' => 'Remoto', + 'RemoteHostName' => 'Nome dell\'Host Remoto', + 'RemoteHostPath' => 'Percorso dell\'Host Remoto', + 'RemoteHostPort' => 'Porta dell\'Host Remoto', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Colori delle immagini Remote', + 'RemoteMethod' => 'Metodo Remoto', // Added - 2009-02-08 + 'RemoteProtocol' => 'Protocollo Remoto', // Added - 2009-02-08 + 'Rename' => 'Rinomina', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Resetta', + 'ResetEventCounts' => 'Resetta Contatore Eventi', + 'Restart' => 'Riavvia', + 'Restarting' => 'Sto riavviando', + 'RestrictedCameraIds' => 'Camera Ids Riservati', + 'RestrictedMonitors' => 'Monitor limitati', + 'ReturnDelay' => 'Ritardo del ritorno', + 'ReturnLocation' => 'Posizione del ritorno', + 'Rewind' => 'Riavvolgi', + 'RotateLeft' => 'Ruota a Sinista', + 'RotateRight' => 'Ruota a Destra', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Modalita\' funzionamento', + 'RunState' => 'Stato di funzionamento', + 'Running' => 'Attivo', + 'Save' => 'Salva', + 'SaveAs' => 'Salva come', + 'SaveFilter' => 'salva Filtro', + 'Scale' => 'Scala', + 'Score' => 'Punteggio', + 'Secs' => 'Secs', + 'Sectionlength' => 'Lunghezza Sezione', + 'Select' => 'Seleziona', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Monitor Selezionati', + 'SelfIntersecting' => 'I vertici del poligono non devono intersecarsi', + 'Set' => 'Imposta', + 'SetNewBandwidth' => 'Imposta nuova Banda', + 'SetPreset' => 'Imposta Preset', + 'Settings' => 'Impostazioni', + 'ShowFilterWindow' => 'MostraFinestraFiltri', + 'ShowTimeline' => 'Mostra linea temporale', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'grandezza', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Cresc', + 'SortBy' => 'Ordina per', + 'SortDesc' => 'Decr', + 'Source' => 'Sorgente', + 'SourceColours' => 'Colori della Sorgente', // Added - 2009-02-08 + 'SourcePath' => 'Percorso della Sorgente', // Added - 2009-02-08 + 'SourceType' => 'Tipo Sorgente', + 'Speed' => 'Velocita\'', + 'SpeedHigh' => 'Alta Velocita\'', + 'SpeedLow' => 'Bassa Velocita\'', + 'SpeedMedium' => 'Media Velocita\'', + 'SpeedTurbo' => 'Turbo Velocita\'', + 'Start' => 'Avvia', + 'State' => 'Stato', + 'Stats' => 'Statistiche', + 'Status' => 'Stato', + 'Step' => 'Passo', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Lungo passo', + 'StepMedium' => 'Medio passo', + 'StepNone' => 'No passo', + 'StepSmall' => 'Piccolo passo', + 'Stills' => 'Foto', + 'Stop' => 'Stop', + 'Stopped' => 'Inattivo', + 'Stream' => 'Flusso', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Accetta', + 'System' => 'Sistema', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Anteprima', + 'Tilt' => 'Tilt', + 'Time' => 'Ora', + 'TimeDelta' => 'Tempo di Delta', + 'TimeStamp' => 'Time Stamp', + 'Timeline' => 'Linea Temporale', + 'Timestamp' => 'Timestamp', + 'TimestampLabelFormat' => 'Formato etichetta timestamp', + 'TimestampLabelX' => 'coordinata X etichetta', + 'TimestampLabelY' => 'coordinata Y etichetta', + 'Today' => 'Oggi ', + 'Tools' => 'Strumenti', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Punteggio
Totale', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Triggers', + 'TurboPanSpeed' => 'Velocita\' Turbo Pan', + 'TurboTiltSpeed' => 'Velocita\' Turbo Tilt', + 'Type' => 'Tipo', + 'Unarchive' => 'Togli dall\'archivio', + 'Undefined' => 'Non specificato', // Added - 2009-02-08 + 'Units' => 'Unità', + 'Unknown' => 'Sconosciuto', + 'Update' => 'Aggiorna', + 'UpdateAvailable' => 'Un aggiornamento di ZoneMinder è disponibilie.', + 'UpdateNotNecessary' => 'Nessun aggiornamento necessario.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Usa Filtro', + 'UseFilterExprsPost' => ' espressioni filtri', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Usa ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Utente', + 'Username' => 'Nome Utente', + 'Users' => 'Utenti', + 'Value' => 'Valore', + 'Version' => 'Versione', + 'VersionIgnore' => 'Ignora questa versione', + 'VersionRemindDay' => 'Ricordami ancora tra un giorno', + 'VersionRemindHour' => 'Ricordami ancora tra un\'ora', + 'VersionRemindNever' => 'Non ricordarmi di nuove versioni', + 'VersionRemindWeek' => 'Ricordami ancora tra una settimana', + 'Video' => 'Video', + 'VideoFormat' => 'Formato Video', + 'VideoGenFailed' => 'Generazione Video Fallita!', + 'VideoGenFiles' => 'File Video Esistenti', + 'VideoGenNoFiles' => 'Non ho trovato file ', + 'VideoGenParms' => 'Parametri Generazione Video', + 'VideoGenSucceeded' => 'Successo: Generato Video !', + 'VideoSize' => 'Dimensioni Video', + 'View' => 'vedi', + 'ViewAll' => 'Vedi Tutto', + 'ViewEvent' => 'Vedi Evento', + 'ViewPaged' => 'Vedi con paginazione', + 'Wake' => 'Riattiva', + 'WarmupFrames' => 'Immagini Allerta', + 'Watch' => 'Guarda', + 'Web' => 'Web', + 'WebColour' => 'Colore Web', + 'Week' => 'Settimana', + 'White' => 'Bianco', + 'WhiteBalance' => 'Bil. Bianco ', + 'Wide' => 'Larghezza', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'Stringa attivazione X10', + 'X10InputAlarmString' => 'Stringa allarme input X10', + 'X10OutputAlarmString' => 'Stringa allarme output X10', + 'Y' => 'Y', + 'Yes' => 'Si', + 'YouNoPerms' => 'Non hai i permessi per accedere a questa risorsa.', + 'Zone' => 'Zona', + 'ZoneAlarmColour' => 'Colore Allarme (RGB)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Larghezza/Altezza Filtro (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Area Allarmata', + 'ZoneMinMaxBlobArea' => 'Min/Max Area di Blob', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Area Filtrata', + 'ZoneMinMaxPixelThres' => 'Min/Max Soglia Pixel (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zone', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Ingrandisci', + 'ZoomOut' => 'Rimpicciolisci', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Login attuale: \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Ultimi %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'L\'ultima release v%1$s, tu hai v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Funzione Monitor %1$s', + 'RunningRecentVer' => 'Stai usando la versione più aggiornata di ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Eventi', 1=>'Evento', 2=>'Eventi' ), + 'Monitor' => array( 0=>'Monitor', 1=>'Monitor', 2=>'Monitor' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Errore, sono incapace di correlare le stringhe del file-linguaggio'); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/ja_jp.php b/web/lang/ja_jp.php index 0d083449f..0aac7acfa 100644 --- a/web/lang/ja_jp.php +++ b/web/lang/ja_jp.php @@ -264,6 +264,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Œp‘±ŽžŠÔ', @@ -527,6 +528,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Play All', 'PleaseWait' => '‚¨‘Ò‚¿‚­‚¾‚³‚¢', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => '²ÍÞÝÄ ²Ò°¼Þ Êޯ̧Œã', 'PreEventImageBuffer' => '²ÍÞÝÄ ²Ò°¼Þ Êޯ̧‘O', @@ -652,6 +654,7 @@ $SLANG = array( 'UpdateNotNecessary' => '±¯ÌßÃÞ°Ä‚Ì•K—v‚Í‚ ‚è‚Ü‚¹‚ñ', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => '̨ÙÀ°‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢', 'UseFilterExprsPost' => ' Ì¨ÙÀ°ŒÂ”', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Žw’肵‚Ä‚­‚¾‚³‚¢: ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/ja_jp.php.orig b/web/lang/ja_jp.php.orig new file mode 100644 index 000000000..0d083449f --- /dev/null +++ b/web/lang/ja_jp.php.orig @@ -0,0 +1,846 @@ + '24ËޯĶװ', + '32BitColour' => '32ËޯĶװ', // Added - 2011-06-15 + '8BitGrey' => '8ËޯĔZ’W‰æ‘œ', + 'Action' => 'Action', + 'Actual' => '¶’†Œp', + 'AddNewControl' => 'Add New Control', + 'AddNewMonitor' => 'ÓÆÀ°’ljÁ', + 'AddNewUser' => 'Õ°»Þ’ljÁ', + 'AddNewZone' => '¿Þ°Ý’ljÁ', + 'Alarm' => '±×°Ñ', + 'AlarmBrFrames' => '±×°Ñ
ÌÚ°Ñ', + 'AlarmFrame' => '±×°Ñ ÌÚ°Ñ', + 'AlarmFrameCount' => 'Alarm Frame Count', + 'AlarmLimits' => '±×°ÑŒÀ“x', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => '±×°Ñ Px', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Œx', + 'All' => '‘S‚Ä', + 'Apply' => '“K—p', + 'ApplyingStateChange' => '•ÏX“K—p’†', + 'ArchArchived' => '•Û‘¶•ª‚Ì‚Ý', + 'ArchUnarchived' => '•Û‘¶•ªˆÈŠO‚Ì‚Ý', + 'Archive' => '±°¶²ÌÞ', + 'Archived' => 'Archived', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => '±×°Ñ ÌÚ°Ñ', + 'AttrArchiveStatus' => '•Û‘¶ó‘Ô', + 'AttrAvgScore' => '•½‹Ï½º±°', + 'AttrCause' => 'Cause', + 'AttrDate' => '“ú•t', + 'AttrDateTime' => '“úŽž', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Percent', + 'AttrDuration' => 'Œp‘±ŽžŠÔ', + 'AttrFrames' => 'ÌÚ°Ñ', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Å‚½º±°', + 'AttrMonitorId' => 'ÓÆÀ° Id', + 'AttrMonitorName' => 'ÓÆÀ° –¼‘O', + 'AttrName' => 'Name', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'ŽžŠÔ', + 'AttrTotalScore' => '‡Œv½º±°', + 'AttrWeekday' => '—j“ú', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => '•½‹Ï
½º±°', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => '‘шæ•', + 'BlobPx' => 'ÌÞÛÌÞ Px', + 'BlobSizes' => 'ÌÞÛÌÞ »²½Þ', + 'Blobs' => 'ÌÞÛÌÞ', + 'Brightness' => '‹P“x', + 'Buffers' => 'Êޯ̧', + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'CanFocus' => 'Can Focus', + 'CanFocusAbs' => 'Can Focus Absolute', + 'CanFocusCon' => 'Can Focus Continuous', + 'CanFocusRel' => 'Can Focus Relative', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'Can Move', + 'CanMoveAbs' => 'Can Move Absolute', + 'CanMoveCon' => 'Can Move Continuous', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relative', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoom' => 'Can Zoom', + 'CanZoomAbs' => 'Can Zoom Absolute', + 'CanZoomCon' => 'Can Zoom Continuous', + 'CanZoomRel' => 'Can Zoom Relative', + 'Cancel' => '·¬Ý¾Ù', + 'CancelForcedAlarm' => '‹­§±×°Ñ·¬Ý¾Ù', + 'CaptureHeight' => 'Žæ‚èž‚Ý‚‚³', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Žæ‚èž‚ÝÊßÚ¯Ä', + 'CaptureWidth' => 'Žæ‚èž‚Ý•', + 'Cause' => 'Cause', + 'CheckMethod' => '±×°Ñ Áª¯¸•û–@', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => '̨ÙÀ°‚Ì‘I‘ð', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => '•Â‚¶‚é', + 'Colour' => 'F', + 'Command' => 'Command', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Config', + 'ConfiguredFor' => 'Ý’è:', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Ê߽ܰÄÞ‚ÌŠm”F', + 'ConjAnd' => '‹y‚Ñ', + 'ConjOr' => '–”‚Í', + 'Console' => 'ºÝ¿°Ù', + 'ContactAdmin' => 'ŠÇ—ŽÒ‚É‚¨–â‚¢‡‚킹‚­‚¾‚³‚¢B', + 'Continue' => 'Continue', + 'Contrast' => 'ºÝÄ×½Ä', + 'Control' => 'Control', + 'ControlAddress' => 'Control Address', + 'ControlCap' => 'Control Capability', + 'ControlCaps' => 'Control Capabilities', + 'ControlDevice' => 'Control Device', + 'ControlType' => 'Control Type', + 'Controllable' => 'Controllable', + 'Cycle' => 'Cycle', + 'CycleWatch' => '»²¸ÙŠÏŽ@', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => '—j“ú', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'íœ', + 'DeleteAndNext' => 'ŽŸ‚ðíœ', + 'DeleteAndPrev' => '‘O‚ðíœ', + 'DeleteSavedFilter' => '•Û‘¶Ì¨ÙÀ°‚Ìíœ', + 'Description' => 'à–¾', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'ÃÞÊÞ²½ Á¬ÝÈÙ', + 'DeviceFormat' => 'ÃÞÊÞ²½ Ì«°Ï¯Ä', + 'DeviceNumber' => 'ÃÞÊÞ²½”Ô†', + 'DevicePath' => 'Device Path', + 'Devices' => 'Devices', + 'Dimensions' => '¡–@', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Disk', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Œp‘±ŽžŠÔ', + 'Edit' => '•ÒW', + 'Email' => 'Ò°Ù', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Žg—p‰Â”\\', + 'EnterNewFilterName' => 'V‚µ‚¢Ì¨ÙÀ°–¼‚Ì“ü—Í', + 'Error' => 'ƒGƒ‰[', + 'ErrorBrackets' => 'ƒGƒ‰[AŠJ‚«Š‡ŒÊ‚ƕ‚¶Š‡ŒÊ‚Ì”‚ª‡‚Á‚Ä‚¢‚é‚Ì‚©‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢', + 'ErrorValidValue' => 'ƒGƒ‰[A‘S‚Ä‚Ì€‚Ì”’l‚ª—LŒø‚©‚Ç‚¤‚©‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢', + 'Etc' => '“™', + 'Event' => '²ÍÞÝÄ', + 'EventFilter' => '²ÍÞÝÄ Ì¨ÙÀ°', + 'EventId' => 'Event Id', + 'EventName' => 'Event Name', + 'EventPrefix' => 'Event Prefix', + 'Events' => '²ÍÞÝÄ', + 'Exclude' => '”rœ', + 'Execute' => 'Execute', + 'Export' => 'Export', + 'ExportDetails' => 'Export Event Details', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'Exporting', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS•ñŠÔŠu', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => '‘—‚èž‚Þ', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Archive all matches', + 'FilterDeleteEvents' => 'Delete all matches', + 'FilterEmailEvents' => 'Email details of all matches', + 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterMessageEvents' => 'Message details of all matches', + 'FilterPx' => '̨ÙÀ° Px', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Upload all matches', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filters', + 'First' => 'ʼn', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Focus', + 'ForceAlarm' => '‹­§±×°Ñ', + 'Format' => 'Format', + 'Frame' => 'ÌÚ°Ñ', + 'FrameId' => 'ÌÚ°Ñ ID', + 'FrameRate' => 'ÌÚ°ÑÚ°Ä', + 'FrameSkip' => 'Ìڰѽ·¯Ìß', + 'Frames' => 'ÌÚ°Ñ', + 'Func' => '‹@”\\', + 'Function' => '‹@”\\', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'ËÞÃÞµ‚̶¬', + 'GeneratingVideo' => 'ËÞÃÞµ¶¬’†', + 'GoToZoneMinder' => 'ZoneMinder.com‚És‚­', + 'Grey' => '¸ÞÚ°', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'High' => '‚', + 'HighBW' => '‚‘шæ', + 'Home' => 'Home', + 'Hour' => 'Žž', + 'Hue' => 'F‘Š', + 'Id' => 'ID', + 'Idle' => '‘Ò‹@ó‘Ô', + 'Ignore' => '–³Ž‹', + 'Image' => '‰æ‘œ', + 'ImageBufferSize' => '‰æ‘œ Êޯ̧ »²½Þ', + 'Images' => 'Images', + 'In' => 'In', + 'Include' => '‘g‚Ýž‚Þ', + 'Inverted' => '”½“]', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Œ¾Œê', + 'Last' => 'ÅI', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Load', + 'Local' => 'Û°¶Ù', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Û¸Þ²ÝÏ‚Ý:', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => '۸޲ݒ†', + 'Login' => 'Û¸Þ²Ý', + 'Logout' => 'Û¸Þ±³Ä', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => '’á', + 'LowBW' => '’á‘шæ', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => '‘I‘ð', + 'Max' => 'Å‚', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'Å‚
½º±°', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => 'Å‚ FPS', + 'Medium' => '’†', + 'MediumBW' => '’†‘шæ', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Å’áÌÞÛ¯Ìޔ͈͂ÍÅ‚’l‚æ‚èˆÈ‰º‚Å‚È‚¯‚ê‚΂¢‚¯‚È‚¢', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Å’áÌÞÛ¯ÌÞ”‚ÍÅ‚”‚æ‚èˆÈ‰º‚Å‚È‚¯‚ê‚΂¢‚¯‚È‚¢', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'Å’áË߸¾Ù臒l‚ÍÅ‚’l‚æ‚èˆÈ‰º‚Å‚È‚¯‚ê‚΂¢‚¯‚È‚¢', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => '‚»‚Ì‘¼', + 'Monitor' => 'ÓÆÀ°', + 'MonitorIds' => 'ÓÆÀ° ID', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'ÓÆÀ°', + 'Montage' => 'ÓÝÀ°¼Þ­', + 'Month' => 'ŒŽ', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Move', + 'MustBeGe' => '“¯“™‚©ˆÈã‚Å‚È‚¯‚ê‚΂¢‚¯‚È‚¢', + 'MustBeLe' => '“¯“™‚©ˆÈ‰º‚Å‚È‚¯‚ê‚΂¢‚¯‚È‚¢', + 'MustConfirmPassword' => 'ƒpƒXƒ[ƒh‚ÌŠm”F‚ð‚µ‚Ä‚­‚¾‚³‚¢', + 'MustSupplyPassword' => 'ƒpƒXƒ[ƒh‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢', + 'MustSupplyUsername' => 'ƒ†[ƒU–¼‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢', + 'Name' => '–¼‘O', + 'Near' => 'Near', + 'Network' => 'ȯÄÜ°¸', + 'New' => 'V‹K', + 'NewGroup' => 'New Group', + 'NewLabel' => 'New Label', + 'NewPassword' => 'V‚µ‚¢Ê߽ܰÄÞ', + 'NewState' => 'V‹Kó‘Ô', + 'NewUser' => 'V‚µ‚¢Õ°»Þ', + 'Next' => 'ŽŸ', + 'No' => '‚¢‚¢‚¦', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => '‚±‚̲ÍÞÝÄ‚ÌÌÚ°Ñ‚Í“o˜^‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => '•Û‘¶‚³‚ꂽ̨ÙÀ°‚Í‚ ‚è‚Ü‚¹‚ñ', + 'NoStatisticsRecorded' => '‚±‚̲ÍÞÝÄ/ÌÚ°Ñ‚Ì“Œv‚Í“o˜^‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ', + 'None' => '‚ ‚è‚Ü‚¹‚ñ', + 'NoneAvailable' => '‚ ‚è‚Ü‚¹‚ñ', + 'Normal' => '•’Ê', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => '“¯“™', + 'OpGt' => 'ˆÈ‰º', + 'OpGtEq' => '“¯“™‚©ˆÈã', + 'OpIn' => '¾¯Ä‚É“ü‚Á‚Ä‚¢‚é', + 'OpLt' => 'ˆÈ‰º', + 'OpLtEq' => '“¯“™‚©ˆÈ‰º', + 'OpMatches' => 'ˆê’v‚·‚é', + 'OpNe' => '“¯“™‚Å‚È‚¢', + 'OpNotIn' => '¾¯Ä‚É“ü‚Á‚Ä‚¢‚È‚¢', + 'OpNotMatches' => 'ˆê’v‚µ‚È‚¢', + 'Open' => 'Open', + 'OptionHelp' => 'µÌß¼®Ý ÍÙÌß', + 'OptionRestartWarning' => '‚±‚Ì•ÏX‚Í‹N“®’†”½‰f‚³‚ê‚È‚¢ê‡‚ª‚ ‚è‚Ü‚·B\n•ÏX‚µ‚Ä‚©‚çZoneMinder‚ðÄ‹N“®‚µ‚Ä‚­‚¾‚³‚¢B', + 'Options' => 'µÌß¼®Ý', + 'OrEnterNewName' => '–”‚ÍV‚µ‚¢–¼‘O‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢', + 'Order' => 'Order', + 'Orientation' => 'µØµÝð¼®Ý', + 'Out' => 'Out', + 'OverwriteExisting' => 'ã‘‚«‚µ‚Ü‚·', + 'Paged' => 'Íß°¼Þ‰»', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Êß×Ò°À', + 'Password' => 'Ê߽ܰÄÞ', + 'PasswordsDifferent' => 'V‚µ‚¢ƒpƒXƒ[ƒh‚ÆÄ“ü—̓pƒXƒ[ƒh‚ªˆê’v‚µ‚Ü‚¹‚ñ', + 'Paths' => 'Êß½', + 'Pause' => 'Pause', + 'Phone' => 'Phone', + 'PhoneBW' => 'Œg‘Ñ—p', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'Ë߸¾Ù', + 'Play' => 'Play', + 'PlayAll' => 'Play All', + 'PleaseWait' => '‚¨‘Ò‚¿‚­‚¾‚³‚¢', + 'Point' => 'Point', + 'PostEventImageBuffer' => '²ÍÞÝÄ ²Ò°¼Þ Êޯ̧Œã', + 'PreEventImageBuffer' => '²ÍÞÝÄ ²Ò°¼Þ Êޯ̧‘O', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => '‘O', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Ú°Ä', + 'Real' => '¶’†Œp', + 'Record' => '˜^‰æ', + 'RefImageBlendPct' => '²Ò°¼Þ ÌÞÚÝÄÞ ŽQÆ %', + 'Refresh' => 'ÅV‚Ìî•ñ‚ÉXV', + 'Remote' => 'ØÓ°Ä', + 'RemoteHostName' => 'ØÓ°Ä Î½Ä –¼', + 'RemoteHostPath' => 'ØÓ°Ä Î½Ä Êß½', + 'RemoteHostPort' => 'ØÓ°Ä Î½Ä Îß°Ä', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'ØÓ°Ä ²Ò°¼Þ ¶×°', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'V‚µ‚¢–¼‘O‚ð‚‚¯‚é', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => '²ÍÞÝÄ ¶³ÝÄ Ø¾¯Ä', + 'Restart' => 'Ä‹N“®', + 'Restarting' => 'Ä‹N“®’†', + 'RestrictedCameraIds' => '§ŒÀ‚³‚ꂽ¶Ò× ID', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => '¶‚ɉñ“]', + 'RotateRight' => '‰E‚ɉñ“]', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => '‹N“®Ó°ÄÞ', + 'RunState' => '‹N“®ó‘Ô', + 'Running' => '‹N“®’†', + 'Save' => '•Û‘¶', + 'SaveAs' => '–¼‘O‚ð‚‚¯‚Ä•Û‘¶', + 'SaveFilter' => '̨ÙÀ°‚ð•Û‘¶', + 'Scale' => '½¹°Ù', + 'Score' => '½º±°', + 'Secs' => '•b', + 'Sectionlength' => '’·‚³', + 'Select' => 'Select', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Set', + 'SetNewBandwidth' => 'V‚µ‚¢‘ш敂ÌÝ’è', + 'SetPreset' => 'Set Preset', + 'Settings' => 'Ý’è', + 'ShowFilterWindow' => '̨ÙÀ° ³²ÝÄÞ°‚Ì•\Ž¦', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Asc', + 'SortBy' => 'Sort by', + 'SortDesc' => 'Desc', + 'Source' => '¿°½', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => '¿°½ À²Ìß', + 'Speed' => 'Speed', + 'SpeedHigh' => 'High Speed', + 'SpeedLow' => 'Low Speed', + 'SpeedMedium' => 'Medium Speed', + 'SpeedTurbo' => 'Turbo Speed', + 'Start' => '½À°Ä', + 'State' => 'ó‘Ô', + 'Stats' => '“Œv', + 'Status' => 'ó‘Ô', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => '½Á°Ù‰æ‘œ', + 'Stop' => '’âŽ~', + 'Stopped' => '’âŽ~ó‘Ô', + 'Stream' => '½ÄØ°Ñ', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => '¼½ÃÑ', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => 'ŽžŠÔ', + 'TimeDelta' => 'ÃÞÙÀ À²Ñ', + 'TimeStamp' => 'À²Ñ ½ÀÝÌß', + 'Timeline' => 'Timeline', + 'Timestamp' => 'À²Ñ½ÀÝÌß', + 'TimestampLabelFormat' => 'À²Ñ½ÀÝÌß ×ÍÞÙ Ì«°Ï¯Ä', + 'TimestampLabelX' => 'À²Ñ½ÀÝÌß ×ÍÞÙ X', + 'TimestampLabelY' => 'À²Ñ½ÀÝÌß ×ÍÞÙ Y', + 'Today' => 'Today', + 'Tools' => '°Ù', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => '‡Œv
½º±°', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Äضް', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'À²Ìß', + 'Unarchive' => '‰ð“€', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'ÕƯÄ', + 'Unknown' => '•s–¾', + 'Update' => 'Update', + 'UpdateAvailable' => 'ZoneMinder‚̱¯ÌßÃÞ°Ä‚ª‚ ‚è‚Ü‚·', + 'UpdateNotNecessary' => '±¯ÌßÃÞ°Ä‚Ì•K—v‚Í‚ ‚è‚Ü‚¹‚ñ', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => '̨ÙÀ°‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢', + 'UseFilterExprsPost' => ' Ì¨ÙÀ°ŒÂ”', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Žw’肵‚Ä‚­‚¾‚³‚¢: ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Õ°»Þ', + 'Username' => 'Õ°»Þ–¼', + 'Users' => 'Õ°»Þ', + 'Value' => '”’l', + 'Version' => 'ÊÞ°¼Þ®Ý', + 'VersionIgnore' => '‚±‚ÌÊÞ°¼Þ®Ý‚𖳎‹', + 'VersionRemindDay' => '1“úŒã‚ÉÄ“x’m‚点‚é', + 'VersionRemindHour' => '1ŽžŠÔŒã‚ÉÄ“x’m‚点‚é', + 'VersionRemindNever' => 'V‚µ‚¢ÊÞ°¼Þ®Ý‚Ì’m‚点‚Í•K—v‚È‚¢', + 'VersionRemindWeek' => '1TŠÔŒã‚ÉÄ“x’m‚点‚é', + 'Video' => 'ËÞÃÞµ', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'ËÞÃÞµ¶¬‚ÌŽ¸”sI', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'ËÞÃÞµ¶¬ Êß×Ò°À', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'ËÞÃÞµ »²½Þ', + 'View' => '•\Ž¦', + 'ViewAll' => '‘S•”•\Ž¦', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'Íß°¼Þ‰»‚Ì•\Ž¦', + 'Wake' => 'Wake', + 'WarmupFrames' => '³«°Ñ±¯Ìß ÌÚ°Ñ', + 'Watch' => 'ŠÄŽ‹', + 'Web' => '³ªÌÞ', + 'WebColour' => 'Web Colour', + 'Week' => 'T', + 'White' => 'White', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10‹N“®•¶Žš—ñ', + 'X10InputAlarmString' => 'X10“ü—ͱװѕ¶Žš—ñ', + 'X10OutputAlarmString' => 'X10o—ͱװѕ¶Žš—ñ', + 'Y' => 'Y', + 'Yes' => '‚Í‚¢', + 'YouNoPerms' => '‚±‚ÌŽ‘Œ¹‚̱¸¾½Œ ‚ª‚ ‚è‚Ü‚¹‚ñB', + 'Zone' => '¿Þ°Ý', + 'ZoneAlarmColour' => '±×°Ñ ¶×° (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => '¿Þ°Ý', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => '‚½‚¾¡\'%1$s\‚ªÛ¸Þ²Ý‚µ‚Ä‚¢‚Ü‚·', + 'EventCount' => '%1$s %2$s', + 'LastEvents' => 'ÅI %1$s %2$s', + 'LatestRelease' => 'ÅVÊÞ°¼Þ®Ý‚Í v%1$sA‚²—˜—pÊÞ°¼Þ®Ý‚Ív%2$s.', + 'MonitorCount' => '%1$s %2$s', + 'MonitorFunction' => 'ÓÆÀ°%1$s ‹@”\\', + 'RunningRecentVer' => '‚ ‚È‚½‚ÍZoneMinder‚ÌÅVÊÞ°¼Þ®Ý v%s.‚ðŽg‚Á‚Ä‚¢‚Ü‚·', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'²ÍÞÝÄ', 1=>'²ÍÞÝÄ', 2=>'²ÍÞÝÄ' ), + 'Monitor' => array( 0=>'ÓÆÀ°', 1=>'ÓÆÀ°', 2=>'ÓÆÀ°' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/nl_nl.php b/web/lang/nl_nl.php index 0526455a1..e3f594bf6 100644 --- a/web/lang/nl_nl.php +++ b/web/lang/nl_nl.php @@ -264,6 +264,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Duur', @@ -527,6 +528,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Play All', 'PleaseWait' => 'wacht A.U.B.', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'Post gebeurtenis Image Buffer', 'PreEventImageBuffer' => 'Pre gebeurtenis Image Buffer', @@ -647,11 +649,12 @@ $SLANG = array( 'Undefined' => 'Undefined', // Added - 2009-02-08 'Units' => 'Eenheden', 'Unknown' => 'Onbekend', - 'Update' => 'Update', + 'Update' => 'Update', 'UpdateAvailable' => 'een update voor ZoneMinder is beschikbaar', 'UpdateNotNecessary' => 'geen update noodzakelijk', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Gebruik Filter', 'UseFilterExprsPost' => ' filter expressies', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Gebruik ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/nl_nl.php.orig b/web/lang/nl_nl.php.orig new file mode 100644 index 000000000..0526455a1 --- /dev/null +++ b/web/lang/nl_nl.php.orig @@ -0,0 +1,846 @@ + '24 bit kleuren', + '32BitColour' => '32 bit kleuren', // Added - 2011-06-15 + '8BitGrey' => '8 bit grijstinten', + 'Action' => 'Action', + 'Actual' => 'Aktueel', + 'AddNewControl' => 'Add New Control', + 'AddNewMonitor' => 'Voeg een nieuwe monitor toe', + 'AddNewUser' => 'Voeg een nieuwe gebruiker toe', + 'AddNewZone' => 'Voeg een nieuwe zone toe', + 'Alarm' => 'Alarm', + 'AlarmBrFrames' => 'Alarm
Frames', + 'AlarmFrame' => 'Alarm Frame', + 'AlarmFrameCount' => 'Alarm Frame Count', + 'AlarmLimits' => 'Alarm Limieten', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Alarm Px', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Waarschuwing', + 'All' => 'Alle', + 'Apply' => 'Voer uit', + 'ApplyingStateChange' => 'Status verandering aan het uitvoeren', + 'ArchArchived' => 'Alleen gearchiveerd', + 'ArchUnarchived' => 'Alleen ongearchiveerd', + 'Archive' => 'Archief', + 'Archived' => 'Archived', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Alarm frames', + 'AttrArchiveStatus' => 'Archief status', + 'AttrAvgScore' => 'Gem. score', + 'AttrCause' => 'Cause', + 'AttrDate' => 'Datum', + 'AttrDateTime' => 'Datum/tijd', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Percent', + 'AttrDuration' => 'Duur', + 'AttrFrames' => 'Frames', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Max. Score', + 'AttrMonitorId' => 'Monitor Id', + 'AttrMonitorName' => 'Monitor Naam', + 'AttrName' => 'Name', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Tijd', + 'AttrTotalScore' => 'Totale Score', + 'AttrWeekday' => 'Weekdag', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'Gem.
score', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Namen mogen alleen alpha numerieke karakters bevatten plus hyphens en underscores', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'Bandbreedte', + 'BlobPx' => 'Blob px', + 'BlobSizes' => 'Blob grootte', + 'Blobs' => 'Blobs', + 'Brightness' => 'Helderheid', + 'Buffers' => 'Buffers', + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'CanFocus' => 'Can Focus', + 'CanFocusAbs' => 'Can Focus Absolute', + 'CanFocusCon' => 'Can Focus Continuous', + 'CanFocusRel' => 'Can Focus Relative', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'Can Move', + 'CanMoveAbs' => 'Can Move Absolute', + 'CanMoveCon' => 'Can Move Continuous', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relative', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoom' => 'Can Zoom', + 'CanZoomAbs' => 'Can Zoom Absolute', + 'CanZoomCon' => 'Can Zoom Continuous', + 'CanZoomRel' => 'Can Zoom Relative', + 'Cancel' => 'Cancel', + 'CancelForcedAlarm' => 'Cancel geforceerd alarm', + 'CaptureHeight' => 'Capture hoogte', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Capture pallet', + 'CaptureWidth' => 'Capture breedte', + 'Cause' => 'Cause', + 'CheckMethod' => 'Alarm Check Methode', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Kies filter', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Sluit', + 'Colour' => 'Kleur', + 'Command' => 'Command', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Config', + 'ConfiguredFor' => 'Geconfigureerd voor', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Bevestig wachtwoord', + 'ConjAnd' => 'en', + 'ConjOr' => 'of', + 'Console' => 'Console', + 'ContactAdmin' => 'Neem A.U.B. contact op met je beheerder voor details.', + 'Continue' => 'Continue', + 'Contrast' => 'Contrast', + 'Control' => 'Control', + 'ControlAddress' => 'Control Address', + 'ControlCap' => 'Control Capability', + 'ControlCaps' => 'Control Capabilities', + 'ControlDevice' => 'Control Device', + 'ControlType' => 'Control Type', + 'Controllable' => 'Controllable', + 'Cycle' => 'Cycle', + 'CycleWatch' => 'Observeer cyclus', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Dag', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'verwijder', + 'DeleteAndNext' => 'verwijder & volgende', + 'DeleteAndPrev' => 'verwijder & vorige', + 'DeleteSavedFilter' => 'verwijder opgeslagen filter', + 'Description' => 'Omschrijving', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Apparaat kanaal', + 'DeviceFormat' => 'Apparaat formaat', + 'DeviceNumber' => 'apparaat nummer', + 'DevicePath' => 'Device Path', + 'Devices' => 'Devices', + 'Dimensions' => 'Afmetingen', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Disk', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Duur', + 'Edit' => 'Bewerk', + 'Email' => 'Email', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Uitgeschakeld', + 'EnterNewFilterName' => 'Voer nieuwe filter naam in', + 'Error' => 'Error', + 'ErrorBrackets' => 'Error, controleer of je even veel openings als afsluiting brackets hebt gebruikt', + 'ErrorValidValue' => 'Error, Controleer of alle termen een geldige waarde hebben', + 'Etc' => 'etc', + 'Event' => 'Gebeurtenis', + 'EventFilter' => 'Gebeurtenis filter', + 'EventId' => 'Event Id', + 'EventName' => 'Event Name', + 'EventPrefix' => 'Event Prefix', + 'Events' => 'Gebeurtenissen', + 'Exclude' => 'Sluit uit', + 'Execute' => 'Execute', + 'Export' => 'Export', + 'ExportDetails' => 'Export Event Details', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'Exporting', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS rapport interval', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'toevoer', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Archiveer alle overeenkomsten', + 'FilterDeleteEvents' => 'Verwijder alle overeenkomsten', + 'FilterEmailEvents' => 'Email de details van alle overeenkomsten', + 'FilterExecuteEvents' => 'Voer opdrachten op alle overeenkomsten uit', + 'FilterMessageEvents' => 'Bericht de details van alle overeenkomsten', + 'FilterPx' => 'Filter px', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Upload alle overeenkomsten', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filters', + 'First' => 'Eerste', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Focus', + 'ForceAlarm' => 'Forceeer alarm', + 'Format' => 'Format', + 'Frame' => 'Frame', + 'FrameId' => 'Frame id', + 'FrameRate' => 'Frame rate', + 'FrameSkip' => 'Frame overgeslagen', + 'Frames' => 'Frames', + 'Func' => 'Func', + 'Function' => 'Functie', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'Genereer Video', + 'GeneratingVideo' => 'Genereren Video', + 'GoToZoneMinder' => 'ga naar ZoneMinder.com', + 'Grey' => 'Grijs', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'High' => 'Hoog', + 'HighBW' => 'Hoog B/W', + 'Home' => 'Home', + 'Hour' => 'Uur', + 'Hue' => 'Hue', + 'Id' => 'Id', + 'Idle' => 'Ongebruikt', + 'Ignore' => 'Negeer', + 'Image' => 'Image', + 'ImageBufferSize' => 'Image buffer grootte (frames)', + 'Images' => 'Images', + 'In' => 'In', + 'Include' => 'voeg in', + 'Inverted' => 'omgedraaid', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Taal', + 'Last' => 'Laatste', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'resultaten;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'beperk tot eerste', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Load', + 'Local' => 'Lokaal', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Ingelogd als', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'In loggen', + 'Login' => 'Login', + 'Logout' => 'Logout', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Laag', + 'LowBW' => 'Laag B/W', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'Markeer', + 'Max' => 'Max', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'Max.
score', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => 'Maximum FPS', + 'Medium' => 'Medium', + 'MediumBW' => 'Medium B/W', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'minimum blob gebied moet kleiner zijn dan maximum blob gebied', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'minimum blobs moet kleiner zijn dan maximum blobs', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'minimum pixel kleurdiepte moet kleiner zijn dan maximum pixel threshold', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'Misc', + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Monitor Ids', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Monitoren', + 'Montage' => 'Montage', + 'Month' => 'Maand', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Move', + 'MustBeGe' => 'Moet groter zijn of gelijk aan', + 'MustBeLe' => 'Moet kleiner zijn of gelijk aan', + 'MustConfirmPassword' => 'Je moet je wachtwoord bevestigen', + 'MustSupplyPassword' => 'Je moet een wachtwoord geven', + 'MustSupplyUsername' => 'Je moet een gebruikersnaam geven', + 'Name' => 'Naam', + 'Near' => 'Near', + 'Network' => 'Netwerk', + 'New' => 'Nieuw', + 'NewGroup' => 'New Group', + 'NewLabel' => 'New Label', + 'NewPassword' => 'Nieuw Wachtwoord', + 'NewState' => 'Nieuwe Status', + 'NewUser' => 'Nieuwe gebruiker', + 'Next' => 'Volgende', + 'No' => 'Nee', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Er zijn geen frames opgenomen voor deze gebeurtenis', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => 'GeenOpgeslagenFilters', + 'NoStatisticsRecorded' => 'er zijn geen statistieken opgenomen voor dit event/frame', + 'None' => 'Geen', + 'NoneAvailable' => 'geen beschikbaar', + 'Normal' => 'Normaal', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'gelijk aan', + 'OpGt' => 'groter dan', + 'OpGtEq' => 'groter dan of gelijk aan', + 'OpIn' => 'in set', + 'OpLt' => 'kleiner dan', + 'OpLtEq' => 'kleiner dan of gelijk aan', + 'OpMatches' => 'Komt overeen', + 'OpNe' => 'niet gelijk aan', + 'OpNotIn' => 'niet in set', + 'OpNotMatches' => 'Komt niet overeen', + 'Open' => 'Open', + 'OptionHelp' => 'OptieHelp', + 'OptionRestartWarning' => 'Deze veranderingen passen niet aan\nals het systeem loopt. Als je\nKlaar bent met veranderen vergeet dan niet dat\nje ZoneMinder herstart.', + 'Options' => 'Opties', + 'OrEnterNewName' => 'of voer een nieuwe naam in', + 'Order' => 'Order', + 'Orientation' => 'Orientatie', + 'Out' => 'Out', + 'OverwriteExisting' => 'Overschrijf bestaande', + 'Paged' => 'Paged', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Parameter', + 'Password' => 'Wachtwoord', + 'PasswordsDifferent' => 'Het nieuwe en bevestigde wachtwoord zijn verschillend', + 'Paths' => 'Paden', + 'Pause' => 'Pause', + 'Phone' => 'Phone', + 'PhoneBW' => 'Telefoon B/W', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pixels', + 'Play' => 'Play', + 'PlayAll' => 'Play All', + 'PleaseWait' => 'wacht A.U.B.', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'Post gebeurtenis Image Buffer', + 'PreEventImageBuffer' => 'Pre gebeurtenis Image Buffer', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'vorige', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Waardering', + 'Real' => 'Echte', + 'Record' => 'Record', + 'RefImageBlendPct' => 'Referentie Image Blend %ge', + 'Refresh' => 'Ververs', + 'Remote' => 'Remote', + 'RemoteHostName' => 'Remote Host Naam', + 'RemoteHostPath' => 'Remote Host Pad', + 'RemoteHostPort' => 'Remote Host Poort', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Remote Image kleuren', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Hernoem', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => 'Reset gebeurtenis teller', + 'Restart' => 'herstart', + 'Restarting' => 'herstarten', + 'RestrictedCameraIds' => 'Verboden Camera Ids', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Draai linksom', + 'RotateRight' => 'Draai rechtsom', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Run Mode', + 'RunState' => 'Run Status', + 'Running' => 'Running', + 'Save' => 'Opslaan', + 'SaveAs' => 'opslaan als', + 'SaveFilter' => 'opslaan Filter', + 'Scale' => 'Schaal', + 'Score' => 'Score', + 'Secs' => 'Secs', + 'Sectionlength' => 'Sectie lengte', + 'Select' => 'Select', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Set', + 'SetNewBandwidth' => 'Zet Nieuwe Bandbreedte', + 'SetPreset' => 'Set Preset', + 'Settings' => 'Instellingen', + 'ShowFilterWindow' => 'ToonFilterWindow', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Opl.', + 'SortBy' => 'Sorteer op', + 'SortDesc' => 'afl.', + 'Source' => 'Bron', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Bron Type', + 'Speed' => 'Speed', + 'SpeedHigh' => 'High Speed', + 'SpeedLow' => 'Low Speed', + 'SpeedMedium' => 'Medium Speed', + 'SpeedTurbo' => 'Turbo Speed', + 'Start' => 'Start', + 'State' => 'Status', + 'Stats' => 'Stats', + 'Status' => 'Status', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => 'Plaatjes', + 'Stop' => 'Stop', + 'Stopped' => 'gestopt', + 'Stream' => 'Stroom', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => 'Systeem', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => 'Tijd', + 'TimeDelta' => 'Tijd Delta', + 'TimeStamp' => 'Tijdstempel', + 'Timeline' => 'Timeline', + 'Timestamp' => 'Tijdstempel', + 'TimestampLabelFormat' => 'Tijdstempel Label Format', + 'TimestampLabelX' => 'Tijdstempel Label X', + 'TimestampLabelY' => 'Tijdstempel Label Y', + 'Today' => 'Today', + 'Tools' => 'Gereedschappen', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Totaal
Score', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Triggers', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'Type', + 'Unarchive' => 'Dearchiveer', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Eenheden', + 'Unknown' => 'Onbekend', + 'Update' => 'Update', + 'UpdateAvailable' => 'een update voor ZoneMinder is beschikbaar', + 'UpdateNotNecessary' => 'geen update noodzakelijk', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Gebruik Filter', + 'UseFilterExprsPost' => ' filter expressies', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Gebruik ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Gebruiker', + 'Username' => 'Gebruikersnaam', + 'Users' => 'Gebruikers', + 'Value' => 'Waarde', + 'Version' => 'Versie', + 'VersionIgnore' => 'negeer deze versie', + 'VersionRemindDay' => 'herinner me na 1 dag', + 'VersionRemindHour' => 'herinner me na 1 uur', + 'VersionRemindNever' => 'herinner me niet aan nieuwe versies', + 'VersionRemindWeek' => 'herinner me na 1 week', + 'Video' => 'Video', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'Video Generatie mislukt!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'Video Generatie Parameters', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'Video grootte', + 'View' => 'Bekijk', + 'ViewAll' => 'Bekijk Alles', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'Bekijk Paged', + 'Wake' => 'Wake', + 'WarmupFrames' => 'Warmup Frames', + 'Watch' => 'Observeer', + 'Web' => 'Web', + 'WebColour' => 'Web Colour', + 'Week' => 'Week', + 'White' => 'White', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 Activatie String', + 'X10InputAlarmString' => 'X10 Input Alarm String', + 'X10OutputAlarmString' => 'X10 Output Alarm String', + 'Y' => 'Y', + 'Yes' => 'Ja', + 'YouNoPerms' => 'Je hebt niet de rechten om toegang te krijgen tot deze bronnen.', + 'Zone' => 'Zone', + 'ZoneAlarmColour' => 'Alarm Kleur (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zones', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'huidige login is \'%1$s\'', + 'EventCount' => '%1$s %2$s', // Als voorbeeld '37 gebeurtenissen' (from Vlang below) + 'LastEvents' => 'Last %1$s %2$s', // Als voorbeeld 'Laatste 37 gebeurtenissen' (from Vlang below) + 'LatestRelease' => 'de laatste release is v%1$s, jij hebt v%2$s.', + 'MonitorCount' => '%1$s %2$s', // Als voorbeeld '4 Monitoren' (from Vlang below) + 'MonitorFunction' => 'Monitor %1$s Functie', + 'RunningRecentVer' => 'Je draait al met de laatste versie van ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'gebeurtenissen', 1=>'gebeurtenis', 2=>'gebeurtenissen' ), + 'Monitor' => array( 0=>'Monitoren', 1=>'Monitor', 2=>'Monitoren' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/pl_pl.php b/web/lang/pl_pl.php index 288d0fef2..9ba57ee00 100644 --- a/web/lang/pl_pl.php +++ b/web/lang/pl_pl.php @@ -264,6 +264,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Czas trwania', @@ -527,6 +528,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Play All', 'PleaseWait' => 'Proszê czekaæ', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'Bufor obrazów po zdarzeniu', 'PreEventImageBuffer' => 'Bufor obrazów przed zdarzeniem', @@ -652,6 +654,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Nie jest wymagane uaktualnienie', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'U¿yj filtru', 'UseFilterExprsPost' => ' wyra¿enie filtru', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'U¿yj ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/pl_pl.php.orig b/web/lang/pl_pl.php.orig new file mode 100644 index 000000000..288d0fef2 --- /dev/null +++ b/web/lang/pl_pl.php.orig @@ -0,0 +1,825 @@ + 'Kolor (24 bity)', + '32BitColour' => 'Kolor (32 bity)', // Added - 2011-06-15 + '8BitGrey' => 'Cz/b (8 bitów)', + 'Action' => 'Action', + 'Actual' => 'Aktualny', + 'AddNewControl' => 'Add New Control', + 'AddNewMonitor' => 'Dodaj nowy monitor', + 'AddNewUser' => 'Dodaj u¿ytkownika', + 'AddNewZone' => 'Dodaj now± strefê', + 'Alarm' => 'Alarm', + 'AlarmBrFrames' => 'Ramki
alarmowe', + 'AlarmFrame' => 'Ramka alarmowa', + 'AlarmFrameCount' => 'Alarm Frame Count', + 'AlarmLimits' => 'Ograniczenia alarmu', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Alarm Px', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Gotowosc', + 'All' => 'Wszystko', + 'Apply' => 'Zastosuj', + 'ApplyingStateChange' => 'Zmieniam stan pracy', + 'ArchArchived' => 'Tylko zarchiwizowane', + 'ArchUnarchived' => 'Tylko niezarchiwizowane', + 'Archive' => 'Archiwum', + 'Archived' => 'Archived', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Ramki alarmowe', + 'AttrArchiveStatus' => 'Status archiwum', + 'AttrAvgScore' => '¦red. wynik', + 'AttrCause' => 'Cause', + 'AttrDate' => 'Data', + 'AttrDateTime' => 'Data/Czas', + 'AttrDiskBlocks' => 'Dysk Bloki', + 'AttrDiskPercent' => 'Dysk Procent', + 'AttrDuration' => 'Czas trwania', + 'AttrFrames' => 'Ramek', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Maks. wynik', + 'AttrMonitorId' => 'Nr monitora', + 'AttrMonitorName' => 'Nazwa monitora', + 'AttrName' => 'Nazwa', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Czas', + 'AttrTotalScore' => 'Ca³kowity wynik', + 'AttrWeekday' => 'Dzieñ roboczy', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => '¦red.
wynik', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Nazwy mog± zawieraæ tylko litery, cyfry oraz my¶lnik i podkre¶lenie', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'przepustowo¶æ', + 'BlobPx' => 'Plamka Px', + 'BlobSizes' => 'Rozmiary plamek', + 'Blobs' => 'Plamki', + 'Brightness' => 'Jaskrawo¶æ', + 'Buffers' => 'Bufory', + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'CanFocus' => 'Can Focus', + 'CanFocusAbs' => 'Can Focus Absolute', + 'CanFocusCon' => 'Can Focus Continuous', + 'CanFocusRel' => 'Can Focus Relative', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'Can Move', + 'CanMoveAbs' => 'Can Move Absolute', + 'CanMoveCon' => 'Can Move Continuous', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relative', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoom' => 'Can Zoom', + 'CanZoomAbs' => 'Can Zoom Absolute', + 'CanZoomCon' => 'Can Zoom Continuous', + 'CanZoomRel' => 'Can Zoom Relative', + 'Cancel' => 'Anuluj', + 'CancelForcedAlarm' => 'Anuluj wymuszony alarm', + 'CaptureHeight' => 'Wysoko¶æ obrazu', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Paleta kolorów obrazu', + 'CaptureWidth' => 'Szeroko¶æ obrazu', + 'Cause' => 'Cause', + 'CheckMethod' => 'Metoda sprawdzenia alarmu', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Wybierz filtr', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Zamknij', + 'Colour' => 'Nasycenie', + 'Command' => 'Command', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Konfiguracja', + 'ConfiguredFor' => 'Ustawiona', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Potwierd¼ has³o', + 'ConjAnd' => 'i', + 'ConjOr' => 'lub', + 'Console' => 'Konsola', + 'ContactAdmin' => 'Skontaktuj siê z Twoim adminstratorem w sprawie szczegó³ów.', + 'Continue' => 'Continue', + 'Contrast' => 'Kontrast', + 'Control' => 'Control', + 'ControlAddress' => 'Control Address', + 'ControlCap' => 'Control Capability', + 'ControlCaps' => 'Control Capabilities', + 'ControlDevice' => 'Control Device', + 'ControlType' => 'Control Type', + 'Controllable' => 'Controllable', + 'Cycle' => 'Cycle', + 'CycleWatch' => 'Cykl podgl±du', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Dzieñ', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'Usuñ', + 'DeleteAndNext' => 'Usuñ & nastêpny', + 'DeleteAndPrev' => 'Usuñ & poprzedni', + 'DeleteSavedFilter' => 'Usuñ zapisany filtr', + 'Description' => 'Opis', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Numer wej¶cia w urz±dzeniu', + 'DeviceFormat' => 'System TV', + 'DeviceNumber' => 'Numer urz±dzenia', + 'DevicePath' => 'Device Path', + 'Devices' => 'Devices', + 'Dimensions' => 'Rozmiary', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Dysk', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Czas trwania', + 'Edit' => 'Edycja', + 'Email' => 'Email', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Zezwolono', + 'EnterNewFilterName' => 'Wpisz now± nazwê filtra', + 'Error' => 'B³±d', + 'ErrorBrackets' => 'B³±d, proszê sprawdziæ ilo¶æ nawiasów otwieraj±cych i zamykaj±cych', + 'ErrorValidValue' => 'B³±d, proszê sprawdziæ czy wszystkie warunki maj± poprawne warto¶ci', + 'Etc' => 'itp', + 'Event' => 'Zdarzenie', + 'EventFilter' => 'Filtr zdarzeñ', + 'EventId' => 'Id zdarzenia', + 'EventName' => 'Event Name', + 'EventPrefix' => 'Event Prefix', + 'Events' => 'Zdarzenia', + 'Exclude' => 'Wyklucz', + 'Execute' => 'Execute', + 'Export' => 'Export', + 'ExportDetails' => 'Export Event Details', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'Exporting', + 'FPS' => 'fps', + 'FPSReportInterval' => 'Raport (ramek/s)', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Dostarcz', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Archiwizuj wszystkie pasuj±ce', + 'FilterDeleteEvents' => 'Usuwaj wszystkie pasuj±ce', + 'FilterEmailEvents' => 'Wysy³aj poczt± wszystkie pasuj±ce', + 'FilterExecuteEvents' => 'Wywo³uj komendê na wszystkie pasuj±ce', + 'FilterMessageEvents' => 'Wy¶wietlaj komunikat na wszystkie pasuj±ce', + 'FilterPx' => 'Filtr Px', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Wysy³aj wszystkie pasuj±ce', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filters', + 'First' => 'Pierwszy', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Focus', + 'ForceAlarm' => 'Wymu¶ alarm', + 'Format' => 'Format', + 'Frame' => 'Ramka', + 'FrameId' => 'Nr ramki', + 'FrameRate' => 'Tempo ramek', + 'FrameSkip' => 'Pomiñ ramkê', + 'Frames' => 'Ramek', + 'Func' => 'Funkcja', + 'Function' => 'Funkcja', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'Generowanie Video', + 'GeneratingVideo' => 'Generujê Video', + 'GoToZoneMinder' => 'Przejd¼ na ZoneMinder.com', + 'Grey' => 'Cz/b', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'High' => 'wysoka', + 'HighBW' => 'Wys. prz.', + 'Home' => 'Home', + 'Hour' => 'Godzina', + 'Hue' => 'Odcieñ', + 'Id' => 'Nr', + 'Idle' => 'Bezczynny', + 'Ignore' => 'Ignoruj', + 'Image' => 'Obraz', + 'ImageBufferSize' => 'Rozmiar bufora obrazu (ramek)', + 'Images' => 'Images', + 'In' => 'In', + 'Include' => 'Do³±cz', + 'Inverted' => 'Odwrócony', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Jêzyk', + 'Last' => 'Ostatni', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'wyników;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Ogranicz do pocz±tkowych', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Obc.', + 'Local' => 'Lokalny', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Zalogowany jako', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Logowanie', + 'Login' => 'Login', + 'Logout' => 'Wyloguj', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'niska', + 'LowBW' => 'Nis. prz.', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'Znacznik', + 'Max' => 'Maks.', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'Maks.
wynik', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => 'Maks. FPS', + 'Medium' => '¶rednia', + 'MediumBW' => '¦red. prz.', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Minimalny obszar plamki powinien byæ mniejszy od maksymalnego obszaru plamki', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Najmniejsze plamki powinny byæ mniejsze od najwiêkszych plamek' , + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'Najmniejsze progi pikseli powinny byæ mniejsze od najwiêkszych progów pikseli', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'Inne', + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Numery monitorów', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Monitory', + 'Montage' => 'Monta¿', + 'Month' => 'Miesi±c', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Move', + 'MustBeGe' => 'musi byæ wiêksze lub równe od', + 'MustBeLe' => 'musi byæ mniejsze lub równe od', + 'MustConfirmPassword' => 'Musisz potwierdziæ has³o', + 'MustSupplyPassword' => 'Musisz podaæ has³o', + 'MustSupplyUsername' => 'Musisz podaæ nazwê u¿ytkownika', + 'Name' => 'Nazwa', + 'Near' => 'Near', + 'Network' => 'Sieæ', + 'New' => 'Nowy', + 'NewGroup' => 'New Group', + 'NewLabel' => 'New Label', + 'NewPassword' => 'Nowe has³o', + 'NewState' => 'Nowy stan', + 'NewUser' => 'nowy', + 'Next' => 'Nastêpny', + 'No' => 'Nie', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Brak zapisanych ramek dla tego zdarzenia', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => 'BrakZapisanychFiltrów', + 'NoStatisticsRecorded' => 'Brak zapisanych statystyk dla tego zdarzenia/ramki', + 'None' => 'Brak', + 'NoneAvailable' => 'Niedostêpne', + 'Normal' => 'Normalny', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'równy', + 'OpGt' => 'wiêksze od', + 'OpGtEq' => 'wiêksze lub równe od', + 'OpIn' => 'w zestawie', + 'OpLt' => 'mniejsze od', + 'OpLtEq' => 'mniejsze lub równe od', + 'OpMatches' => 'pasuj±ce', + 'OpNe' => 'ró¿ne od', + 'OpNotIn' => 'brak w zestawie', + 'OpNotMatches' => 'nie pasuj±ce', + 'Open' => 'Open', + 'OptionHelp' => 'OpcjePomoc', + 'OptionRestartWarning' => 'Te zmiany nie przynios± natychmiastowego efektu\ndopóki system pracuje. Kiedy zakoñczysz robiæ zmiany\nproszê koniecznie zrestartowaæ ZoneMinder.', + 'Options' => 'Opcje', + 'OrEnterNewName' => 'lub wpisz now± nazwê', + 'Order' => 'Order', + 'Orientation' => 'Orientacja', + 'Out' => 'Out', + 'OverwriteExisting' => 'Nadpisz istniej±ce', + 'Paged' => 'Stronicowane', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Parametr', + 'Password' => 'Has³o', + 'PasswordsDifferent' => 'Has³a: nowe i potwierdzone s± ró¿ne!', + 'Paths' => '¦cie¿ki', + 'Pause' => 'Pause', + 'Phone' => 'Phone', + 'PhoneBW' => 'Tel. prz.', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pikseli', + 'Play' => 'Play', + 'PlayAll' => 'Play All', + 'PleaseWait' => 'Proszê czekaæ', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'Bufor obrazów po zdarzeniu', + 'PreEventImageBuffer' => 'Bufor obrazów przed zdarzeniem', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'Poprzedni', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Tempo', + 'Real' => 'Rzeczywiste', + 'Record' => 'Zapis', + 'RefImageBlendPct' => 'Miks z obrazem odniesienia', + 'Refresh' => 'Od¶wie¿', + 'Remote' => 'Zdalny', + 'RemoteHostName' => 'Nazwa zdalnego hosta', + 'RemoteHostPath' => 'Scie¿ka zdalnego hosta', + 'RemoteHostPort' => 'Port zdalnego hosta', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Kolory zdalnego obrazu', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Zmieñ nazwê', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => 'Kasuj licznik zdarzeñ', + 'Restart' => 'Restart', + 'Restarting' => 'Restartujê', + 'RestrictedCameraIds' => 'Numery kamer', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Obróæ w lewo', + 'RotateRight' => 'Obróæ w prawo', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Tryb pracy', + 'RunState' => 'Stan pracy', + 'Running' => 'Pracuje', + 'Save' => 'Zapisz', + 'SaveAs' => 'Zapisz jako', + 'SaveFilter' => 'Zapisz filtr', + 'Scale' => 'Skala', + 'Score' => 'Wynik', + 'Secs' => 'Sekund', + 'Sectionlength' => 'D³ugo¶æ sekcji', + 'Select' => 'Select', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Set', + 'SetNewBandwidth' => 'Ustaw now± przepustowo¶æ', + 'SetPreset' => 'Set Preset', + 'Settings' => 'Ustawienia', + 'ShowFilterWindow' => 'Poka¿OknoFiltru', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Nara.', + 'SortBy' => 'Sortuj', + 'SortDesc' => 'Opad.', + 'Source' => '¬ród³o', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Typ ¼ród³a', + 'Speed' => 'Speed', + 'SpeedHigh' => 'High Speed', + 'SpeedLow' => 'Low Speed', + 'SpeedMedium' => 'Medium Speed', + 'SpeedTurbo' => 'Turbo Speed', + 'Start' => 'Start', + 'State' => 'Stan', + 'Stats' => 'Statystyki', + 'Status' => 'Status', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => 'Nieruchome', + 'Stop' => 'Stop', + 'Stopped' => 'Zatrzymany', + 'Stream' => 'Ruchomy', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => 'System', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => 'Czas', + 'TimeDelta' => 'Ró¿nica czasu', + 'TimeStamp' => 'Pieczêæ czasu', + 'Timeline' => 'Timeline', + 'Timestamp' => 'Czas', + 'TimestampLabelFormat' => 'Format etykiety czasu', + 'TimestampLabelX' => 'Wsp. X etykiety czasu', + 'TimestampLabelY' => 'Wsp. Y etykiety czasu', + 'Today' => 'Today', + 'Tools' => 'Narzêdzia', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Ca³kowity
wynik', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Wyzwalacze', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'Typ', + 'Unarchive' => 'Nie archiwizuj', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Jednostki', + 'Unknown' => 'Nieznany', + 'Update' => 'Update', + 'UpdateAvailable' => 'Jest dostêpne uaktualnienie ZoneMinder ', + 'UpdateNotNecessary' => 'Nie jest wymagane uaktualnienie', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'U¿yj filtru', + 'UseFilterExprsPost' => ' wyra¿enie filtru', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'U¿yj ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'U¿ytkownik', + 'Username' => 'Nazwa u¿ytkownika', + 'Users' => 'U¿ytkownicy', + 'Value' => 'Warto¶æ', + 'Version' => 'Wersja', + 'VersionIgnore' => 'Zignoruj t± wersjê', + 'VersionRemindDay' => 'Przypomnij po 1 dniu', + 'VersionRemindHour' => 'Przypomnij po 1 godzinie', + 'VersionRemindNever' => 'Nie przypominaj o nowych wersjach', + 'VersionRemindWeek' => 'Przypomnij po 1 tygodniu', + 'Video' => 'Video', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'Generowanie filmu Video nie powiod³o siê!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'Parametery generowania filmu Video', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'Rozmiar filmu Video', + 'View' => 'Podgl±d', + 'ViewAll' => 'Poka¿ wszystko', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'Poka¿ stronami', + 'Wake' => 'Wake', + 'WarmupFrames' => 'Ignorowane ramki', + 'Watch' => 'podgl±d', + 'Web' => 'Web', + 'WebColour' => 'Web Colour', + 'Week' => 'Tydzieñ', + 'White' => 'White', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10: ³añcuch aktywuj±cy', + 'X10InputAlarmString' => 'X10: ³añcuch wej¶cia alarmu', + 'X10OutputAlarmString' => 'X10: ³añcuch wyj¶cia alarmu', + 'Y' => 'Y', + 'Yes' => 'Tak', + 'YouNoPerms' => 'Nie masz uprawnieñ na dostêp do tego zasobu.', + 'Zone' => 'Strefa', + 'ZoneAlarmColour' => 'Kolor alarmu (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Strefy', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Aktualny login \'%1$s\'', + 'EventCount' => '%1$s %2$s', + 'LastEvents' => 'Ostatnie %1$s %2$s', + 'LatestRelease' => 'Najnowsza wersja to v%1$s, Ty posiadasz v%2$s.', + 'MonitorCount' => '%1$s %2$s', + 'MonitorFunction' => 'Monitor %1$s Funkcja', + 'RunningRecentVer' => 'Uruchomi³e¶ najnowsz± wersjê ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Zdarzeñ', 1=>'Zdarzenie', 2=>'Zdarzenia'), + 'Monitor' => array( 0=>'Monitorów', 1=>'Monitor', 2=>'Monitory'), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. + +// This is an version that could be used in the Polish language +// +function zmVlang( $langVarArray, $count ) +{ + $secondlastdigit = substr( $count, -2, 1 ); + $lastdigit = substr( $count, -1, 1 ); + if ( $count == 1 ) + { + return( $langVarArray[1] ); + } + if (($secondlastdigit == 0)|( $secondlastdigit == 1)) + { + return( $langVarArray[0] ); + } + if ( $secondlastdigit >= 2) + { + switch ( $lastdigit ) + { + case 0 : + case 1 : + case 5 : + case 6 : + case 7 : + case 8 : + case 9 : + { + return( $langVarArray[0] ); + break; + } + case 2 : + case 3 : + case 4 : + { + return( $langVarArray[2] ); + break; + } + } + } + die( 'B£¡D! zmVlang nie mo¿e skorelowac ³añcucha!' ); +} + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +// $monitors = 12; // Choose any number +// echo $monitors." "; +// echo zmVlang( $zmVlangMonitor, $monitors); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/pt_br.php b/web/lang/pt_br.php index 62586b33b..f9e2c3ecd 100644 --- a/web/lang/pt_br.php +++ b/web/lang/pt_br.php @@ -204,6 +204,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Duração', @@ -467,6 +468,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Play All', 'PleaseWait' => 'Por Favor Espere', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'Buffer de imagem pós evento', 'PreEventImageBuffer' => 'Buffer de imagem pré evento', @@ -592,6 +594,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Não é necessário update.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Use Filtro', 'UseFilterExprsPost' => ' expressões de filtragem', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Use ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/pt_br.php.orig b/web/lang/pt_br.php.orig new file mode 100644 index 000000000..62586b33b --- /dev/null +++ b/web/lang/pt_br.php.orig @@ -0,0 +1,786 @@ + 'cor 24 bits', + '32BitColour' => 'cor 32 bits', // Added - 2011-06-15 + '8BitGrey' => 'cinza 8 bits', + 'Action' => 'Action', + 'Actual' => 'Atual', + 'AddNewControl' => 'Add New Control', + 'AddNewMonitor' => 'Adicionar Monitor', + 'AddNewUser' => 'Adicionar Usuário', + 'AddNewZone' => 'Adicionar Zona', + 'Alarm' => 'Alarme', + 'AlarmBrFrames' => 'Imagens
Alarmadas', + 'AlarmFrame' => 'Imagem Alarmada', + 'AlarmFrameCount' => 'Alarm Frame Count', + 'AlarmLimits' => 'Limites de Alarme', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Pixel de Alarme', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Alerta', + 'All' => 'Tudo', + 'Apply' => 'Aplicar', + 'ApplyingStateChange' => 'Aplicando mudança de estado', + 'ArchArchived' => 'Somente Arquivados', + 'ArchUnarchived' => 'Somente Nao Arquivados', + 'Archive' => 'Arquivar', + 'Archived' => 'Archived', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Imagens Alarmadas', + 'AttrArchiveStatus' => 'Status/Arquivamento', + 'AttrAvgScore' => 'Maior Score', + 'AttrCause' => 'Cause', + 'AttrDate' => 'Data', + 'AttrDateTime' => 'Data/Horario', + 'AttrDiskBlocks' => 'Blocos de Disco', + 'AttrDiskPercent' => 'Porcentagem de Disco', + 'AttrDuration' => 'Duração', + 'AttrFrames' => 'Imagens', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Max. Score', + 'AttrMonitorId' => 'Id do Monitor', + 'AttrMonitorName' => 'Nome do Monitor', + 'AttrName' => 'Nome', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Horário', + 'AttrTotalScore' => 'Score Total', + 'AttrWeekday' => 'Dia/Semana', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'Maior
Score', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Nomes devem ser caracteres alfanuméricos mais hífen e underscore', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'Larg/Banda', + 'BlobPx' => 'Px Blob', + 'BlobSizes' => 'Tam Blob', + 'Blobs' => 'Blobs', + 'Brightness' => 'Brilho', + 'Buffers' => 'Buffers', + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'CanFocus' => 'Can Focus', + 'CanFocusAbs' => 'Can Focus Absolute', + 'CanFocusCon' => 'Can Focus Continuous', + 'CanFocusRel' => 'Can Focus Relative', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'Can Move', + 'CanMoveAbs' => 'Can Move Absolute', + 'CanMoveCon' => 'Can Move Continuous', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relative', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoom' => 'Can Zoom', + 'CanZoomAbs' => 'Can Zoom Absolute', + 'CanZoomCon' => 'Can Zoom Continuous', + 'CanZoomRel' => 'Can Zoom Relative', + 'Cancel' => 'Cancelar', + 'CancelForcedAlarm' => 'Cancelar Alarme Forçado', + 'CaptureHeight' => 'Altura da Captura', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Paleta de Captura', + 'CaptureWidth' => 'Largura de Captura', + 'Cause' => 'Cause', + 'CheckMethod' => 'Metodo marcar por alarme', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Escolher Filtro', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Fechar', + 'Colour' => 'Cor', + 'Command' => 'Command', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Config', + 'ConfiguredFor' => 'Configurado para', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Confirmar Senha', + 'ConjAnd' => 'E', + 'ConjOr' => 'OU', + 'Console' => 'Console', + 'ContactAdmin' => 'Por favor contate o administrador para detalhes.', + 'Continue' => 'Continue', + 'Contrast' => 'Contraste', + 'Control' => 'Control', + 'ControlAddress' => 'Control Address', + 'ControlCap' => 'Control Capability', + 'ControlCaps' => 'Control Capabilities', + 'ControlDevice' => 'Control Device', + 'ControlType' => 'Control Type', + 'Controllable' => 'Controllable', + 'Cycle' => 'Cycle', + 'CycleWatch' => 'Ciclo Monitor', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Dia', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'Deletar', + 'DeleteAndNext' => 'Deletar & Próx', + 'DeleteAndPrev' => 'Deletar & Ant', + 'DeleteSavedFilter' => 'Deletar Filtros Salvos', + 'Description' => 'Descrição', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Canal do Dispositivo', + 'DeviceFormat' => 'Formato do Dispos.', + 'DeviceNumber' => 'Num. do Dispos.', + 'DevicePath' => 'Device Path', + 'Devices' => 'Devices', + 'Dimensions' => 'Dimensões', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Disco', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Duração', + 'Edit' => 'Editar', + 'Email' => 'Email', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Habilitado', + 'EnterNewFilterName' => 'Digite nome do novo filtro', + 'Error' => 'Erro', + 'ErrorBrackets' => 'Por favor cheque se você tem o mesmo numero de chaves abertas e fechadas', + 'ErrorValidValue' => 'Erro, por favor cheque se os campos estão corretos', + 'Etc' => 'etc', + 'Event' => 'Evento', + 'EventFilter' => 'Filtro de Evento', + 'EventId' => 'Id do Evento', + 'EventName' => 'Event Name', + 'EventPrefix' => 'Event Prefix', + 'Events' => 'Eventos', + 'Exclude' => 'Excluir', + 'Execute' => 'Execute', + 'Export' => 'Export', + 'ExportDetails' => 'Export Event Details', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'Exporting', + 'FPS' => 'fps', + 'FPSReportInterval' => 'Intervalo de mostragem FPS', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Alimentar', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Arquivar resultados', + 'FilterDeleteEvents' => 'Apagar resultados', + 'FilterEmailEvents' => 'Enviar e-mail com detalhes dos resultados', + 'FilterExecuteEvents' => 'Executar comando p/ resultados', + 'FilterMessageEvents' => 'Enviar Mensagem dos resultados', + 'FilterPx' => 'Px de Filtro', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Fazer upload dos resultados', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filters', + 'First' => 'Primeiro', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Focus', + 'ForceAlarm' => 'Forçar Alarme', + 'Format' => 'Format', + 'Frame' => 'Imagem', + 'FrameId' => 'Id de Imagem', + 'FrameRate' => 'Velocidade de Imagem', + 'FrameSkip' => 'Salto de Imagem', + 'Frames' => 'Imagens', + 'Func' => 'Func', + 'Function' => 'Função', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'Gerar Video', + 'GeneratingVideo' => 'Gerando Video', + 'GoToZoneMinder' => 'Ir Para ZoneMinder.com', + 'Grey' => 'Cinza', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'High' => 'Alto', + 'HighBW' => 'Alta L/B', + 'Home' => 'Home', + 'Hour' => 'Hora', + 'Hue' => 'Saturação', + 'Id' => 'Id', + 'Idle' => 'Parado', + 'Ignore' => 'Ignorar', + 'Image' => 'Imagem', + 'ImageBufferSize' => 'Tamanho de Buffer (imagens)', + 'Images' => 'Images', + 'In' => 'In', + 'Include' => 'Incluir', + 'Inverted' => 'Invertido', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Linguagem', + 'Last' => 'Último', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'resultados somente;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Limitar aos primeiros', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Carga', + 'Local' => 'Local', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Conectado como', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Conectando', + 'Login' => 'Conectar', + 'Logout' => 'Sair', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Baixa', + 'LowBW' => 'Baixa L/B', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'Marcar', + 'Max' => 'Maximo', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'Max.
Score', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => 'Maximo FPS', + 'Medium' => 'Media', + 'MediumBW' => 'Media L/B', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'A area minima de blob deve ser menor do que a area máxima de blob', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'O minimo de Blobs deve ser menor que o maximo de blobs', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'Misc', + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Ids de Monitor', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Monitores', + 'Montage' => 'Montagem', + 'Month' => 'Mês', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Move', + 'MustBeGe' => 'deve ser maior ou igual a', + 'MustBeLe' => 'deve ser menor ou igual a', + 'MustConfirmPassword' => 'Voce deve Confirmar a senha', + 'MustSupplyPassword' => 'Voce deve informar a senha', + 'MustSupplyUsername' => 'Voce deve informar nome de usuário', + 'Name' => 'Nome', + 'Near' => 'Near', + 'Network' => 'Rede', + 'New' => 'Novo', + 'NewGroup' => 'New Group', + 'NewLabel' => 'New Label', + 'NewPassword' => 'Nova Senha', + 'NewState' => 'Novo Estado', + 'NewUser' => 'Novo Usuário', + 'Next' => 'Próx', + 'No' => 'Não', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Não há imagens gravadas neste evento', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => 'SemFiltrosSalvos', + 'NoStatisticsRecorded' => 'Não há estatísticas gravadas neste evento/imagem', + 'None' => 'Nada', + 'NoneAvailable' => 'Nada disponível', + 'Normal' => 'Normal', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'igual a', + 'OpGt' => 'maior que', + 'OpGtEq' => 'maior que ou igual a', + 'OpIn' => 'no set', + 'OpLt' => 'menor que', + 'OpLtEq' => 'menor que ou igual a', + 'OpMatches' => 'combina', + 'OpNe' => 'diferente de', + 'OpNotIn' => 'não no set', + 'OpNotMatches' => 'não combina', + 'Open' => 'Open', + 'OptionHelp' => 'OpçãoAjuda', + 'OptionRestartWarning' => 'Reinicie o Zoneminder para que as mudanças tenham efeito', + 'Options' => 'Opções', + 'OrEnterNewName' => 'ou defina novo nome', + 'Order' => 'Order', + 'Orientation' => 'Orientação', + 'Out' => 'Out', + 'OverwriteExisting' => 'Sobrescrever Existente', + 'Paged' => 'Paginado', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Parametro', + 'Password' => 'Senha', + 'PasswordsDifferent' => 'A nova senha e a de confirmação são diferentes', + 'Paths' => 'Caminhos', + 'Pause' => 'Pause', + 'Phone' => 'Phone', + 'PhoneBW' => 'Discada L/B', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pixels', + 'Play' => 'Play', + 'PlayAll' => 'Play All', + 'PleaseWait' => 'Por Favor Espere', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'Buffer de imagem pós evento', + 'PreEventImageBuffer' => 'Buffer de imagem pré evento', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'Ant.', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Vel.', + 'Real' => 'Real', + 'Record' => 'Gravar', + 'RefImageBlendPct' => 'Referência de imagem Blend %ge', + 'Refresh' => 'Atualizar', + 'Remote' => 'Remoto', + 'RemoteHostName' => 'Nome do host remoto', + 'RemoteHostPath' => 'Caminho do host remoto', + 'RemoteHostPort' => 'Porta do host remoto', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Cores de imagem remota', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Renomear', + 'Replay' => 'Ver Novamente', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => 'Resetar contagem de eventos', + 'Restart' => 'Reiniciar', + 'Restarting' => 'Reiniciando', + 'RestrictedCameraIds' => 'Ids de camera proibídos', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Rotacionar à esquerda ', + 'RotateRight' => 'Rotacionar à direita', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Modo de Execução', + 'RunState' => 'Estado de Execução', + 'Running' => 'Rodando', + 'Save' => 'Salvar', + 'SaveAs' => 'Salvar Como', + 'SaveFilter' => 'Salvar Filtro', + 'Scale' => 'Tamanho', + 'Score' => 'Score', + 'Secs' => 'Segs', + 'Sectionlength' => 'Tamanho de evento Fixo', + 'Select' => 'Select', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Set', + 'SetNewBandwidth' => 'Defina Nova L/B', + 'SetPreset' => 'Set Preset', + 'Settings' => 'Configurações', + 'ShowFilterWindow' => 'MostrarJanelaDeFiltros', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Asc', + 'SortBy' => 'mostrar por', + 'SortDesc' => 'Desc', + 'Source' => 'Origem', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Tipo de Origem', + 'Speed' => 'Speed', + 'SpeedHigh' => 'High Speed', + 'SpeedLow' => 'Low Speed', + 'SpeedMedium' => 'Medium Speed', + 'SpeedTurbo' => 'Turbo Speed', + 'Start' => 'Iniciar', + 'State' => 'Estado', + 'Stats' => 'Status', + 'Status' => 'Status', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => 'Imagens', + 'Stop' => 'Parar', + 'Stopped' => 'Parado', + 'Stream' => 'Contínuo', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => 'Sistema', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => 'Tempo', + 'TimeDelta' => 'Tempo Delta', + 'TimeStamp' => 'Tempo', + 'Timeline' => 'Timeline', + 'Timestamp' => 'Tempo', + 'TimestampLabelFormat' => 'Formato de etiqueta de tempo', + 'TimestampLabelX' => 'posição de etiqueta X', + 'TimestampLabelY' => 'posição de etiqueta Y', + 'Today' => 'Today', + 'Tools' => 'Ferramentas', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Score
Total', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Acionadores', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'Tipo', + 'Unarchive' => 'Desarquivar', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Unidades', + 'Unknown' => 'Desconhecido', + 'Update' => 'Update', + 'UpdateAvailable' => 'Um update ao zoneminder está disponível.', + 'UpdateNotNecessary' => 'Não é necessário update.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Use Filtro', + 'UseFilterExprsPost' => ' expressões de filtragem', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Use ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Usuário', + 'Username' => 'Nome de Usuário', + 'Users' => 'Usuários', + 'Value' => 'Valor', + 'Version' => 'Versão', + 'VersionIgnore' => 'Ignorar esta versão', + 'VersionRemindDay' => 'Lembre novamente em 1 dia', + 'VersionRemindHour' => 'Lembre novamente em 1 hora', + 'VersionRemindNever' => 'Nao lembrar novas versões', + 'VersionRemindWeek' => 'Lembrar novamente em 1 semana', + 'Video' => 'Video', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'Geração de Vídeo falhou!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'Parametros de geração de vídeo', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'Tamanho do vídeo', + 'View' => 'Ver', + 'ViewAll' => 'Ver Tudo', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'Ver Paginado', + 'Wake' => 'Wake', + 'WarmupFrames' => 'Imagens Desconsideradas', + 'Watch' => 'Assistir', + 'Web' => 'Web', + 'WebColour' => 'Web Colour', + 'Week' => 'Semana', + 'White' => 'White', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'String de Ativação X10', + 'X10InputAlarmString' => 'String de Entrada de alarme X10', + 'X10OutputAlarmString' => 'String de Saída de Alarme X10', + 'Y' => 'Y', + 'Yes' => 'Sim', + 'YouNoPerms' => 'Você não tem permissões para acessar este recurso.', + 'Zone' => 'Zona', + 'ZoneAlarmColour' => 'Cor de Alarme (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zonas', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Login atual é \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Últimos %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'A Última versão é v%1$s, você tem v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Monitor %1$s Funcção', + 'RunningRecentVer' => 'Você está usando a versão mais recente do ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Events', 1=>'Event', 2=>'Events' ), + 'Monitor' => array( 0=>'Monitors', 1=>'Monitor', 2=>'Monitors' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/ro_ro.php b/web/lang/ro_ro.php index 563d95aca..7ae6b255f 100755 --- a/web/lang/ro_ro.php +++ b/web/lang/ro_ro.php @@ -235,6 +235,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Durata', @@ -498,6 +499,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Play All', 'PleaseWait' => 'Vă rugăm aşteptaţi', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'Zona tampon post eveniment', 'PreEventImageBuffer' => 'Zona tampon pre eveniment', @@ -623,6 +625,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Actulizarea nu este necesară.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Foloseşte filtru', 'UseFilterExprsPost' => ' expresii de filtrare ', 'UseFilterExprsPre' => 'Foloseşte ', diff --git a/web/lang/ro_ro.php.orig b/web/lang/ro_ro.php.orig new file mode 100755 index 000000000..563d95aca --- /dev/null +++ b/web/lang/ro_ro.php.orig @@ -0,0 +1,1280 @@ + 'Color ân 24 biţi', + '32BitColour' => 'Color ân 32 biţi', // Added - 2011-06-15 + '8BitGrey' => 'Scală gri ân 8 biţi', + 'Action' => 'Action', + 'Actual' => 'Real', + 'AddNewControl' => 'Adaugă control nou', + 'AddNewMonitor' => 'Adaugă monitor', + 'AddNewUser' => 'Adaugă utilizator', + 'AddNewZone' => 'Adaugă zonă', + 'Alarm' => 'Alarma', + 'AlarmBrFrames' => 'Alarm
Frames', + 'AlarmFrame' => 'Cadru alarma', + 'AlarmFrameCount' => 'Nr. cadru alarma', + 'AlarmLimits' => 'Alarm Limits', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Alarm Px', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'Alert', + 'All' => 'Toate', + 'Apply' => 'Accept', + 'ApplyingStateChange' => 'Aplic schimbarea de stare', + 'ArchArchived' => 'Numai arhivate', + 'ArchUnarchived' => 'Numai nearhivate', + 'Archive' => 'Arhive', + 'Archived' => 'Archived', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'Cadre alarma', + 'AttrArchiveStatus' => 'Stare arhiva', + 'AttrAvgScore' => 'Cota medie', + 'AttrCause' => 'Cauza', + 'AttrDate' => 'Data', + 'AttrDateTime' => 'Data/Timp', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Procentaj disc', + 'AttrDuration' => 'Durata', + 'AttrFrames' => 'Cadre', + 'AttrId' => 'Nr.', + 'AttrMaxScore' => 'Cota max', + 'AttrMonitorId' => 'Monitor nr.', + 'AttrMonitorName' => 'Nume monitor', + 'AttrName' => 'Nume', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => 'Time', + 'AttrTotalScore' => 'Cota total', + 'AttrWeekday' => 'Zi săpt.', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'Cota
medie', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Denumirea poate contine doar caractere alfanumerice, cratima si underline.', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'Laţime de bandă', + 'BlobPx' => 'Blob Px', + 'BlobSizes' => 'Blob Sizes', + 'Blobs' => 'Blobs', + 'Brightness' => 'Luminozitate', + 'Buffers' => 'Zonă tampon', + 'CanAutoFocus' => 'Focalizare automată', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Balans alb automat', + 'CanAutoZoom' => 'Are auto zoom', + 'CanFocus' => 'Focalizare', + 'CanFocusAbs' => 'Focalizare absolută', + 'CanFocusCon' => 'Focalizare continuă', + 'CanFocusRel' => 'Focalizare relativă', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'Dinamic', + 'CanMoveAbs' => 'Mişcare absolută', + 'CanMoveCon' => 'Mişcare continuă', + 'CanMoveDiag' => 'Mişcare diagonală', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Mişcare relativă', + 'CanPan' => 'Rotativ' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Se poate înclina', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Balans alb', + 'CanWhiteAbs' => 'Balans alb absolut', + 'CanWhiteBal' => 'Balans alb', + 'CanWhiteCon' => 'Balans alb continuu', + 'CanWhiteRel' => 'Balans alb relativ', + 'CanZoom' => 'Zoom', + 'CanZoomAbs' => 'Zoom Absolut', + 'CanZoomCon' => 'Zoom Continuu', + 'CanZoomRel' => 'Zoom Relativ', + 'Cancel' => 'Renunţ', + 'CancelForcedAlarm' => 'Renunta Fortat Alarma', + 'CaptureHeight' => 'Înălţime captură', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Paletă captură', + 'CaptureWidth' => 'Lăţime captură', + 'Cause' => 'Cauza', + 'CheckMethod' => 'Alarm Check Method', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Alege filtru', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Închide', + 'Colour' => 'Culoare', + 'Command' => 'Comanda', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Config', + 'ConfiguredFor' => 'Configurat pentru', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'Confirm parola', + 'ConjAnd' => 'şi', + 'ConjOr' => 'sau', + 'Console' => 'Consola', + 'ContactAdmin' => 'Va rugam contactati administratorul pentru detalii.', + 'Continue' => 'Continuaă', + 'Contrast' => 'Contrast', + 'Control' => 'Control', + 'ControlAddress' => 'Adresă control', + 'ControlCap' => 'Posibilitate control', + 'ControlCaps' => 'Posibilităţi control', + 'ControlDevice' => 'Dispozitiv control', + 'ControlType' => 'Tip control', + 'Controllable' => 'Controlabil', + 'Cycle' => 'Ciclu', + 'CycleWatch' => 'Vizual. ciclu', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Zi', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'Şterge', + 'DeleteAndNext' => 'Şterge & Următor', + 'DeleteAndPrev' => 'Şterge & Precedent', + 'DeleteSavedFilter' => 'Şterge filtrul salvat', + 'Description' => 'Descriere', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Canal dispozitiv', + 'DeviceFormat' => 'Format dispozitiv', + 'DeviceNumber' => 'Număr dispozitiv', + 'DevicePath' => 'Device Path', + 'Devices' => 'Devices', + 'Dimensions' => 'Dimensiuni', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Disc', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Durata', + 'Edit' => 'Modific', + 'Email' => 'Email', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Activ', + 'EnterNewFilterName' => 'Introduceti denumire filtru', + 'Error' => 'Eroare', + 'ErrorBrackets' => 'Eroare, va rugam asigurati-va ca toate parantezele se inchid', + 'ErrorValidValue' => 'Eroare, va rugam verificati validitatea numelor termenilor', + 'Etc' => 'etc', + 'Event' => 'Eveniment', + 'EventFilter' => 'Filtru eveniment', + 'EventId' => 'Nr. eveniment', + 'EventName' => 'Nume eveniment', + 'EventPrefix' => 'Prefix eveniment', + 'Events' => 'Evenim.', + 'Exclude' => 'Exclude', + 'Execute' => 'Execute', + 'Export' => 'Export', + 'ExportDetails' => 'Export Event Details', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'Exporting', + 'FPS' => 'FPS', + 'FPSReportInterval' => 'Interval raport FPS', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Feed', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Arhivează toate rezultatele', + 'FilterDeleteEvents' => 'Şterge toate rezultatele', + 'FilterEmailEvents' => 'Trimite email ale tuturor rezultatelor', + 'FilterExecuteEvents' => 'Execută comanda pentru toate rezultatele', + 'FilterMessageEvents' => 'Trimite mesaj pentru toate rezultatele', + 'FilterPx' => 'Filter Px', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Încarcă toate rezultatele', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filters', + 'First' => 'First', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Focalizare', + 'ForceAlarm' => 'Alarmă forţată', + 'Format' => 'Format', + 'Frame' => 'Cadru', + 'FrameId' => 'Nr. cadru', + 'FrameRate' => 'Frecv. cadre', + 'FrameSkip' => 'Omite cadre', + 'Frames' => 'Cadre', + 'Func' => 'Func', + 'Function' => 'Funcţie', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'Generează video', + 'GeneratingVideo' => 'Generez video', + 'GoToZoneMinder' => 'Du-te la ZoneMinder.com', + 'Grey' => 'Gri', + 'Group' => 'Group', + 'Groups' => 'Grupuri', + 'HasFocusSpeed' => 'Viteză focalizare', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Viteză rotire', + 'HasPresets' => 'Are Presetări', + 'HasTiltSpeed' => 'Viteză înclinare', + 'HasTurboPan' => 'Rotire turbo', + 'HasTurboTilt' => 'Înclinare turbo', + 'HasWhiteSpeed' => 'Viteză balans alb', + 'HasZoomSpeed' => 'Viteză zoom', + 'High' => 'Mare', + 'HighBW' => 'B/W mare', + 'Home' => 'Home', + 'Hour' => 'Ora', + 'Hue' => 'Nuanţă', + 'Id' => 'Nr.', + 'Idle' => 'Oprit', + 'Ignore' => 'Ignor', + 'Image' => 'Imagine', + 'ImageBufferSize' => 'Zonă tampon imagine (cadre)', + 'Images' => 'Images', + 'In' => 'In', + 'Include' => 'Includ', + 'Inverted' => 'Inversă', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'Limbă', + 'Last' => 'Ultim', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'rezultate', + 'LimitResultsPre' => 'Limitează la primele', + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Load', + 'Local' => 'Local', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Eşti conectat ca', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Logare', + 'Login' => 'Login', + 'Logout' => 'Ieşire', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Redusa', + 'LowBW' => 'B/W redus', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'Select', + 'Max' => 'Max', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'Cota
max', + 'MaxFocusRange' => 'Raza focalizare max', + 'MaxFocusSpeed' => 'Viteză focalizare max', + 'MaxFocusStep' => 'Pas focalizare max', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Raza max de rotire', + 'MaxPanSpeed' => 'Viteză rotire max', + 'MaxPanStep' => 'Pas rotire max', + 'MaxTiltRange' => 'Raza înclinare max', + 'MaxTiltSpeed' => 'Vitezï înclinare max', + 'MaxTiltStep' => 'Pas înclinare max', + 'MaxWhiteRange' => 'Raza balans alb max', + 'MaxWhiteSpeed' => 'Viteză balans alb man', + 'MaxWhiteStep' => 'Pas balans alb max', + 'MaxZoomRange' => 'Raza zoom max', + 'MaxZoomSpeed' => 'Viteză zoom max', + 'MaxZoomStep' => 'Pas zoom max', + 'MaximumFPS' => 'FPS max', + 'Medium' => 'Medie', + 'MediumBW' => 'B/W mediu', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'Minimum blobs should be less than maximum', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Raza focalizare min', + 'MinFocusSpeed' => 'Viteză focalizare min', + 'MinFocusStep' => 'Pas focalizare min', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Raza min de rotire', + 'MinPanSpeed' => 'Viteză rotire min', + 'MinPanStep' => 'Pas rotire min', + 'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Raza înclinare min', + 'MinTiltSpeed' => 'Vitezï înclinare min', + 'MinTiltStep' => 'Pas înclinare min', + 'MinWhiteRange' => 'Raza balans alb min', + 'MinWhiteSpeed' => 'Viteză balans alb min', + 'MinWhiteStep' => 'Pas balans alb min', + 'MinZoomRange' => 'Raza zoom min', + 'MinZoomSpeed' => 'Viteză zoom min', + 'MinZoomStep' => 'Pas zoom min', + 'Misc' => 'Divers', + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Nr. Monitor', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Monitoare', + 'Montage' => 'Montage', + 'Month' => 'Luna', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Mişcare', + 'MustBeGe' => 'trebuie sa fie mai mare sau egal cu', + 'MustBeLe' => 'trebuie sa fie mai mic sau egal cu', + 'MustConfirmPassword' => 'Trebuie sa confirmati parola', + 'MustSupplyPassword' => 'Trebuie sa introduceti parola', + 'MustSupplyUsername' => 'Trebuie sa introduceti utilizator', + 'Name' => 'Denumire', + 'Near' => 'Near', + 'Network' => 'Reţea', + 'New' => 'Nou', + 'NewGroup' => 'Grup nou', + 'NewLabel' => 'New Label', + 'NewPassword' => 'Parola nouă', + 'NewState' => 'Stare nouă', + 'NewUser' => 'Utilizator nou', + 'Next' => 'Urmator', + 'No' => 'Nu', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Nu exista cadre inregistrate pentru acest eveniment.', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => 'LipsaFiltruSalvat', + 'NoStatisticsRecorded' => 'Nu exista statistici pentru acest eveniment/cadru.', + 'None' => 'Nimic', + 'NoneAvailable' => 'Indisponibil', + 'Normal' => 'Normal', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'egal cu', + 'OpGt' => 'mai mare ca', + 'OpGtEq' => 'mai mare sau egal cu', + 'OpIn' => 'in set', + 'OpLt' => 'mai mic decât', + 'OpLtEq' => 'mai mic sau egal cu', + 'OpMatches' => 'matches', + 'OpNe' => 'diferit de', + 'OpNotIn' => 'not in set', + 'OpNotMatches' => 'nu se potriveste', + 'Open' => 'Deschide', + 'OptionHelp' => 'OptionHelp', + 'OptionRestartWarning' => 'Aceste schimbari nu se aplica in timpul rularii.\n Dupa ce ati terminat setarile va rugam reporniti ZoneMinder.', + 'Options' => 'Opţiuni', + 'OrEnterNewName' => 'sau denumire nouă', + 'Order' => 'Order', + 'Orientation' => 'Orientare', + 'Out' => 'Out', + 'OverwriteExisting' => 'Suprascrie existent', + 'Paged' => 'Paginat', + 'Pan' => 'Rotire', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Rotire/Înclinare', + 'Parameter' => 'Parametru', + 'Password' => 'Parolă', + 'PasswordsDifferent' => 'Cele două parole diferă.', + 'Paths' => 'Cale', + 'Pause' => 'Pause', + 'Phone' => 'Phone', + 'PhoneBW' => 'Phone B/W', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'Pixeli', + 'Play' => 'Play', + 'PlayAll' => 'Play All', + 'PleaseWait' => 'Vă rugăm aşteptaţi', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'Zona tampon post eveniment', + 'PreEventImageBuffer' => 'Zona tampon pre eveniment', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Presetare', + 'Presets' => 'Presetări', + 'Prev' => 'Prev', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'Rate', + 'Real' => 'Real', + 'Record' => 'Înregistrare', + 'RefImageBlendPct' => 'Combinare imagine referinta(%)', + 'Refresh' => 'Actualizează', + 'Remote' => 'Remote', + 'RemoteHostName' => 'Remote Host Name', + 'RemoteHostPath' => 'Remote Host Path', + 'RemoteHostPort' => 'Remote Host Port', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Remote Image Colours', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Rename', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => 'Reset Event Counts', + 'Restart' => 'Reporneşte', + 'Restarting' => 'Repornesc', + 'RestrictedCameraIds' => 'Restricted Camera Ids', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Rotire stânga', + 'RotateRight' => 'Rotire dreapta', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Mod rulare', + 'RunState' => 'Stare de rulare', + 'Running' => 'Rulează', + 'Save' => 'Salvez', + 'SaveAs' => 'Salvează ca', + 'SaveFilter' => 'Salvează filtru', + 'Scale' => 'Scara', + 'Score' => 'Cota', + 'Secs' => 'Sec', + 'Sectionlength' => 'Lungime secţiune', + 'Select' => 'Select', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Set', + 'SetNewBandwidth' => 'Setare laţime de bandă nouă', + 'SetPreset' => 'Set Preset', + 'Settings' => 'Setări', + 'ShowFilterWindow' => 'Fereastra filtre', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Cres', + 'SortBy' => 'Sortează după', + 'SortDesc' => 'Desc', + 'Source' => 'Sursa', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Tipul sursei', + 'Speed' => 'Viteză', + 'SpeedHigh' => 'Viteză mare', + 'SpeedLow' => 'Viteză mică', + 'SpeedMedium' => 'Viteză medie', + 'SpeedTurbo' => 'Viteză turbo', + 'Start' => 'Porneşte', + 'State' => 'Stare', + 'Stats' => 'Statistici', + 'Status' => 'Stare', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => 'Statice', + 'Stop' => 'Opreşte', + 'Stopped' => 'Oprit', + 'Stream' => 'Flux', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Trimite', + 'System' => 'Sistem', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Miniatură', + 'Tilt' => 'Înclinare', + 'Time' => 'Timp', + 'TimeDelta' => 'Time Delta', + 'TimeStamp' => 'Format timp', + 'Timeline' => 'Timeline', + 'Timestamp' => 'Format timp', + 'TimestampLabelFormat' => 'Format eticheta format timp', + 'TimestampLabelX' => 'Format timp eticheta X', + 'TimestampLabelY' => 'Format timp eticheta Y', + 'Today' => 'Azi', + 'Tools' => 'Unelte', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Cota
total', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'Declanşator', + 'TurboPanSpeed' => 'Viteză rotire turbo', + 'TurboTiltSpeed' => 'Viteză înclinare turbo', + 'Type' => 'Tip', + 'Unarchive' => 'Dezarhivez', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Unităţi', + 'Unknown' => 'Necunoscut', + 'Update' => 'Update', + 'UpdateAvailable' => 'Sunt disponibile actualizări ZoneMinder.', + 'UpdateNotNecessary' => 'Actulizarea nu este necesară.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Foloseşte filtru', + 'UseFilterExprsPost' => ' expresii de filtrare ', + 'UseFilterExprsPre' => 'Foloseşte ', + 'User' => 'Utilizator', + 'Username' => 'Nume', + 'Users' => 'Utilizatori', + 'Value' => 'Valoare', + 'Version' => 'Versiune', + 'VersionIgnore' => 'Ignoră această versiune', + 'VersionRemindDay' => 'Aminteşte-mi peste 1 zi', + 'VersionRemindHour' => 'Aminteşte-mi peste 1 oră', + 'VersionRemindNever' => 'Nu aminti despre versiuni noi', + 'VersionRemindWeek' => 'Aminteşte-mi peste 1 săptămână', + 'Video' => 'Video', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'Generare video esuata!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'Parametrii generare video', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'Mărime video', + 'View' => 'Vizual', + 'ViewAll' => 'Vizual. tot', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'Vizual. paginat', + 'Wake' => 'Wake', + 'WarmupFrames' => 'Warmup Frames', + 'Watch' => 'Watch', + 'Web' => 'Web', + 'WebColour' => 'Web Colour', + 'Week' => 'Săpt.', + 'White' => 'Alb', + 'WhiteBalance' => 'Balans alb', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'String activare X10', + 'X10InputAlarmString' => 'X10 Input Alarm String', + 'X10OutputAlarmString' => 'X10 Output Alarm String', + 'Y' => 'Y', + 'Yes' => 'Da', + 'YouNoPerms' => 'Nu aveti permisiunile necesare pentru accesarea acestei resurse.', + 'Zone' => 'Zone', + 'ZoneAlarmColour' => 'Alarm Colour (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zona', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Eşti logat ca \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Ultimele %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'Ultima versiune este v%1$s, momentan rulaţi v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Funcţiile monitorului %1$s ', + 'RunningRecentVer' => 'Rulaţi ultima versiune de ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// Variable arrays expressing plurality +$VLANG = array( + 'Event' => array( 0=>'Evenimente', 1=>'Eveniment', 2=>'Evenimente' ), + 'Monitor' => array( 0=>'Monitoare', 1=>'Monitor', 2=>'Monitoare' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// OPTIONS +$OLANG = array( +// Beginning of System tab + 'LANG_DEFAULT' => array( + 'Prompt' => "Limba implicită folosită", + 'Help' => "ZoneMinder permite folosirea în interfaţa web a altei limbi decât Engleza dacă fişierul necesar a fost creat şi există. Această opţiune vă permite să schimbaţi limba implicită, Engleza Britanica, cu o altă limbă." + ), + 'OPT_USE_AUTH' => array( + 'Prompt' => "Autentifică utilizatorii la ZoneMinder", + 'Help' => "Zoneminder poate rula în două moduri. Cel mai simplu este cel fără autentificare, în care oricine poate accesa ZoneMinder având acces la toate opţiunile. Acest mod este fiabil dacă accesul la server-ul web este limitat prin alte modalitătţi. Al doilea mod permite adăugarea de utilizatori cu diverse permisiuni. Utilizatorii trebuie să se autentifice la ZoneMinder şi sunt limitaţi de permisiunile definite." + ), + 'AUTH_RELAY' => array( + 'Prompt' => "Metoda folosită pentru autentificare", + 'Help' => "În cazul în care ZoneMinder rulează în mod autentificat trebuie să transmită informaţiile utilizatorilor la paginile web aferente. Acest lucru este realizat în două moduri. Primul este să folosească un string care nu conţine detalii directe despre utilizator şi parolă; cel de-al doilea este să transmită utilizatorul şi parola direct. Această metodă nu este recomandată numai dacă nu aveţi librăriile md5 disponibile pe sistemul dvs. sau aveţi un sistem complet izolat, fără acces extern." + ), + 'AUTH_HASH_SECRET' => array( + 'Prompt' => "Secret folosit pentru codarea informaţiilor de autentificare", + 'Help' => "Când ZoneMinder rulează în mod de autentificare codat (hashed), necesită generarea string-urilor de codare care conţin informaţii criptate ca utilizatorii şi parolele. Deşi acest string este destul de sigur, adăugarea unui string aleator îmbunătăţeşte securitatea." + ), + 'OPT_FAST_DELETE' => array( + 'Prompt' => "La ştergerea evenimentelor şterge numai informaţiile din baza de date", + 'Help' => "În mod normal un eveniment creat ca rezultat al unei alarme este compus din unul sau mai multe tabele în baza de date plus fişierele asociate. Când ştergeţi evenimente din broswer poate dura mult dacă ştergeţi mai multe evenimente concomitent. Este recomandat să activaţi această opţiune, care va şterge doar informaţiile din baza de date. Evenimentele nu vor mai apărea la vizualizare, şi vor fi şterse de daemon-ul zmaudit mai târziu." + ), + 'SHM_KEY' => array( + 'Prompt' => "Cheie memorie comuna, modificaţi numai în cazul conflictelor cu alte aplicaţii", + 'Help' => "ZoneMinder foloseşte memorie comună pentru a face comunicarea între module mai rapidă. Pentru a identifica zona corectă ce trebuie folosită sunt utilizate chei de memorie comună. Această opţiune controlează valoarea cheii." + ), + 'FILTER_RELOAD_DELAY' => array( + 'Prompt' => "La câte secunde sunt reîncărcate filtrele în zmfilter.pl", + 'Help' => "ZoneMinder vă permite să salvaţi filtrele în baza de date putând astfel să stergeţi sau să upload-aţi evenimentele corespunzătoare anumitor criterii. Daemon-ul zmfilter încarcă aceste evenimente, şterge sau upload-ează. Această opţiune determină cât de des filtrele vor fi reîncărcate. Dacă nu schimbaţi des filtrele aceasta poate avea valori mari." + ), + 'MAX_RESTART_DELAY' => array( + 'Prompt' => "La cât timp (în secunde) daemon-ul va încerca repornire.", + 'Help' => "zmdc (daemon-ul de control zm) controlează toate procesele care sunt pornite sau oprite şi va încerca reponire la orice eroare. Dacă sunt multe erori trebuie introdus un timp de întârziere între reporniri. Dacă sunt erori în continuare această valoare creşte pentru a împierdica blocarea sistemului datorată repornirilor. Această opţiune controlează valoarea de întârziere." + ), + 'WATCH_CHECK_INTERVAL' => array( + 'Prompt' => "Cât de des verific dacă daemonii de captură nu s-au blocat.", + 'Help' => "Daemon-ul zmwatch verifică daemonii de captură pentru a verifica dacă sunt blocaţi (rareori se produce o desincronizare care blochează daemonii). Această opţiune determină cât de des sunt verificaţi daemonii." + ), + 'WATCH_MAX_DELAY' => array( + 'Prompt' => "Durata maximă de amânare, de la ultima imagine capturată, inainte de a reporni daemonii de captură", + 'Help' => "Această opţiune determină durata maximă de amânare, de la ultimul cadru capturat, pe care o veţi permite. Daemon-ul va fi repornit dacă nu a înregistrat nici o imagine după această perioadă, totuşi repornirea poate dura mai mult, în conjuncţie cu intervalul de verificat de mai sus." + ), + 'RECORD_EVENT_STATS' => array( + 'Prompt' => "Înregistrez informaţii despre evenimente. Dezactivaţi dacă ZoneMinder devine lent.", + 'Help' => "Această versiune de ZoneMinder înregistrează informaţii despre evenimente în tabelul Stats. Aceasta vă poate ajuta să determinaţi setările optime pentru zonele definite, totuşi această opţiune poate fi înşelatoare. În versiunile viitoare opţiunea va fi mai exactă, mai ales în cazul unui număr mare de evenimente. Opţiunea implicită (da) permite stocarea acestor informaţii dar dacă vreţi performanţă puteţi dezactiva această opţiune, caz în care informaţiile despre evenimente nu vor fi salvate." + ), + 'RECORD_DIAG_IMAGES' => array( + 'Prompt' => "Înregistrare imagini intermediare de diagnosticare, foarte lent", + 'Help' => "Pe lângă faptul că se pot înregistra statisticile evenimentelor se pot deasemenea înregistra imagini intermediare de diagnosticare care afişează rezultatele diferitelor verificări care au loc când se încearcă determinarea unei posibile alarme. Aceste imagini sunt generate pentru fiecare cadru, zonă şi alarmă, deci impactul asupra performanţei va fi foarte mare. Activaţi această opţiune doar pentru depanare sau analiză şi nu uitaţi să o dezactivaţi." + ), + 'CREATE_ANALYSIS_IMAGES' => array( + 'Prompt' => "Crează imagini analizate cu marcaje ale mişcării", + 'Help' => "Implicit, în cazul unei alarme, ZoneMinder înregistrează atât imaginile neprelucrate cât şi cele ce au fost analizate şi au zone marcate unde a fost detectată mişcare. Acest lucru poate fi foarte folositor la configurarea zonelor sau în analiza evenimentelor. Acest parametru permite oprirea înregistrării imaginilor cu zone de mişcare marcate." + ), + 'OPT_FRAME_SERVER' => array( + 'Prompt' => "Daemon-ul de analiză va scrie imaginile pe disc", + 'Help' => "În unele cazuri este posibil ca viteza de scriere a unui HDD sa fie atât de mică încat să cauzeze încetinirea daemon-ului de analiză în special în timpul evenimentelor cu multe cadre. Activarea acestei opţiuni porneşte daemon-ul de cadre (zmf) care va 'primi' imaginile de la daemon-ul de analiză şi le va scrie pe disc. Dacă această transmisie eşuează sau apar alte erori, funcţia de scriere va reveni daemon-ului de analiză." + ), + 'FRAME_SOCKET_SIZE' => array( + 'Prompt' => "Specificaţi dimensiunea memoriei tampon", + 'Help' => "Pentru imaginile de dimensiuni mari capturate este posibil ca scrierea lor pe disc să eşueze deoarece cantitatea de informaţie scrisă este mai mare decât memoria tampon alocată. Deşi imaginile sunt scrise apoi de către daemon-ul de analiză, se distruge obiectul daemon-ului de cadre. Puteţi folosi această opţiune pentru a specifica o memorie tampon de dimensiuni mai mari. Va trebui sa modificaţi dimensiunea socket-ului tampon maxim folosind 'sysctl' (sau in /proc/sys/net/core/wmem_max) pentru a permite setarea acestei noi valori. Alternativa este să schimbaţi mărimea implicită a memorie tampon a sistemului, caz în care modificarea acestei valori nu mai este necesară." + ), + 'OPT_CONTROL' => array( + 'Prompt' => "Suport camere controlabile (rotire/înclinare/zoom)", + 'Help' => "ZoneMinder include suport limitat pentru camere controlabile. Sunt incluse câteva protocoale mostră şi pot fi adăugate cu uşurinţă şi altele. Dacă vreţi să controlaţi camerele prin intermediul ZoneMinder selectaţi această opţiune." + ), + 'CHECK_FOR_UPDATES' => array( + 'Prompt' => "Verific versiuni noi la zoneminder.com", + 'Help' => "Începând cu versiunea 1.17.0, versiuni noi sunt aşteptate frecvent. ZoneMinder poate compara versiunea instalată cu cea mai recentă de pe zoneminder.com. Aceste verificări sunt făcute cam o dată pe saptămână şi nu sunt transmise nici un fel de informaţii despre sistemul dvs. în afară de versiunea de zoneminder pe care o rulaţi. Dacă nu doriţi să faceţi verificări de versiune sau nu aveţi conexiune la internet dezactivaţi această opţiune." + ), +// End of System tab + +// Beginning of Paths tab + 'DIR_EVENTS' => array( + 'Prompt' => "Directorul în care sunt stocate evenimentele", + 'Help' => "Acesta este subdirectorul în care sunt salvate imaginile generate de evenimente şi alte fişiere. Implicit este un subdirector al directorului rădăcina zoneminder; dacă spaţiul nu vă permite puteţi să stocaţi imaginile pe altă partiţie, caz în care ar trebui să faceţi un link la subdirectorul implicit." + ), + 'DIR_IMAGES' => array( + 'Prompt' => "Directorul în care sunt stocate imaginile", + 'Help' => "ZoneMinder generează multe imagini, majoritate asociate cu evenimente. În acest director vor fi stocate imaginile neasociate evenimentelor." + ), + 'DIR_SOUNDS' => array( + 'Prompt' => "Directorul cu sunetele care pot fi folosite de ZoneMinder", + 'Help' => "ZoneMinder poate rula un sunet atunci când este detectată o alarmă. Acesta este directorul în care este stocat sunetul care va fi rulat." + ), + 'PATH_ZMS' => array( + 'Prompt' => "Calea web la serverul video zms", + 'Help' => "Serverul video este necesat pentru a trimite imagini la browser-ul dvs. Va fi instalat în calea cgi-bin specificată la instalare. Această opţiune determină calea web la server. În mod normal serverul video rulează în mod parser-header. Dacă aveţi probleme cu această setare puteţi trece în modul non-parsed-header înlocuind 'zms' cu 'nph-zms'." + ), + 'PATH_SOCKS' => array( + 'Prompt' => "Calea socket-urilor Unix care sunt folosite de ZoneMinder ", + 'Help' => "În general ZoneMinder foloseşte socket-urilor Unix. Astfel se reduce nevoia de a asigna porturi şi împiedică eventualele conflicte cu aplicaţii externe. Fiecare socket Unix necesită un fişier cu extensia .sock. Această opţiune indică unde vor fi stocare fişierele .sock." + ), + 'PATH_LOGS' => array( + 'Prompt' => "Calea la logurile generate de daemonii ZoneMinder", + 'Help' => "Majoritatea daemon-ilor ZoneMinder generează log-uri care vă pot ajuta. Acesta este directorul în care vor fi stocate log-urile. Log-urile pot fi şterse dacă nu sunt necesare." + ), +// End of Paths tab + +// Beginning of Config tab + 'TIMESTAMP_ON_CAPTURE' => array( + 'Prompt' => "Adaugă ora pe imaginile capturate", + 'Help' => "ZoneMinder poate adăuga ora pe imagini în două feluri. Metoda implicită, când această opţiune este activă, face ca fiecarei imagini să i se aplice ora imediat ce a fost capturată. A doua metodă nu adaugă ora pe imagini numai când sunt salvate ca parte a unui eveniment sau accesate prin web. Ora va avea acelaşi format în oricare dintre cele două cazuri. Folosind prima metodă vă asiguraţi că imaginile au ora tiparită pe ele indiferent de alte circumstanţe dar va adăuga ora pe toate imaginile, chiar şi pe cele care nu au fost vizualizate sau salvate. A doua metodă necesită ca imaginile ce urmează a fi salvate să fie copiate, înainte de a fi salvate, altfel cele două ore adăugate pe imagini pot fi diferite. Ora este întotdeauna salvată la aceeasi rezoluţie, deci imaginile vor putea fi identificate după ora la care au fost capturate." + ), + 'LOCAL_BGR_INVERT' => array( + 'Prompt' => "Schimbă BGR in RGB", + 'Help' => "Unele camere şi plăci de captură înregistrează imaginile în ordinea BGR (Albastru-Verde-Roşu) chiar dacă paleta de culori spune RGB (Roşu-Verde-Albastru). Dacă observaţi culori ciudate pe imaginile capturate încercaţi să modificaţi această opţiune. Notă: această opţiune este aplicabilă numai pentru camerele locale nu şi pentru cele din reţea." + ), + 'Y_IMAGE_DELTAS' => array( + 'Prompt' => "Calcul diferenţial al imaginilor folosind canalul Y", + 'Help' => "Atunci când ZoneMinder încearcă să stabilească diferenţele dintre două imagini color generează o imagine în scală de gri 'delta'. Pentru a face acest lucru determină diferenţele dintre componentele RGB şi calculează o scală de gri corespunzătoare. Dacă această opţiune este activă atunci calculul se va face prin conversia fiecărui pixel din imagine într-o valoare luminoasă (Y din YUV) şi găsirea diferenţelor. Dacă această opţiune nu este activă atunci diferenţa rezultată este determinată ca media diferenţelor fiecărei culori. Folosind valoare Y şansele de acurateţe sunt mult mai mari iar procesul este cu 15% mai rapid." + ), + 'FAST_IMAGE_BLENDS' => array( + 'Prompt' => "Folosirea unui algoritm rapid pentru combinarea imaginilor", + 'Help' => "În majoritatea modurilor de rulare ZoneMinder trebuie să combine imaginile capturate cu imagini de referinţă deja stocate pentru a le actualiza pentru următoarea imagine. Procentajul de combinare controlează cât de mult afectează noua imagine capturată imaginea de referinţă. Pentru acest proces sunt disponibile două metode. Dacă această opţiune este setată atunci un calcul de bază este aplicat care, deşi rapid şi exact, poate reduce raza de pixeli din imaginea de referinţă. Dacă aveţi şi o valoare mică ca minim de diferenţă dintre pixeli, pot apărea alarme false. Alternativa este să dezactivaţi această opţiune, caz în care vor fi stocate un set de valori temporare care vor elimina erorile. Deşi dezactivarea va avea ca rezultat acurateţe mai mare, poate fi de 6 ori mai lentă. Această opţiune ar trebui dezactivată doar în cazul în care aveţi probleme cu metoda implicită." + ), + 'COLOUR_JPEG_FILES' => array( + 'Prompt' => "Aplică culori fişierelor JPEG capturate în scală de gri", + 'Help' => "Camerele alb/negru pot aplica scală de gri fişierelor jpeg capturate. Aceste camere economisesc spaţiu în comparaţie cu cele color. Totuşi unele unelte, cum ar fi ffmpeg şi mpeg_encode, ori nu funcţionează cu aceste setări ori trebuie să transforme imaginile. Activând această opţiune ocupaţi mai mult spaţiu pe disc dar creaţi fişierele MPEG mult mai repede." + ), + 'JPEG_FILE_QUALITY' => array( + 'Prompt' => "Setează calitatea JPEG pentru imaginile statice (1-100)", + 'Help' => "Atunci când ZoneMinder detectează un eveniment va salva fişierele asociate. Aceste fişiere sunt în format JPEG şi pot fi văzute sau difuzate mai departe. Această opţiune specifică calitatea la care vor fi salvate imaginile. Un număr mare înseamnă calitate mai bună dar compresie mai mică, deci va ocupa spaţiu mai mult pe disc şi va dura mai mult timp să o încărcaţi. Un număr mai mic înseamnă spaţiu mai puţin ocupat, vizualizare mai rapidă dar calitate redusă." + ), + 'JPEG_IMAGE_QUALITY' => array( + 'Prompt' => "Setează calitatea JPEG pentru imaginile 'live'(video) (1-100)", + 'Help' => "Când vizualizaţi un stream 'live' al unui monitor Zoneminder va lua o imagine din buffer şi o va encoda înainte de a o trimite. Această opţiune specifică ce calitate va fi folosită pentru encodarea imaginilor. Un număr mare înseamnă calitatea bună dar compresie redusă deci va dura mai mult vizualizarea în cazul conexiunilor lente. Din contră, un număr mic înseamna viteză mare de vizualizare dar calitatate redusă. Această opţiune nu se aplică în cazul imaginilor statice care vor fi salvate la calitatea specificată în opţiune precedentă." + ), + 'BLEND_ALARMED_IMAGES' => array( + 'Prompt' => "Combinare imagini de alarmă pentru actualizarea imaginii de referinţă", + 'Help' => "Pentru a detecta o alarmă ZoneMinder compară o imagine cu o imagine de referinţă care este alcătuită dintr-o suită de imagini anterioare. Această opţiune determină dacă imaginile care cauzează un eveniment vor fi incluse în acest proces. Activând această opţiune poate creşte precizia alarmelor dar poate cauza probleme în cazul schimbărilor dese de luminozitate, caz în care alarmele vor persista. O cale mai bună pentru precizie este sa micsoraţi procentajul de combinare de referinţă pentru monitoarele în cauză." + ), + 'NO_MAX_FPS_ON_ALARM' => array( + 'Prompt' => "Ignoră valoarea FPS Maxim în cazul unei alarme", + 'Help' => "Când configuraţi monitoarele puteţi specifica o valoare maximă pentru rata de capturare, exprimată în cadre pe secundă. Aceasta poate fi folosită pentru a limita capacităţile video, de laţime de bandă sau pentru a reduce supraîncărcarea procesorului. Această opţiune 'v-a comunica' ZoneMinder-ului să ignore aceste limitări la apariţia unei alarme şi să încerce captura cât mai rapid posibil." + ), + 'OPT_ADAPTIVE_SKIP' => array( + 'Prompt' => "Analiza eficientă prin omitere de cadre", + 'Help' => "În versiuni precedente ale ZoneMinder daemon-ul de analiză procesa ultimul cadru capturat pentru 'a ţine pasul' cu daemon-ul de captură. Acest lucru are ca efect secundar lipsa unei bucaţi din secvenţa de alarmă deoarece toate cadrele precedente alarmei trebuie scrise pe disc şi în baza de date înainte de a trece la următorul cadru, ducând la întârzieri între cadre. Setând această opţiune este activat un nou algoritm adaptiv în care daemon-ul de analiză încearcă procesarea cât mai multor cadre posibile omiţând cadre doar în cazul în care daemon-ul de captură ameninţă suprascrierea cadrelor procesate. Această omitere este variabilă în funcţie de spaţiul liber şi de memoria tampon. Activarea acestei opţiuni vă oferă acoperirea mai eficientă a începutului alarmelor. Această opţiune poate avea efect de încetinire a daemon-ului de analiză faţă de daemon-ul de captură în timpul evenimentelor şi pentru anumite frecvenţe rapide de captură este posibil ca acest algoritm să fie copleşit neavând timp să reacţioneze la construcţia rapidă a cadrelor, aşadar pot apărea blocaje." + ), + 'STRICT_VIDEO_CONFIG' => array( + 'Prompt' => "Permite erorilor în setările video să fie fatale", + 'Help' => "Unele dispozitive video pot anunţa erori când de fapt acţiunea a avut succes. Dezactivând această opţiune va permite anunţarea de erori în continuare dar nu va opri daemon-ul de captură. Această opţiune va avea ca efect ignorarea tuturor erorilor inclusiv cele autentice care poate cauza oprirea capturii video. Folosiţi această opţiune cu atenţie." + ), + 'FORCED_ALARM_SCORE' => array( + 'Prompt' => "Valoarea pentru alarmele forţate", + 'Help' => "Utilitarul 'zmu' poate fi folosit pentru a forţa o alarmă mai degrabă decât bazarea pe algoritmii de detectare a mişcării. Această opţiune determină ce valoare vor avea alarmele forţate pentru a fi distinctive faţă de cele normale. Valoare trebuie să fie 255 sau mai puţin." + ), + 'BULK_FRAME_INTERVAL' => array( + 'Prompt' => "Cât de des va fi scris un cadru 'masiv' în baza de date", + 'Help' => "Tradiţional ZoneMinder introduce o valoare în tabelul Frames din baza de date pentru fiecare cadru capturat şi salvat. Această acţiune funcţionează bine în cazul în care ZoneMinder rulează detectând mişcare dar în modurile 'Record' sau 'Mocord' rezultă un număr imens de cadre care ocupă mult spaţiu în baza de date şi pe disc. Aplicând acestei opţiuni o valoare diferită de zero va permite ZoneMinder-ului să grupeze toate cadrele care nu ţin de o alarmă într-un cadru 'masiv' care va salva spaţiu şi bandwidth. Singurul dezavantaj al acestei opţiuni este ca informaţiile temporale pentru cadrele individuale sunt pierdute dar în cazul frecvenţei video constante acest lucru este nesemnificativ. Această setare este ignorată în modul Modect iar cadre individuale sunt înregistrate la apariţia unei alarme în modul Mocord." + ), + 'EVENT_IMAGE_DIGITS' => array( + 'Prompt' => "Câte cifre sunt folosite pentru numerotarea imaginilor", + 'Help' => "Imaginile capturate sunt stocate pe disc cu un index numeric. Implicit acest index are trei cifre deci numele încep cu 001, 002, etc. Această setare funcţionează în majoritatea cazurilor deoarece evenimente cu peste 999 de cadre sunt rar capturate. Oricum dacă aveţi evenimente foarte lungi puteţi mări această valoare pentru a asigura sortarea corectă a imaginilor. Atenţie, creşterea valorii pe un sistem care rulează poate avea ca efect reorganizarea incorectă a evenimentelor. Descreşterea acestei valorii nu ar trebui să aibă efecte negative." + ), +// End of Config tab + +// Beginning of Network tab + 'OPT_REMOTE_CAMERAS' => array( + 'Prompt' => "Folosiţi camere din reţea", + 'Help' => "ZoneMinder rulează atât cu camere locale, ex. cele ataşate fizic la computerul dvs. sau camere din reţea. Daca veţi folosi camere din reţea selectaţi această opţiune." + ), + 'HTTP_VERSION' => array( + 'Prompt' => "Versiunea de HTTP pe care o va folosi ZoneMinder la conectare", + 'Help' => "ZoneMinder poate comunica folosit standardele HTTP/1.0 sau HTTP/1.1. Această opţiune specifică care standard va fi folosit." + ), + 'HTTP_UA' => array( + 'Prompt' => "Cum se va identifica ZoneMinder", + 'Help' => "Când ZoneMinder comunică cu camere din reţea se va identifica folosind acest string şi versiunea. În mod normal această setare este suficientă, totuşi dacă o anume camera nu va rula numai cu un anumit browser, această opţiune se poate schimba pentru a identifica ZoneMinder ca fiind Internet Explorer, Netscape, etc." + ), + 'HTTP_TIMEOUT' => array( + 'Prompt' => "Cât aşteaptă ZoneMinder până la decizia că imaginea nu poate fi descărcată (milisecunde)", + 'Help' => "La descărcarea imaginilor remote ZoneMinder va aştepta atât timp înainte de a decide că imaginea nu poate fi descărcată şi va reîncerca. Acest timp expirat este exprimat în milisecunde şi va fi aplicat fiecărei părţi din imagine dacă imaginea nu este trimisă ca tot unitar." + ), +// End of Network tab + +// Beginning of Web tab + 'WEB_POPUP_ON_ALARM' => array( + 'Prompt' => "Fereastra monitorului deasupra tuturor ferestrelor la apariţia unei alarme", + 'Help' => "La vizionarea unui flux video 'live' puteţi specifica dacă vreţi sau nu ca fereastra monitorului să sară deasupra tuturor ferestrelor în cazul apariţiei unei alarme." + ), + 'WEB_SOUND_ON_ALARM' => array( + 'Prompt' => "Redare sunet la apariţia unei alarme", + 'Help' => "La vizionarea unui flux video 'live' puteţi specifica dacă vreţi sau nu redarea unui sunet pentru a va atenţiona de apariţia unei alarme." + ), + 'WEB_ALARM_SOUND' => array( + 'Prompt' => "Sunet de redat la alarme", + 'Help' => "Puteţi specifica un fişier audio care va fi redat în cazul unei alarme. Atât timp cât browser-ul înţelege formatul sunetul nu trebuie să fie de un anumit tip. Acest fişier trebuie pus în directorul de fişiere audio." + ), + 'WEB_COMPACT_MONTAGE' => array( + 'Prompt' => "Compactarea montajului prin omiterea detaliilor", + 'Help' => "Modul de vizualizare în montaj afişează toate monitoarele active într-o singură fereastră. Acesta include un meniu mic şi informaţiile de stare pentru fiecare. Acesta poate creşte traficul şi poate face fereastra mai mare decât dorită. Activarea acestei opţiuni omite toate informaţiile adiţionale şi afişează imaginile." + ), + 'WEB_MONTAGE_MAX_COLS' => array( + 'Prompt' => "Număr maxim de coloane de monitoare în vizualizare monataj", + 'Help' => "Vizualizarea montaj afişează imagini de la toate monitoarele. Acest parametru defineşte câte monitoare vor fi poziţionate pe ecran înainte de a trece la următorul rând. Dacă aveţi ecran foarte lat şi/sau imagini mici de la camere acesta poate avea valori mai mari." + ), + 'WEB_MONTAGE_WIDTH' => array( + 'Prompt' => "Lăţime monitor în vizualizare montaj", + 'Help' => "În modul de vizualizare montaj puteţi vizualiza toate monitoarele concomitent. Dacă au dimensiuni diferite fereastra poate apărea deformată. Setarea acestei opţiuni vă permite să mentineţi laţimea fiecărui monitor la o valoare fixă facând fereastra mai ordonată. Lasând această valoare zero permite afişarea fiecărui monitor în dimensiunea sa nativă." + ), + 'WEB_MONTAGE_HEIGHT' => array( + 'Prompt' => "Înălţime monitor în vizualizare montaj", + 'Help' => "În modul de vizualizare montaj puteţi vizualiza toate monitoarele concomitent. Dacă au dimensiuni diferite fereastra poate apărea deformată. Setarea acestei opţiuni vă permite să mentineţi înălţimea fiecărui monitor la o valoare fixă facând fereastra mai ordonată. Lasând această valoare zero permite afişarea fiecărui monitor în dimensiunea sa nativă." + ), + 'WEB_REFRESH_METHOD' => array( + 'Prompt' => "Metoda pentru actualizarea ferestrelor, alegeţi javascript sau http", + 'Help' => "Multe ferestre în JavaScript trebuie actulizate pentru a avea informaţii curente. Această opţiune determină ce metodă v-a fi folosită pentru actualizare. Dacă alegeţi 'javascript' fiecare fereastră va avea o scurtă instrucţiune JavaScript pentru actualizare. Aceasta este cea mai compatibilă metodă. Dacă alegeţi 'http' instrucţiunea de actulizare va fi în antetul HTTP. Aceasta este metoda mai curată dar actulizările sunt întrerupte sau revocate când faceţi click pe un link din fereastră." + ), + 'WEB_DOUBLE_BUFFER' => array( + 'Prompt' => "Memorie tampon dublă pentru a evita pâlpâitul imaginilor", + 'Help' => "Începând cu versiunea 1.18.0 ZoneMinder poate folosi memorie tampon dublă pentru a preîncărca imaginile înainte de a fi afişate pe ecran. Această metodă reduce pâlpâitul imaginilor. Totuşi unele dispozitive nu suportă combinaţia JavaScript/cadre necesară pentru aceasta caz în care această opţiune ar trebui dezactivată. Ținând cont că această opţiune foloseşte JavaScript va avea efect doar dacă este setată şi opţiunea ZM_WEB_REFRESH_METHOD." + ), + 'WEB_EVENTS_PER_PAGE' => array( + 'Prompt' => "Câte evenimente sunt afişate pe pagină", + 'Help' => "În modul de vizualizare al evenimentelor puteţi afişa toate evenimentele sau numai câte o pagină. Această opţiune controlează câte evenimente sunt afişate într-o pagină." + ), + 'WEB_FRAMES_PER_LINE' => array( + 'Prompt' => "Câte cadre sunt afişate pe linie", + 'Help' => "La vizualizarea cadrelor evenimentelor puteţi vizualizare cadrele individuale care compun un eveniment. Această opţiune vă permite să specificaţi câte cadre vor fi pe fiecare linie. Rezultatul acestei opţiuni şi al opţiunii următoare este numărul de cadre pe pagină." + ), + 'WEB_FRAME_LINES' => array( + 'Prompt' => "Câte linii cu cadre sunt afişate", + 'Help' => "La vizualizarea cadrelor evenimentelor puteţi vizualizare cadrele individuale care compun un eveniment. Această opţiune vă permite să specificaţi câte linii cu cadre vor fi afişate. Rezultatul acestei opţiuni şi al opţiunii precedente este numărul de cadre pe pagină." + ), + 'WEB_LIST_THUMBS' => array( + 'Prompt' => "Afişeaza miniaturi ale imaginilor în lista evenimentelor", + 'Help' => "În mod normal în lista evenimentelor sunt afişate doar detaliile textuale ale evenimentelor pentru a se economisi spaţiu şi timp. La activarea aceastei opţiuni vor fi afişate şi imagini miniaturale pentru a vă ajuta să indentificaţi evenimentele de interes. Mărimea miniaturilor este controlată de următoarele două opţiuni." + ), + 'WEB_LIST_THUMB_WIDTH' => array( + 'Prompt' => "Lăţimea miniaturilor ce apar în lista evenimentelor", + 'Help' => "Această opţiune controlează laţimea imaginilor miniaturale care apar în lista evenimentelor. Ar trebui să fie destul de mică pentru a putea fi cuprinsă în restul tabelului. Dacă doriţi puteţi specifica înălţimea din următoarea opţiune dar folosiţi doar una din cele două opţiuni cealaltă având valoarea zero. Dacă sunt specificate atât laţimea cât şi înălţimea va fi folosită doar lăţimea, înălţimea fiind ignorată." + ), + 'WEB_LIST_THUMB_HEIGHT' => array( + 'Prompt' => "Înălţimea miniaturilor ce apar în lista evenimentelor", + 'Help' => "Această opţiune controlează înălţimea imaginilor miniaturale care apar în lista evenimentelor. Ar trebui să fie destul de mică pentru a putea fi cuprinsă în restul tabelului. Dacă doriţi puteţi specifica lăţimea din opţiunea precedentă dar folosiţi doar una din cele două opţiuni cealaltă având valoarea zero. Dacă sunt specificate atât laţimea cât şi înălţimea va fi folosită doar lăţimea, înălţimea fiind ignorată." + ), +// End of Web tab + +// Beginning of Video tab + 'VIDEO_STREAM_METHOD' => array( + 'Prompt' => "Ce metodă va fi folosită pentru a trimite imaginile la browser, alegeţi 'mpeg' sau 'jpeg'", + 'Help' => "ZoneMinder poate fi configurat fie să codeze capturile în format mpeg sau într-o serie de imagini statice. Această opţiune defineşte metoda ce va fi folosită. Dacă alegeţi mpeg asiguraţi-vă că aveţi plugin-urile necesare pt browser-ul dvs. Opţiunea jpeg rulează pe instalări implicite ale browser-elor din familia Mozilla şi cu un applet Java pentru Internet Explorer." + ), + 'VIDEO_TIMED_FRAMES' => array( + 'Prompt' => "Cadrele vor avea imprimate data şi ora", + 'Help' => "Când folosiţi flux video MPEG, fie pentru flux video 'live' sau pentru evenimente, ZoneMinder poate trimite imaginile în două feluri. Dacă această opţiune este setată atunci data şi ora vor fi incluse în fluxul video. Acest lucru înseamnă că atunci când rata cadrelor variază, cum ar fi cazul unei alarme, fluxul îşi va menţine sincronizarea. Dacă această opţiune nu este activată atunci este calculată o rată aproximativă a cadrelor. Această opţiune poate fi dezactivată dacă aveţi probleme cu metoda dvs. preferată de streaming." + ), + 'VIDEO_LIVE_FORMAT' => array( + 'Prompt' => "În ce format sunt rulate fluxurile video 'live'", + 'Help' => "Când folosiţi metoda MPEG ZoneMinder poate genera secvenţe video. Formatele suportate de browser variază de la un sistem la altul. Această opţiune vă permite să specificaţi formatul video, folosind o extensie pentru fişiere, deci trebuie să introduceţi doar extensia iar restul este determinat automat. Formatul implicit 'asf' funcţionează pe Windows folosind Windows Media Player, iar pe Linux puteţi folosi gxine sau mplayer. Dacă această opţiune nu este setată atunci fluxurile video 'live' vor fi secvenţe de fişiere jpeg." + ), + 'VIDEO_REPLAY_FORMAT' => array( + 'Prompt' => "În ce format sunt redate fluxurile video", + 'Help' => "Folosind metoda MPEG ZoneMinder poate revizuliza evenimentele în format video codat. Formatele suportate de browser variază de la un sistem la altul. Această opţiune vă permite să specificaţi formatul video, folosind o extensie pentru fişiere, deci trebuie să introduceţi doar extensia iar restul este determinat automat. Formatul implicit 'asf' funcţionează pe Windows folosind Windows Media Player, iar pe Linux puteţi folosi gxine sau mplayer. Dacă această opţiune nu este setată atunci fluxurile video vor fi secvenţe de fişiere jpeg." + ), +// End of Video tab + +// Beginning or Email tab + 'OPT_EMAIL' => array( + 'Prompt' => "Trimite e-mail cu detaliile evenimentelor corespunzătoare anumitor filtre", + 'Help' => "În ZoneMinder puteţi crea filtre pentru evenimente care specifică dacă detaliile evenimentelor filtrate sub un anumit criteriu vor fi trimise prin e-mail la o adresă desemnată. Astfel veţi putea fi anunţat imediat ce apar evenimente. Această opţiune specifică dacă această funcţie este activă. E-mail-ul creat cu această opţiune poate fi de orice dimensiune şi nu este dedicat dispozitivelor mobile." + ), + 'EMAIL_ADDRESS' => array( + 'Prompt' => "E-mail-ul la care vor fi trimise detaliile evenimentelor", + 'Help' => "Această opţiune este folosită pentru a defini adresa de e-mail la care vor fi trimise evenimentele corespunzătoare filtrelor setate." + ), + 'EMAIL_TEXT' => array( + 'Prompt' => "Conţinutul e-mail-ului cu detaliile evenimentelor", + 'Help' => "Această opţiune este folosită pentru a defini conţinutul e-mail-ului trimis." + ), + 'OPT_MESSAGE' => array( + 'Prompt' => "Trimite mesaj cu detaliile evenimentelor corespunzătoare anumitor filtre (pentru dispozitive mobile) ", + 'Help' => "În ZoneMinder puteţi crea filtre pentru evenimente care specifică dacă detaliile evenimentelor filtrate sub un anumit criteriu vor fi trimise prin e-mail la o adresă desemnată. Astfel veţi putea fi anunţat imediat ce apar evenimente. Această opţiune specifică dacă această funcţie este activă. E-mail-ul creat de această opţiune va fi succint şi este dedicat trimiterii lui către un gateway SMS sau către un cititor de e-mail minimal cum ar fi un dispozitiv mobil." + ), + 'MESSAGE_ADDRESS' => array( + 'Prompt' => "E-mail-ul la care vor fi trimise detaliile evenimentelor", + 'Help' => "Această opţiune este folosită pentru a defini adresa de e-mail la care va fi trasmis mesajul." + ), + 'MESSAGE_TEXT' => array( + 'Prompt' => "Conţinutul mesajului cu detaliile evenimentelor", + 'Help' => "Această opţiune este folosită pentru a defini conţinutul mesajului trimis." + ), + 'EMAIL_METHOD' => array( + 'Prompt' => "Metoda folosită pentru trasmiterea e-mail-urilor şi mesajelor", + 'Help' => "ZoneMinder trebuie să ştie cum să trimită e-mail sau mesaj. Această opţiune specifică ce metodă va fi folosită. În general 'sendmail' va funcţiona dacă este configurat corespunzător; în caz contrat alegeţi 'smtp' şi specificaţi gazda pe care rulează smtp în următoare opţiune." + ), + 'EMAIL_HOST' => array( + 'Prompt' => "Gazda serverului SMTP", + 'Help' => "Dacă aţi ales SMTP ca metodă de transmitere a e-mail-urilor şi mesajelor atunci această opţiune va specifica serverul SMTP folosit. Setarea implicită, localhost, s-ar putea să funcţioneze dacă aveţi sendmail, exim sau un daemon similar; puteţi introduce serverul SMTP de la ISP-ul dvs., de exemplu." + ), + 'FROM_EMAIL' => array( + 'Prompt' => "E-mail-ul expeditor al notificărilor", + 'Help' => "E-mail-urile sau mesajele trimise de ZoneMinder pot avea ca e-mail expeditor o adresă desemnată pentru a vă ajuta să le identificaţi. Este recomandată o adresă de tipul ZoneMinder@domeniu.com." + ), + 'URL' => array( + 'Prompt' => "Adresa (URL) unde este instalat ZoneMinder", + 'Help' => "E-mail-urile sau mesajele care va vor fi trimise pot include un link la evenimente pentru acces rapid. Dacă doriţi să folosiţi această caracteristică atunci introduceţi adresa unde este instalat ZoneMinder, de ex. http://gazda.domeniu.com/zm.php." + ), +// End of Email tab + +// Beginning of FTP tab + 'OPT_UPLOAD' => array( + 'Prompt' => "Upload evenimente care se potrivesc filtrelor corespunzătoare.", + 'Help' => "În ZoneMinder puteţi creea filtre pentru evenimente care specifică dacă evenimentele care corespund unui anumit criteriu sa fie upload-ate pe un server remote. Această opţiune specifică dacă această funcţie să fie disponibilă." + ), + 'UPLOAD_ARCH_FORMAT' => array( + 'Prompt' => "Ce format vor avea fişierele încărcate, 'tar' sau 'zip'", + 'Help' => "Evenimentele upload-ate pot fi în format .tar. sau .zip. Pentru a folosi această opţiune trebuie să aveţi instalate modulele perl Archive::Tar şi/sau Archive::Zip." + ), + 'UPLOAD_ARCH_COMPRESS' => array( + 'Prompt' => "Comprimare fişiere arhivă", + 'Help' => "Arhivele create pot fi comprimate. în general imaginile sunt deja comprimate şi nu salvaţi prea mult spaţiu activând această opţiune. Activaţi această opţiune numai dacă aveţi resurse de irosit, spaţiu sau bandwidth limitat." + ), + 'UPLOAD_ARCH_ANALYSE' => array( + 'Prompt' => "Include analiza imaginilor în fişierele încărcate.", + 'Help' => "Arhivele create pot conţine numai cadre capturate sau cadrele capturate şi analiza imaginilor care au generat alarme. Această opţiune controlează ce pot conţine arhivele. Include-ţi analiza numai dacă aveţi conexiune rapidă la server-ul remote sau dacă aveţi nevoie de detalii despre cauza alarmei." + ), + 'UPLOAD_FTP_HOST' => array( + 'Prompt' => "Server-ul la distanţă unde se încarcă fisiere", + 'Help' => "Acesta este serverul îndepărtat unde doriţi să încărcaţi evenimentele." + ), + 'UPLOAD_FTP_USER' => array( + 'Prompt' => "Utilizator FTP", + 'Help' => "Utilizator FTP la serverul remote" + ), + 'UPLOAD_FTP_PASS' => array( + 'Prompt' => "Parola FTP", + 'Help' => "Parola FTP la serverul remote" + ), + 'UPLOAD_FTP_LOC_DIR' => array( + 'Prompt' => "Directorul în care vor fi create fişierele ce urmează încărcate", + 'Help' => "Directorul local în care vor fi create fişierele ce urmează încărcate" + ), + 'UPLOAD_FTP_REM_DIR' => array( + 'Prompt' => "Directorul remote în care se încarcă", + 'Help' => "" + ), + 'UPLOAD_FTP_TIMEOUT' => array( + 'Prompt' => "Cât timp permitem pentru transferarea fiecărui fişier.", + 'Help' => "Cât timp (în secunde) permitem pentru transferarea fiecărui fişier." + ), + 'UPLOAD_FTP_PASSIVE' => array( + 'Prompt' => "FTP in mod pasiv", + 'Help' => "Dacă computerul dvs. este în spatele unui firewall sau proxy s-ar putea să trebuiască să folosiţi FTP în mod pasiv." + ), + 'UPLOAD_FTP_DEBUG' => array( + 'Prompt' => "FTP în mod debugging", + 'Help' => "Dacă aveţi probleme cu încărcatul activaţi această opţiune, care va include informaţii suplimentare în logul zmfilter." + ), +// End of FTP tab + +// Beginning of X10 tab + 'OPT_X10' => array( + 'Prompt' => "Interacţionează cu dispozitive X10", + 'Help' => "Dacă aveţi un dispozitiv X10 puteţi seta ZoneMinder să reacţioneze la semnalele emise de dispozitivul X10 dacă computerul dvs. are controller-ul necesar. Această opţiune indică dacă opţiunile X10 vor fi disponibile sau nu. " + ), + 'X10_DEVICE' => array( + 'Prompt' => "Pe ce dispozitiv (software) este conectat dispozitivul X10", + 'Help' => "Dacă aveţi un controller X10 conectat la computerul dvs. această opţiune specifică pe ce port este conectat, valoare implicită /dev/ttyS0 reprezintă portul serial sau portul COM 1." + ), + 'X10_HOUSE_CODE' => array( + 'Prompt' => "Cod X10 folosit", + 'Help' => "Dispozitivele X10 sunt grupate indentificându-le ca aparţinând unui anumit cod al casei. Această opţiune trebuie să fie o singură literă între A si P." + ), + 'X10_DB_RELOAD_INTERVAL' => array( + 'Prompt' => "Cât de des (în secunde) daemon-ul X10 actualizează monitoare din baza de date.", + 'Help' => "Daemon-ul zmx10 verifică periodic baza de date pentru a descoperi eventualele alarme. Această opţiune determină cât de des se face verificarea." + ), +// End of FTP tab + +// Beginning of Tools tab + 'CAN_STREAM' => array( + 'Prompt' => "Înlocuieşte detectarea automată a capacităţilor de streaming ale browser-ului", + 'Help' => "Dacă ştiţi că browser-ul dvs. suportă streaming de imagini dar ZoneMinder nu detectează această opţiune corect puteţi seta această opţiune pentru a vă asigura că fluxurile sunt transmise cu sau fără folosirea Cambozola. Selecţia 'yes' v-a spune ZoneMinder-ului că broswer-ul dvs. suportă streaming nativ, 'no' înseamnă că nu suportă deci va fi folosit Cambozola iar 'auto' v-a lăsa ZoneMinder să decidă." + ), + 'RAND_STREAM' => array( + 'Prompt' => "Adaugăre string aleator pentru a preveni tamponarea fluxurilor", + 'Help' => "Unele browsere pot înregistra în memoria tampon fluxurile folosite de ZoneMinder. Pentru a preveni acest lucru se poate adaugă un string aleator pentru a face fiecare invocare a fluxului aparent unică." + ), + 'OPT_CAMBOZOLA' => array( + 'Prompt' => "Este instalat(opţional) client-ul cambozola(recomandat)", + 'Help' => "Cambozola este un Java applet care este folosit de ZoneMinder pentru a fluxurile de imagini într-un navigator ca Internet Explorer. Este recomandat să instalaţi cambozola de la http://www.charliemouse.com/code/cambozola/ Chiar dacă nu e instalat veţi putea vizualiza imagini statice la o rată mică de actulizare." + ), + 'PATH_CAMBOZOLA' => array( + 'Prompt' => "Calea web la cambozola (recomandat)", + 'Help' => "Cambozola este un Java applet care este folosit de ZoneMinder pentru a fluxurile de imagini într-un navigator ca Internet Explorer. Este recomandat să instalaţi cambozola de la http://www.charliemouse.com/code/cambozola/ Chiar dacă nu e instalat veţi putea vizualiza imagini statice la o rată mică de actulizare. Setaţi această opţiune 'camboloza.jar' dacă cambozola este instalat în acelaşi director cu fişierele web ZoneMinder. " + ), + 'OPT_MPEG' => array( + 'Prompt' => "Este instalat codor video mpeg (opţional)", + 'Help' => "ZoneMinder poate înregistra o serie de imagini în format MPEG. Această opţiune vă permite să specificaţi dacă aveţi un codor mpeg instalat. Cele două codoare suportate de ZoneMinder sunt mpeg_encode şi ffmpeg, ultimul fiind cel mai rapid. Crearea de fişiere MPEG consumă resursele procesorului şi nu este necesară deoarece evenimentele pot fi vizualizare ca flux video." + ), + 'PATH_FFMPEG' => array( + 'Prompt' => "Calea la codorul mpeg ffmpeg (opţional)", + 'Help' => "Aceasta este calea la codorul mpeg ffmpeg." + ), + 'FFMPEG_OPTIONS' => array( + 'Prompt' => "Opţiuni adiţionale pentru ffmpeg", + 'Help' => "Ffmpeg suportă multe opţiuni pentru controlul calităţii secvenţei video produse. Această opţiune vă permite să specificaţi propriile opţiuni. Citiţi documentaţia ffmpeg pentru mai multe detalii." + ), + 'OPT_NETPBM' => array( + 'Prompt' => "Sunt instalate utilitarele Netpbm (opţional)", + 'Help' => "În cazul laţimii de bandă redusă ZoneMinder va miniaturiza imaginile înainte de a le direcţiona spre browser pentru a reduce traficul. Pentru aceasta foloseşte pachetul Netpbm; această opţiune ar trebuie să direcţioneze ZoneMinder spre binarele pachetului. Dacă nu aveţi pachetul Netpbm instalat imaginilor vor fi întotdeauna trimise la scară reală şi redimensionate în browser." + ), + 'PATH_NETPBM' => array( + 'Prompt' => "Cale la utilitarele Netpbm (opţional)", + 'Help' => "Calea la utilitarele Netpbm (opţional)" + ), + 'OPT_TRIGGERS' => array( + 'Prompt' => "Interacţionează cu declanşatoare externe via socket sau fişierele dispozitivelor", + 'Help' => "ZoneMinder poate interacţiona cu sisteme externe care acţionează sau revocă o alarmă. Acest lucru este realizat prin intermediului script-ului zmtrigger.pl. Această opţiune indică folosirea declanşatoarelor externe, majoritatea vor alege nu aici." + ), + +// End of Tools tab + +// Beginning of High Banwidth tab + 'WEB_H_REFRESH_MAIN' => array( + 'Prompt' => "Cât de des (în secunde) se va actualiza fereastra principală", + 'Help' => "În fereastra principală sunt afişate starea generală şi totalul evenimentelor pentru toate monitoarele. Această sarcină nu trebuie repetată frecvent; s-ar putea să afecteze performanţa sistemului." + ), + 'WEB_H_REFRESH_CYCLE' => array( + 'Prompt' => "Cât de des (în secunde) se vor schimba imaginile în ciclul de monitorizare.", + 'Help' => "Ciclul de monitorizare este metoda de schimbare continuă a imaginilor monitoarelor. Această opţiune determină cât de des va fi actulizat cu o nouă imagine." + ), + 'WEB_H_REFRESH_IMAGE' => array( + 'Prompt' => "Cât de des (în secunde) sunt actulizate imaginile statice", + 'Help' => "Imaginile 'live' ale unui monitor pot fi vizulizate în flux de imagini (video) sau imagini statice. Această opţiune determină cât de des vor fi actualizate imaginile statice, nu are nici un efect dacă este selectată metoda flux video (streaming)." + ), + 'WEB_H_REFRESH_STATUS' => array( + 'Prompt' => "Cât de des va fi actualizat cadrul de stare", + 'Help' => "Fereastra monitorului este alcătuită din mai multe cadre. Cadrul din mijloc conţine starea monitorului şi trebuie actualizată destul de frecvent pentru a indica valori reale. Această opţiune determină frecvenţa respectivă." + ), + 'WEB_H_REFRESH_EVENTS' => array( + 'Prompt' => "Cât de des (în secunde) este actulizată lista evenimentelor din fereastra principală", + 'Help' => "Fereastra monitorului este alcătuită din mai multe cadre. Cadrul inferior conţine o listă a ultimelor evenimente pentru acces rapid. Această opţiune determină cât de des este actulizat acest cadru." + ), + 'WEB_H_DEFAULT_SCALE' => array( + 'Prompt' => "Care este scara implicită ce se aplica vizualizării 'live' sau a evenimentelor (%)", + 'Help' => "În mod normal ZoneMinder va afişa fluxurile 'live' sau evenimentele în marime nativă. Dacă aveţi monitoare de dimensiuni mari puteţi reduce această mărime, iar pentru monitoare de dimensiuni mici puteţi redimensiona în sens pozitiv această mărime. Prin intermediul acestei opţiuni puteţi specifica care va fi factorul implicit de scară. Este exprimat în procente deci 100 va fi dimensiune normală, 200 dimensiune dublă etc." + ), + 'WEB_H_DEFAULT_RATE' => array( + 'Prompt' => "Viteza de redare a evenimentelor (%)", + 'Help' => "În mod normal ZoneMinder va afişa fluxurile video la viteza lor nativă. Dacă aveţi evenimente de lungă durată este mai convenabilă redarea lor la o rată mai mare. Această opţiune vă permite sa specificaţi rata de redare. Este exprimată în procente deci 100 este rata normală, 200 este viteză dublă, etc." + ), + 'WEB_H_VIDEO_BITRATE' => array( + 'Prompt' => "Rata biţilor (bit rate) la care este codat fluxul video", + 'Help' => "La codarea secvenţelor video prin intermediul librăriei ffmpeg poate fi specificată o rată a biţilor (bit rate) care corespunde, în linii mari, lăţimii de bandă disponibilă. Această opţiune corespunde calităţii secvenţei video. O valoare mică v-a avea ca rezultat imagine incertă iar o valoare mare v-a produce o imagine mai clară. Această opţiune nu controlează frecvenţa cadrelor, deşi calitatea secvenţelor video este influenţată atât de această opţiune cât şi de frecvenţa cadrelor la care este produsă secvenţa video." + ), + 'WEB_H_VIDEO_MAXFPS' => array( + 'Prompt' => "Frecvenţa maximă a cadrelor pentru fluxurile video", + 'Help' => "La folosirea fluxurilor video factorul principal de control este rata biţilor care determină cantitatea de date care poate fi transmisă. Totuşi o rata mică la frecvenţă mare a cadrelor nu va avea rezultate calitative. Această opţiune vă permite să limitaţi frecvenţa maximă a cadrelor pentru a asigura calitatea imaginii. Un avantaj adiţional este că înregistrarea la frecvenţe mari poate consuma multe resurse fără să ofere rezultate calitative satisfăcatoare, faţă de înregistrarea unde se menajează resursele. Această opţiune este implementată ca surplus dincolo de reducţia binară. Deci dacă aveţi un dispozitiv care capturează la 15fps şi setaţi această opţiune la 10fps atunci secvenţa video nu este produsă la 10fps, ci la 7,5fps (15/2) deoarece frecvenţa finala a cadrelor trebuie să fie frecvenţa iniţiala împărţită la un număr putere a numărului 2." + ), + 'WEB_H_IMAGE_SCALING' => array( + 'Prompt' => "Scala miniaturilor în evenimente, bandwidth vs. cpu pentru rescalare", + 'Help' =>"Valoare 1 v-a transmite la browser imaginea completă care va fi redimensionata în fereastră, valori mai mari vor micşora imaginea înainte de a transmite o imagine miniaturală la browser. Pentru laţime de bandă mare setare implicită 1 este de obicei cea mai rapidă şi nu produce imagini miniaturale externe." + ), +// End of High Banwidth tab + +// Beginning of Medium Bandwidth tab + 'WEB_M_REFRESH_MAIN' => array( + 'Prompt' => "Cât de des (în secunde) se va actualiza fereastra principală", + 'Help' => "În fereastra principală sunt afişate starea generală şi totalul evenimentelor pentru toate monitoarele. Această sarcină nu trebuie repetată frecvent; s-ar putea să afecteze performanţa sistemului." + ), + 'WEB_M_REFRESH_CYCLE' => array( + 'Prompt' => "Cât de des (în secunde) se vor schimba imaginile în ciclul de monitorizare.", + 'Help' => "Ciclul de monitorizare este metoda de schimbare continuă a imaginilor monitoarelor. Această opţiune determină cât de des va fi actulizat cu o nouă imagine." + ), + 'WEB_M_REFRESH_IMAGE' => array( + 'Prompt' => "Cât de des (în secunde) sunt actulizate imaginile statice", + 'Help' => "Imaginile 'live' ale unui monitor pot fi vizulizate în flux de imagini (video) sau imagini statice. Această opţiune determină cât de des vor fi actualizate imaginile statice, nu are nici un efect dacă este selectată metoda flux video (streaming)." + ), + 'WEB_M_REFRESH_STATUS' => array( + 'Prompt' => "Cât de des va fi actualizat cadrul de stare", + 'Help' => "Fereastra monitorului este alcătuită din mai multe cadre. Cadrul din mijloc conţine starea monitorului şi trebuie actualizată destul de frecvent pentru a indica valori reale. Această opţiune determină frecvenţa respectivă." + ), + 'WEB_M_REFRESH_EVENTS' => array( + 'Prompt' => "Cât de des (în secunde) este actulizată lista evenimentelor din fereastra principală", + 'Help' => "Fereastra monitorului este alcătuită din mai multe cadre. Cadrul inferior conţine o listă a ultimelor evenimente pentru acces rapid. Această opţiune determină cât de des este actulizat acest cadru." + ), + 'WEB_M_DEFAULT_SCALE' => array( + 'Prompt' => "Care este scara implicită ce se aplica vizualizării 'live' sau a evenimentelor (%)", + 'Help' => "În mod normal ZoneMinder va afişa fluxurile 'live' sau evenimentele în marime nativă. Dacă aveţi monitoare de dimensiuni mari puteţi reduce această mărime, iar pentru monitoare de dimensiuni mici puteţi redimensiona în sens pozitiv această mărime. Prin intermediul acestei opţiuni puteţi specifica care va fi factorul implicit de scară. Este exprimat în procente deci 100 va fi dimensiune normală, 200 dimensiune dublă etc." + ), + 'WEB_M_DEFAULT_RATE' => array( + 'Prompt' => "Viteza de redare a evenimentelor (%)", + 'Help' => "În mod normal ZoneMinder va afişa fluxurile video la viteza lor nativă. Dacă aveţi evenimente de lungă durată este mai convenabilă redarea lor la o rată mai mare. Această opţiune vă permite sa specificaţi rata de redare. Este exprimată în procente deci 100 este rata normală, 200 este viteză dublă, etc." + ), + 'WEB_M_VIDEO_BITRATE' => array( + 'Prompt' => "Rata biţilor (bit rate) la care este codat fluxul video", + 'Help' => "La codarea secvenţelor video prin intermediul librăriei ffmpeg poate fi specificată o rată a biţilor (bit rate) care corespunde, în linii mari, lăţimii de bandă disponibilă. Această opţiune corespunde calităţii secvenţei video. O valoare mică v-a avea ca rezultat imagine incertă iar o valoare mare v-a produce o imagine mai clară. Această opţiune nu controlează frecvenţa cadrelor, deşi calitatea secvenţelor video este influenţată atât de această opţiune cât şi de frecvenţa cadrelor la care este produsă secvenţa video." + ), + 'WEB_M_VIDEO_MAXFPS' => array( + 'Prompt' => "Frecvenţa maximă a cadrelor pentru fluxurile video", + 'Help' => "La folosirea fluxurilor video factorul principal de control este rata biţilor care determină cantitatea de date care poate fi transmisă. Totuşi o rata mică la frecvenţă mare a cadrelor nu va avea rezultate calitative. Această opţiune vă permite să limitaţi frecvenţa maximă a cadrelor pentru a asigura calitatea imaginii. Un avantaj adiţional este că înregistrarea la frecvenţe mari poate consuma multe resurse fără să ofere rezultate calitative satisfăcatoare, faţă de înregistrarea unde se menajează resursele. Această opţiune este implementată ca surplus dincolo de reducţia binară. Deci dacă aveţi un dispozitiv care capturează la 15fps şi setaţi această opţiune la 10fps atunci secvenţa video nu este produsă la 10fps, ci la 7,5fps (15/2) deoarece frecvenţa finala a cadrelor trebuie să fie frecvenţa iniţiala împărţită la un număr putere a numărului 2." + ), + 'WEB_M_IMAGE_SCALING' => array( + 'Prompt' => "Scala miniaturilor în evenimente, bandwidth vs. cpu pentru rescalare", + 'Help' => "Valoare 1 v-a transmite la browser imaginea completă care va fi redimensionata în fereastră, valori mai mari vor micşora imaginea înainte de a transmite o imagine miniaturală la browser. Pentru laţime de bandă medie setare implicită 4 este de obicei cea mai rapidă dar e posibil ca şi valoare 1 să fie acceptabilă" + ), +// End of Medium Bandwidth tab + +// Beginning of Low Bandwidth tab + 'WEB_L_REFRESH_MAIN' => array( + 'Prompt' => "Cât de des (în secunde) se va actualiza fereastra principală", + 'Help' => "În fereastra principală sunt afişate starea generală şi totalul evenimentelor pentru toate monitoarele. Această sarcină nu trebuie repetată frecvent; s-ar putea să afecteze performanţa sistemului." + ), + 'WEB_L_REFRESH_CYCLE' => array( + 'Prompt' => "Cât de des (în secunde) se vor schimba imaginile în ciclul de monitorizare.", + 'Help' => "Ciclul de monitorizare este metoda de schimbare continuă a imaginilor monitoarelor. Această opţiune determină cât de des va fi actulizat cu o nouă imagine." + ), + 'WEB_L_REFRESH_IMAGE' => array( + 'Prompt' => "Cât de des (în secunde) sunt actulizate imaginile statice", + 'Help' => "Imaginile 'live' ale unui monitor pot fi vizulizate în flux de imagini (video) sau imagini statice. Această opţiune determină cât de des vor fi actualizate imaginile statice, nu are nici un efect dacă este selectată metoda flux video (streaming)." + ), + 'WEB_L_REFRESH_STATUS' => array( + 'Prompt' => "Cât de des va fi actualizat cadrul de stare", + 'Help' => "Fereastra monitorului este alcătuită din mai multe cadre. Cadrul din mijloc conţine starea monitorului şi trebuie actualizată destul de frecvent pentru a indica valori reale. Această opţiune determină frecvenţa respectivă." + ), + 'WEB_L_REFRESH_EVENTS' => array( + 'Prompt' => "Cât de des (în secunde) este actulizată lista evenimentelor din fereastra principală", + 'Help' => "Fereastra monitorului este alcătuită din mai multe cadre. Cadrul inferior conţine o listă a ultimelor evenimente pentru acces rapid. Această opţiune determină cât de des este actulizat acest cadru." + ), + 'WEB_L_DEFAULT_SCALE' => array( + 'Prompt' => "Care este scara implicită ce se aplica vizualizării 'live' sau a evenimentelor (%)", + 'Help' => "În mod normal ZoneMinder va afişa fluxurile 'live' sau evenimentele în marime nativă. Dacă aveţi monitoare de dimensiuni mari puteţi reduce această mărime, iar pentru monitoare de dimensiuni mici puteţi redimensiona în sens pozitiv această mărime. Prin intermediul acestei opţiuni puteţi specifica care va fi factorul implicit de scară. Este exprimat în procente deci 100 va fi dimensiune normală, 200 dimensiune dublă etc." + ), + 'WEB_L_DEFAULT_RATE' => array( + 'Prompt' => "Viteza de redare a evenimentelor (%)", + 'Help' => "În mod normal ZoneMinder va afişa fluxurile video la viteza lor nativă. Dacă aveţi evenimente de lungă durată este mai convenabilă redarea lor la o rată mai mare. Această opţiune vă permite sa specificaţi rata de redare. Este exprimată în procente deci 100 este rata normală, 200 este viteză dublă, etc." + ), + 'WEB_L_VIDEO_BITRATE' => array( + 'Prompt' => "Rata biţilor (bit rate) la care este codat fluxul video", + 'Help' => "La codarea secvenţelor video prin intermediul librăriei ffmpeg poate fi specificată o rată a biţilor (bit rate) care corespunde, în linii mari, lăţimii de bandă disponibilă. Această opţiune corespunde calităţii secvenţei video. O valoare mică v-a avea ca rezultat imagine incertă iar o valoare mare v-a produce o imagine mai clară. Această opţiune nu controlează frecvenţa cadrelor, deşi calitatea secvenţelor video este influenţată atât de această opţiune cât şi de frecvenţa cadrelor la care este produsă secvenţa video." + ), + 'WEB_L_VIDEO_MAXFPS' => array( + 'Prompt' => "Frecvenţa maximă a cadrelor pentru fluxurile video", + 'Help' => "La folosirea fluxurilor video factorul principal de control este rata biţilor care determină cantitatea de date care poate fi transmisă. Totuşi o rata mică la frecvenţă mare a cadrelor nu va avea rezultate calitative. Această opţiune vă permite să limitaţi frecvenţa maximă a cadrelor pentru a asigura calitatea imaginii. Un avantaj adiţional este că înregistrarea la frecvenţe mari poate consuma multe resurse fără să ofere rezultate calitative satisfăcatoare, faţă de înregistrarea unde se menajează resursele. Această opţiune este implementată ca surplus dincolo de reducţia binară. Deci dacă aveţi un dispozitiv care capturează la 15fps şi setaţi această opţiune la 10fps atunci secvenţa video nu este produsă la 10fps, ci la 7,5fps (15/2) deoarece frecvenţa finala a cadrelor trebuie să fie frecvenţa iniţiala împărţită la un număr putere a numărului 2." + ), + 'WEB_L_IMAGE_SCALING' => array( + 'Prompt' => "Scala miniaturilor în evenimente, bandwidth vs. cpu pentru rescalare", + 'Help' => "Valoare 1 v-a transmite la browser imaginea completă care va fi redimensionata în fereastră, valori mai mari vor micşora imaginea înainte de a transmite o imagine miniaturală la browser. Pentru laţime de bandă redusă setare implicită 4 este de obicei cea mai rapidă." + ), +// End of Low Bandwidth tab + +// Beginning of Phone Bandwidth tab + 'WEB_P_REFRESH_MAIN' => array( + 'Prompt' => "Cât de des (în secunde) se va actualiza fereastra principală", + 'Help' => "În fereastra principală sunt afişate starea generală şi totalul evenimentelor pentru toate monitoarele. Această sarcină nu trebuie repetată frecvent; s-ar putea să afecteze performanţa sistemului." + ), + 'WEB_P_REFRESH_IMAGE' => array( + 'Prompt' => "Cât de des (în secunde) se vor schimba imaginile în ciclul de monitorizare.", + 'Help' => "Ciclul de monitorizare este metoda de schimbare continuă a imaginilor monitoarelor. Această opţiune determină cât de des va fi actulizat cu o nouă imagine." + ), +// End of Phone Bandwidth tab +// +); +?> diff --git a/web/lang/ru_ru.php b/web/lang/ru_ru.php index 1f7e55f52..dea0f5505 100644 --- a/web/lang/ru_ru.php +++ b/web/lang/ru_ru.php @@ -264,6 +264,7 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'äÌÉÔÅÌØÎÏÓÔØ', @@ -527,6 +528,7 @@ $SLANG = array( 'Play' => 'Play', 'PlayAll' => 'Play All', 'PleaseWait' => 'ðÏÖÁÌÕÊÓÔÁ ÐÏÄÏÖÄÉÔÅ', + 'Plugins' => 'Plugins', 'Point' => 'Point', 'PostEventImageBuffer' => 'âÕÆÅÒ ÐÏÓÌÅ ÓÏÂÙÔÉÑ', 'PreEventImageBuffer' => 'âÕÆÅÒ ÄÏ ÓÏÂÙÔÉÑ', @@ -652,6 +654,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'ïÂÎÏ×ÌÅÎÉÅ ÎÅ ÔÒÅÂÕÅÔÓÑ', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'éÓÐÏÌØÚÏ×ÁÔØ ÆÉÌØÔÒ', 'UseFilterExprsPost' => ' ×ÙÒÁÖÅÎÉÊ ÄÌÑ ÆÉÌØÔÒÁ', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'éÓÐÏÌ. ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/ru_ru.php.orig b/web/lang/ru_ru.php.orig new file mode 100644 index 000000000..1f7e55f52 --- /dev/null +++ b/web/lang/ru_ru.php.orig @@ -0,0 +1,845 @@ + '24 ÂÉÔÎÙÊ Ã×ÅÔ', + '32BitColour' => '32 ÂÉÔÎÙÊ Ã×ÅÔ', // Added - 2011-06-15 + '8BitGrey' => '256 ÏÔÔÅÎËÏ× ÓÅÒÏÇÏ', + 'Action' => 'Action', + 'Actual' => 'äÅÊÓÔ×ÉÔÅÌØÎÙÊ', + 'AddNewControl' => 'Add New Control', + 'AddNewMonitor' => 'äÏÂÁ×ÉÔØ ÍÏÎÉÔÏÒ', + 'AddNewUser' => 'äÏÂÁ×ÉÔØ ÐÏÌØÚÏ×ÁÔÅÌÑ', + 'AddNewZone' => 'äÏÂÁ×ÉÔØ ÚÏÎÕ', + 'Alarm' => 'ôÒÅ×ÏÇÁ', + 'AlarmBrFrames' => 'ëÁÄÒÙ
ÔÒÅ×ÏÇÉ', + 'AlarmFrame' => 'ëÁÄÒ ÔÒÅ×ÏÇÉ', + 'AlarmFrameCount' => 'Alarm Frame Count', + 'AlarmLimits' => 'çÒÁÎ. ÚÏÎÙ ÔÒÅ×.', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'ðËÓ ÔÒÅ×.', + 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'Alert' => 'îÁÓÔÏÒÏÖÅ', + 'All' => '÷ÓÅ', + 'Apply' => 'ðÒÉÍÅÎÉÔØ', + 'ApplyingStateChange' => 'óÏÓÔÏÑÎÉÅ ÓÅÒ×ÉÓÁ ÉÚÍÅÎÑÅÔÓÑ', + 'ArchArchived' => 'ôÏÌØËÏ × ÁÒÈÉ×Å', + 'ArchUnarchived' => 'ôÏÌØËÏ ÎÅ × ÁÒÈÉ×Å', + 'Archive' => 'áÒÈÉ×', + 'Archived' => 'Archived', + 'Area' => 'Area', + 'AreaUnits' => 'Area (px/%)', + 'AttrAlarmFrames' => 'ëÏÌ-×Ï ËÁÄÒÏ× ÔÒÅ×ÏÇÉ', + 'AttrArchiveStatus' => 'óÔÁÔÕÓ ÁÒÈÉ×ÁÃÉÉ', + 'AttrAvgScore' => 'óÒÅÄ. ÏÃÅÎËÁ', + 'AttrCause' => 'Cause', + 'AttrDate' => 'äÁÔÁ', + 'AttrDateTime' => 'äÁÔÁ/÷ÒÅÍÑ', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Percent', + 'AttrDuration' => 'äÌÉÔÅÌØÎÏÓÔØ', + 'AttrFrames' => 'ëÏÌ-×Ï ËÁÄÒÏ×', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'íÁËÓ. ÏÃÅÎËÁ', + 'AttrMonitorId' => 'Id íÏÎÉÔÏÒÁ', + 'AttrMonitorName' => 'îÁÚ×ÁÎÉÅ íÏÎÉÔÏÒÁ', + 'AttrName' => 'Name', + 'AttrNotes' => 'Notes', + 'AttrSystemLoad' => 'System Load', + 'AttrTime' => '÷ÒÅÍÑ', + 'AttrTotalScore' => 'óÕÍÍ. ÏÃÅÎËÁ', + 'AttrWeekday' => 'äÅÎØ ÎÅÄÅÌÉ', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'óÒÅÄ.
ÏÃÅÎËÁ', + 'Background' => 'Background', + 'BackgroundFilter' => 'Run filter in background', + 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', + 'BadChannel' => 'Channel must be set to an integer of zero or more', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Device must be set to a valid value', + 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', + 'BadFormat' => 'Format must be set to an integer of zero or more', + 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', + 'BadHeight' => 'Height must be set to a valid value', + 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', + 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', + 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', + 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', + 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Path must be set to a valid value', + 'BadPort' => 'Port must be set to a valid number', + 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', + 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', + 'BadSectionLength' => 'Section length must be an integer of 30 or more', + 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', + 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', + 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', + 'BadWebColour' => 'Web colour must be a valid web colour string', + 'BadWidth' => 'Width must be set to a valid value', + 'Bandwidth' => 'ËÁÎÁÌ', + 'BlobPx' => 'ðËÓ ÏÂßÅËÔÁ', + 'BlobSizes' => 'òÁÚÍÅÒ ÏÂßÅËÔÏ×', + 'Blobs' => 'ëÏÌ-×Ï ÏÂßÅËÔÏ×', + 'Brightness' => 'ñÒËÏÓÔØ', + 'Buffers' => 'âÕÆÅÒÙ', + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'CanFocus' => 'Can Focus', + 'CanFocusAbs' => 'Can Focus Absolute', + 'CanFocusCon' => 'Can Focus Continuous', + 'CanFocusRel' => 'Can Focus Relative', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absolute', + 'CanGainCon' => 'Can Gain Continuous', + 'CanGainRel' => 'Can Gain Relative', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absolute', + 'CanIrisCon' => 'Can Iris Continuous', + 'CanIrisRel' => 'Can Iris Relative', + 'CanMove' => 'Can Move', + 'CanMoveAbs' => 'Can Move Absolute', + 'CanMoveCon' => 'Can Move Continuous', + 'CanMoveDiag' => 'Can Move Diagonally', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relative', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absolute', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continuous', + 'CanWhiteRel' => 'Can White Bal. Relative', + 'CanZoom' => 'Can Zoom', + 'CanZoomAbs' => 'Can Zoom Absolute', + 'CanZoomCon' => 'Can Zoom Continuous', + 'CanZoomRel' => 'Can Zoom Relative', + 'Cancel' => 'ïÔÍÅÎÉÔØ', + 'CancelForcedAlarm' => 'ïÔÍÅÎÉÔØ ÆÏÒÓÉÒÏ×ÁÎÎÕÀ ÔÒÅ×ÏÇÕ', + 'CaptureHeight' => 'òÁÚÍÅÒ ÐÏ Y', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'òÅÖÉÍ ÚÁÈ×ÁÔÁ', + 'CaptureWidth' => 'òÁÚÍÅÒ ÐÏ X', + 'Cause' => 'Cause', + 'CheckMethod' => 'íÅÔÏÄ ÐÒÏ×ÅÒËÉ ÔÒÅ×ÏÇÉ', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => '÷ÙÂÒÁÔØ ÆÉÌØÔÒ', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Choose Preset', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'úÁËÒÙÔØ', + 'Colour' => 'ã×ÅÔ', + 'Command' => 'Command', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Config', + 'ConfiguredFor' => 'îÁÓÔÒÏÅÎ ÎÁ', + 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', + 'ConfirmPassword' => 'ðÏÄÔ×ÅÒÄÉÔÅ ÐÁÒÏÌØ', + 'ConjAnd' => 'É', + 'ConjOr' => 'ÉÌÉ', + 'Console' => 'óÅÒ×ÅÒ', + 'ContactAdmin' => 'ðÏÖÁÌÕÊÓÔÁ ÏÂÒÁÔÉÔÅÓØ Ë ×ÁÛÅÍÕ ÁÄÍÉÎÉÓÔÒÁÔÏÒÕ.', + 'Continue' => 'Continue', + 'Contrast' => 'ëÏÎÔÒÁÓÔ', + 'Control' => 'Control', + 'ControlAddress' => 'Control Address', + 'ControlCap' => 'Control Capability', + 'ControlCaps' => 'Control Capabilities', + 'ControlDevice' => 'Control Device', + 'ControlType' => 'Control Type', + 'Controllable' => 'Controllable', + 'Cycle' => 'Cycle', + 'CycleWatch' => 'ãÉËÌÉÞÅÓËÉÊ ÐÒÏÓÍÏÔÒ', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'äÅÎØ', + 'Debug' => 'Debug', + 'DefaultRate' => 'Default Rate', + 'DefaultScale' => 'Default Scale', + 'DefaultView' => 'Default View', + 'Delete' => 'õÄÁÌÉÔØ', + 'DeleteAndNext' => 'õÄÁÌÉÔØ & ÓÌÅÄ.', + 'DeleteAndPrev' => 'õÄÁÌÉÔØ & ÐÒÅÄ.', + 'DeleteSavedFilter' => 'õÄÁÌÉÔØ ÓÏÈÒÁÎÅÎÎÙÊ ÆÉÌØÔÒ', + 'Description' => 'ïÐÉÓÁÎÉÅ', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'ëÁÎÁÌ', + 'DeviceFormat' => 'æÏÒÍÁÔ', + 'DeviceNumber' => 'îÏÍÅÒ ÕÓÔÒÏÊÓÔ×Á', + 'DevicePath' => 'Device Path', + 'Devices' => 'Devices', + 'Dimensions' => 'òÁÚÍÅÒÙ', + 'DisableAlarms' => 'Disable Alarms', + 'Disk' => 'Disk', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Please Donate', + 'DonateAlready' => 'No, I\'ve already donated', + 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', + 'DonateRemindDay' => 'Not yet, remind again in 1 day', + 'DonateRemindHour' => 'Not yet, remind again in 1 hour', + 'DonateRemindMonth' => 'Not yet, remind again in 1 month', + 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', + 'DonateRemindWeek' => 'Not yet, remind again in 1 week', + 'DonateYes' => 'Yes, I\'d like to donate now', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'äÌÉÔÅÌØÎÏÓÔØ', + 'Edit' => 'òÅÄÁËÔÉÒÏ×ÁÎÉÅ', + 'Email' => 'Email', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'ÒÁÚÒÅÛÅÎ', + 'EnterNewFilterName' => '÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÎÁÚ×ÁÎÉÅ ÆÉÌØÔÒÁ', + 'Error' => 'ïÛÉÂËÁ', + 'ErrorBrackets' => 'ïÛÉÂËÁ: ËÏÌÉÞÅÓÔ×Ï ÏÔËÒÙ×ÁÀÝÉÈ É ÚÁËÒÙ×ÁÀÝÉÈ ÓËÏÂÏË ÄÏÌÖÎÏ ÂÙÔØ ÏÄÉÎÁËÏ×ÙÍ', + 'ErrorValidValue' => 'ïÛÉÂËÁ: ÐÒÏ×ÅÒØÔÅ ÞÔÏ ×ÓÅ ÔÅÒÍÙ ÉÍÅÀÔ ÄÅÊÓÔ×ÉÔÅÌØÎÏÅ ÚÎÁÞÅÎÉÅ', + 'Etc' => 'É Ô.Ä.', + 'Event' => 'óÏÂÙÔÉÅ', + 'EventFilter' => 'æÉÌØÔÒ ÓÏÂÙÔÉÊ', + 'EventId' => 'Event Id', + 'EventName' => 'Event Name', + 'EventPrefix' => 'Event Prefix', + 'Events' => 'óÏÂÙÔÉÑ', + 'Exclude' => 'éÓËÌÀÞÉÔØ', + 'Execute' => 'Execute', + 'Export' => 'Export', + 'ExportDetails' => 'Export Event Details', + 'ExportFailed' => 'Export Failed', + 'ExportFormat' => 'Export File Format', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Export Frame Details', + 'ExportImageFiles' => 'Export Image Files', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Export Other Files (if present)', + 'ExportOptions' => 'Export Options', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Export Video Files (if present)', + 'Exporting' => 'Exporting', + 'FPS' => 'Ë/c', + 'FPSReportInterval' => 'ðÅÒÉÏÄ ÏÂÎÏ×ÌÅÎÉÑ ÉÎÄÉËÁÃÉÉ ÓËÏÒÏÓÔÉ', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Feed', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'File', + 'FilterArchiveEvents' => 'Archive all matches', + 'FilterDeleteEvents' => 'Delete all matches', + 'FilterEmailEvents' => 'Email details of all matches', + 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterMessageEvents' => 'Message details of all matches', + 'FilterPx' => 'ðËÓ ÆÉÌØÔÒÁ', + 'FilterUnset' => 'You must specify a filter width and height', + 'FilterUploadEvents' => 'Upload all matches', + 'FilterVideoEvents' => 'Create video for all matches', + 'Filters' => 'Filters', + 'First' => 'ðÅÒ×ÙÊ', + 'FlippedHori' => 'Flipped Horizontally', + 'FlippedVert' => 'Flipped Vertically', + 'Focus' => 'Focus', + 'ForceAlarm' => '÷ËÌÀÞÉÔØ ÔÒÅ×ÏÇÕ', + 'Format' => 'Format', + 'Frame' => 'ëÁÄÒ', + 'FrameId' => 'Id ËÁÄÒÁ', + 'FrameRate' => 'óËÏÒÏÓÔØ', + 'FrameSkip' => 'ðÒÏÐÕÓËÁÔØ ËÁÄÒÙ', + 'Frames' => 'ËÁÄÒÙ', + 'Func' => 'æÕÎË.', + 'Function' => 'æÕÎËÃÉÑ', + 'Gain' => 'Gain', + 'General' => 'General', + 'GenerateVideo' => 'çÅÎÅÒÉÒÏ×ÁÔØ ×ÉÄÅÏ', + 'GeneratingVideo' => 'çÅÎÅÒÉÒÕÅÔÓÑ ×ÉÄÅÏ', + 'GoToZoneMinder' => 'ðÅÒÅÊÔÉ ÎÁ ZoneMinder.com', + 'Grey' => 'Þ/Â', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'HasFocusSpeed' => 'Has Focus Speed', + 'HasGainSpeed' => 'Has Gain Speed', + 'HasHomePreset' => 'Has Home Preset', + 'HasIrisSpeed' => 'Has Iris Speed', + 'HasPanSpeed' => 'Has Pan Speed', + 'HasPresets' => 'Has Presets', + 'HasTiltSpeed' => 'Has Tilt Speed', + 'HasTurboPan' => 'Has Turbo Pan', + 'HasTurboTilt' => 'Has Turbo Tilt', + 'HasWhiteSpeed' => 'Has White Bal. Speed', + 'HasZoomSpeed' => 'Has Zoom Speed', + 'High' => 'ÛÉÒÏËÉÊ', + 'HighBW' => 'ûÉÒÏËÉÊ ËÁÎÁÌ', + 'Home' => 'Home', + 'Hour' => 'þÁÓ', + 'Hue' => 'ïÔÔÅÎÏË', + 'Id' => 'Id', + 'Idle' => 'Idle', + 'Ignore' => 'éÇÎÏÒÉÒÏ×ÁÔØ', + 'Image' => 'éÚÏÂÒÁÖÅÎÉÅ', + 'ImageBufferSize' => 'òÁÚÍÅÒ ÂÕÆÅÒÁ ÉÚÏÂÒÁÖÅÎÉÑ', + 'Images' => 'Images', + 'In' => 'In', + 'Include' => '÷ËÌÀÞÉÔØ', + 'Inverted' => 'éÎ×ÅÒÔÉÒÏ×ÁÔØ', + 'Iris' => 'Iris', + 'KeyString' => 'Key String', + 'Label' => 'Label', + 'Language' => 'ñÚÙË', + 'Last' => 'ðÏÓÌÅÄÎÉÊ', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Linked Monitors', + 'List' => 'List', + 'Load' => 'Load', + 'Local' => 'ìÏËÁÌØÎÙÊ', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'ðÏÌØÚÏ×ÁÔÅÌØ', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => '÷ÈÏÄ × ÓÉÓÔÅÍÕ', + 'Login' => '÷ÏÊÔÉ', + 'Logout' => '÷ÙÊÔÉ', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'ÕÚËÉÊ', + 'LowBW' => 'õÚËÉÊ ËÁÎÁÌ', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Manual', + 'Mark' => 'íÅÔËÁ', + 'Max' => 'íÁËÓ.', + 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBrScore' => 'íÁËÓ.
ÏÃÅÎËÁ', + 'MaxFocusRange' => 'Max Focus Range', + 'MaxFocusSpeed' => 'Max Focus Speed', + 'MaxFocusStep' => 'Max Focus Step', + 'MaxGainRange' => 'Max Gain Range', + 'MaxGainSpeed' => 'Max Gain Speed', + 'MaxGainStep' => 'Max Gain Step', + 'MaxIrisRange' => 'Max Iris Range', + 'MaxIrisSpeed' => 'Max Iris Speed', + 'MaxIrisStep' => 'Max Iris Step', + 'MaxPanRange' => 'Max Pan Range', + 'MaxPanSpeed' => 'Max Pan Speed', + 'MaxPanStep' => 'Max Pan Step', + 'MaxTiltRange' => 'Max Tilt Range', + 'MaxTiltSpeed' => 'Max Tilt Speed', + 'MaxTiltStep' => 'Max Tilt Step', + 'MaxWhiteRange' => 'Max White Bal. Range', + 'MaxWhiteSpeed' => 'Max White Bal. Speed', + 'MaxWhiteStep' => 'Max White Bal. Step', + 'MaxZoomRange' => 'Max Zoom Range', + 'MaxZoomSpeed' => 'Max Zoom Speed', + 'MaxZoomStep' => 'Max Zoom Step', + 'MaximumFPS' => 'ïÇÒÁÎÉÞÅÎÉÅ ÓËÏÒÏÓÔÉ ÚÁÐÉÓÉ (Ë/Ó)', + 'Medium' => 'ÓÒÅÄÎÉÊ', + 'MediumBW' => 'ïÂÙÞÎÙÊ ËÁÎÁÌ', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', + 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', + 'MinBlobAreaLtMax' => 'íÉÎÉÍÁÌØÎÁÑ ÐÌÏÝÁÄØ ÏÂßÅËÔÁ ÄÏÌÖÎÁ ÂÙÔØ ÍÅÎØÛÅ ÞÅÍ ÍÁËÓÉÍÁÌØÎÁÑ ÐÌÏÝÁÄØ ÏÂßÅËÔÁ', + 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', + 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', + 'MinBlobsLtMax' => 'íÉÎÉÍÁÌØÎÏÅ ÞÉÓÌÏ ÏÂßÅËÔÏ× ÄÏÌÖÎÏ ÂÙÔØ ÍÅÎØÛÅ ÞÅÍ ÍÁËÓÉÍÁÌØÎÏÅ ÞÉÓÌÏ ÏÂßÅËÔÏ×', + 'MinBlobsUnset' => 'You must specify the minimum blob count', + 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', + 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', + 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', + 'MinFocusRange' => 'Min Focus Range', + 'MinFocusSpeed' => 'Min Focus Speed', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Range', + 'MinGainSpeed' => 'Min Gain Speed', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Range', + 'MinIrisSpeed' => 'Min Iris Speed', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Pan Range', + 'MinPanSpeed' => 'Min Pan Speed', + 'MinPanStep' => 'Min Pan Step', + 'MinPixelThresLtMax' => 'îÉÖÎÉÊ ÐÏÒÏÇ ËÏÌ-×Á ÐÉËÓÅÌÅÊ ÄÏÌÖÅÎ ÂÙÔØ ÎÉÖÅ ×ÅÒÈÎÅÇÏ ÐÏÒÏÇÁ ËÏÌ-×Á ÐÉËÓÅÌÅÊ', + 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', + 'MinTiltRange' => 'Min Tilt Range', + 'MinTiltSpeed' => 'Min Tilt Speed', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Range', + 'MinWhiteSpeed' => 'Min White Bal. Speed', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Range', + 'MinZoomSpeed' => 'Min Zoom Speed', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'òÁÚÎÏÅ', + 'Monitor' => 'íÏÎÉÔÏÒ', + 'MonitorIds' => 'Id íÏÎÉÔÏÒÏ×', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'íÏÎÉÔÏÒÙ', + 'Montage' => 'Montage', + 'Month' => 'íÅÓÑÃ', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Move', + 'MustBeGe' => 'ÄÏÌÖÎÏ ÂÙÔØ ÂÏÌØÛÅ ÉÌÉ ÒÁ×ÎÏ', + 'MustBeLe' => 'ÄÏÌÖÎÏ ÂÙÔØ ÍÅÎØÛÅ ÉÌÉ ÒÁ×ÎÏ', + 'MustConfirmPassword' => '÷Ù ÄÏÌÖÎÙ ÐÏÄÔ×ÅÒÄÉÔØ ÐÁÒÏÌØ', + 'MustSupplyPassword' => '÷Ù ÄÏÌÖÎÙ ××ÅÓÔÉ ÐÁÒÏÌØ', + 'MustSupplyUsername' => '÷Ù ÄÏÌÖÎÙ ××ÅÓÔÉ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ', + 'Name' => 'éÍÑ', + 'Near' => 'Near', + 'Network' => 'óÅÔØ', + 'New' => 'îÏ×.', + 'NewGroup' => 'New Group', + 'NewLabel' => 'New Label', + 'NewPassword' => 'îÏ×ÙÊ ÐÁÒÏÌØ', + 'NewState' => 'îÏ×ÏÅ ÓÏÓÔÏÑÎÉÅ', + 'NewUser' => 'îÏ×ÙÊ ÐÏÌØÚÏ×ÁÔÅÌØ', + 'Next' => 'óÌÅÄ.', + 'No' => 'îÅÔ', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'üÔÏ ÓÏÂÙÔÉÅ ÎÅ ÓÏÄÅÖÉÔ ËÁÄÒÏ×', + 'NoGroup' => 'No Group', + 'NoSavedFilters' => 'ÎÅÔ ÓÏÈÒÁÎÅÎÎÙÈ ÆÉÌØÔÒÏ×', + 'NoStatisticsRecorded' => 'óÔÁÔÉÓÔÉËÁ ÐÏ ÜÔÏÍÕ ÓÏÂÙÔÉÀ/ËÁÄÒÕ ÎÅ ÚÁÐÉÓÁÎÁ', + 'None' => 'ÏÔÓÕÔÓÔ×ÕÅÔ', + 'NoneAvailable' => 'ÎÅ ÄÏÓÔÕÐÎÙ', + 'Normal' => 'îÏÒÍÁÌØÎÁÑ', + 'Notes' => 'Notes', + 'NumPresets' => 'Num Presets', + 'Off' => 'Off', + 'On' => 'On', + 'OpEq' => 'ÒÁ×ÎÏ', + 'OpGt' => 'ÂÏÌØÛÅ', + 'OpGtEq' => 'ÂÏÌØÛÅ ÌÉÂÏ ÒÁ×ÎÏ', + 'OpIn' => '× ÓÐÉÓËÅ', + 'OpLt' => 'ÍÅÎØÛÅ', + 'OpLtEq' => 'ÍÅÎØÛÅ ÉÌÉ ÒÁ×ÎÏ', + 'OpMatches' => 'ÓÏ×ÐÁÄÁÅÔ', + 'OpNe' => 'ÎÅ ÒÁ×ÎÏ', + 'OpNotIn' => 'ÎÅ × ÓÐÉÓËÅ', + 'OpNotMatches' => 'ÎÅ ÓÏ×ÐÁÄÁÅÔ', + 'Open' => 'Open', + 'OptionHelp' => 'OptionHelp', + 'OptionRestartWarning' => 'üÔÉ ÉÚÍÅÎÅÎÉÑ ÐÏÄÅÊÓÔ×ÕÀÔ ÔÏÌØËÏ ÐÏÓÌÅ ÐÅÒÅÚÁÐÕÓËÁ ÐÒÏÇÒÁÍÍÙ.', + 'Options' => 'ïÐÃÉÉ', + 'OrEnterNewName' => 'ÉÌÉ ××ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ', + 'Order' => 'Order', + 'Orientation' => 'ïÒÉÅÎÔÁÃÉÑ', + 'Out' => 'Out', + 'OverwriteExisting' => 'ðÅÒÅÚÁÐÉÓÁÔØ ÓÕÝÅÓÔ×ÕÀÝÅÅ', + 'Paged' => 'ðÏ ÓÔÒÁÎÉÃÁÍ', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Left', + 'PanRight' => 'Pan Right', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'ðÁÒÁÍÅÒ', + 'Password' => 'ðÁÒÏÌØ', + 'PasswordsDifferent' => 'ðÁÒÏÌÉ ÎÅ ÓÏ×ÐÁÄÁÀÔ', + 'Paths' => 'ðÕÔÉ', + 'Pause' => 'Pause', + 'Phone' => 'Phone', + 'PhoneBW' => 'ôÅÌÅÆÏÎÎÁÑ ÌÉÎÉÑ', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => '× ÐÉËÓÅÌÑÈ', + 'Play' => 'Play', + 'PlayAll' => 'Play All', + 'PleaseWait' => 'ðÏÖÁÌÕÊÓÔÁ ÐÏÄÏÖÄÉÔÅ', + 'Point' => 'Point', + 'PostEventImageBuffer' => 'âÕÆÅÒ ÐÏÓÌÅ ÓÏÂÙÔÉÑ', + 'PreEventImageBuffer' => 'âÕÆÅÒ ÄÏ ÓÏÂÙÔÉÑ', + 'PreserveAspect' => 'Preserve Aspect Ratio', + 'Preset' => 'Preset', + 'Presets' => 'Presets', + 'Prev' => 'ðÒÅÄ.', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protocol', + 'Rate' => 'óËÏÒÏÓÔØ', + 'Real' => 'òÅÁÌØÎÁÑ', + 'Record' => 'Record', + 'RefImageBlendPct' => 'ðÒÏÚÒÁÞÎÏÓÔØ ÏÐÏÒÎÏÇÏ ËÁÄÒÁ, %', + 'Refresh' => 'ïÂÎÏ×ÉÔØ', + 'Remote' => 'õÄÁÌÅÎÎÙÊ', + 'RemoteHostName' => 'éÍÑ ÕÄÁÌÅÎÎÏÇÏ ÈÏÓÔÁ', + 'RemoteHostPath' => 'ðÕÔØ ÎÁ ÕÄÁÌÅÎÎÏÍ ÈÏÓÔÅ', + 'RemoteHostPort' => 'ÕÄÁÌÅÎÎÙÊ ÐÏÒÔ', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'ã×ÅÔÎÏÓÔØ ÎÁ ÕÄÁÌÅÎÎÏÍ ÈÏÓÔÅ', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'ðÅÒÅÉÍÅÎÏ×ÁÔØ', + 'Replay' => 'Replay', + 'ReplayAll' => 'All Events', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Single Event', + 'Reset' => 'Reset', + 'ResetEventCounts' => 'ïÂÎÕÌÉÔØ ÓÞÅÔÞÉË ÓÏÂÙÔÉÊ', + 'Restart' => 'ðÅÒÅÚÁÐÕÓÔÉÔØ', + 'Restarting' => 'ðÅÒÅÚÁÐÕÓËÁÅÔÓÑ', + 'RestrictedCameraIds' => 'Id ÚÁÐÒÅÝÅÎÎÙÈ ËÁÍÅÒ', + 'RestrictedMonitors' => 'Restricted Monitors', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Location', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'ðÏ×ÅÒÎÕÔØ ×ÌÅ×Ï', + 'RotateRight' => 'ðÏ×ÅÒÎÕÔØ ×ÐÒÁ×Ï', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'òÅÖÉÍ ÒÁÂÏÔÙ', + 'RunState' => 'óÏÓÔÏÑÎÉÅ', + 'Running' => '÷ÙÐÏÌÎÑÅÔÓÑ', + 'Save' => 'óÏÈÒÁÎÉÔØ', + 'SaveAs' => 'óÏÈÒÁÎÉÔØ ËÁË', + 'SaveFilter' => 'óÏÈÒÁÎÉÔØ ÆÉÌØÔÒ', + 'Scale' => 'íÁÓÛÔÁÂ', + 'Score' => 'ïÃÅÎËÁ', + 'Secs' => 'óÅË.', + 'Sectionlength' => 'äÌÉÎÁ ÓÅËÃÉÉ (× ËÁÄÒÁÈ)', + 'Select' => 'Select', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Select Monitors', + 'SelfIntersecting' => 'Polygon edges must not intersect', + 'Set' => 'Set', + 'SetNewBandwidth' => 'õÓÔÁÎÏ×ËÁ ÎÏ×ÏÊ ÛÉÒÉÎÁ ËÁÎÁÌÁ', + 'SetPreset' => 'Set Preset', + 'Settings' => 'îÁÓÔÒÏÊËÉ', + 'ShowFilterWindow' => 'ðÏËÁÚÁÔØ ÏËÎÏ ÆÉÌØÔÒÁ', + 'ShowTimeline' => 'Show Timeline', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Size', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Sleep', + 'SortAsc' => 'Asc', + 'SortBy' => 'Sort by', + 'SortDesc' => 'Desc', + 'Source' => 'éÓÔÏÞÎÉË', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'ôÉÐ ÉÓÔÏÞÎÉËÁ', + 'Speed' => 'Speed', + 'SpeedHigh' => 'High Speed', + 'SpeedLow' => 'Low Speed', + 'SpeedMedium' => 'Medium Speed', + 'SpeedTurbo' => 'Turbo Speed', + 'Start' => 'úÁÐÕÓÔÉÔØ', + 'State' => 'óÏÓÔÏÑÎÉÅ', + 'Stats' => 'óÔÁÔÉÓÔÉËÁ', + 'Status' => 'óÔÁÔÕÓ', + 'Step' => 'Step', + 'StepBack' => 'Step Back', + 'StepForward' => 'Step Forward', + 'StepLarge' => 'Large Step', + 'StepMedium' => 'Medium Step', + 'StepNone' => 'No Step', + 'StepSmall' => 'Small Step', + 'Stills' => 'óÔÏÐ-ËÁÄÒÙ', + 'Stop' => 'ïÓÔÁÎÏ×ÉÔØ', + 'Stopped' => 'ïÓÔÁÎÏ×ÌÅÎ', + 'Stream' => 'ðÏÔÏË', + 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'Submit' => 'Submit', + 'System' => 'óÉÓÔÅÍÁ', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => '÷ÒÅÍÑ', + 'TimeDelta' => 'ïÔÎÏÓÉÔÅÌØÎÏÅ ×ÒÅÍÑ', + 'TimeStamp' => 'íÅÔËÁ ×ÒÅÍÅÎÉ', + 'Timeline' => 'Timeline', + 'Timestamp' => 'íÅÔËÁ ×ÒÅÍÅÎÉ', + 'TimestampLabelFormat' => 'æÏÒÍÁÔ ÍÅÔËÉ', + 'TimestampLabelX' => 'X-ËÏÏÒÄÉÎÁÔÁ ÍÅÔËÉ', + 'TimestampLabelY' => 'Y-ËÏÏÒÄÉÎÁÔÁ ÍÅÔËÉ', + 'Today' => 'Today', + 'Tools' => 'éÎÓÔÒÕÍÅÎÔÙ', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'óÕÍÍ.
ÏÃÅÎËÁ', + 'TrackDelay' => 'Track Delay', + 'TrackMotion' => 'Track Motion', + 'Triggers' => 'ôÒÉÇÇÅÒÙ', + 'TurboPanSpeed' => 'Turbo Pan Speed', + 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'Type' => 'ôÉÐ', + 'Unarchive' => 'õÄ. ÉÚ ÁÒÈÉ×Á', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'åÄ. ÉÚÍÅÒÅÎÉÑ', + 'Unknown' => 'Unknown', + 'Update' => 'Update', + 'UpdateAvailable' => 'äÏÓÔÕÐÎÏ ÏÂÎÏ×ÌÅÎÉÅ ZoneMinder', + 'UpdateNotNecessary' => 'ïÂÎÏ×ÌÅÎÉÅ ÎÅ ÔÒÅÂÕÅÔÓÑ', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'éÓÐÏÌØÚÏ×ÁÔØ ÆÉÌØÔÒ', + 'UseFilterExprsPost' => ' ×ÙÒÁÖÅÎÉÊ ÄÌÑ ÆÉÌØÔÒÁ', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'éÓÐÏÌ. ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'ðÏÌØÚÏ×ÁÔÅÌØ', + 'Username' => 'éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ', + 'Users' => 'ðÏÌØÚÏ×ÁÔÅÌÉ', + 'Value' => 'úÎÁÞÅÎÉÅ', + 'Version' => '÷ÅÒÓÉÑ', + 'VersionIgnore' => 'éÇÎÏÒÉÒÏ×ÁÔØ ÜÔÕ ×ÅÒÓÉÀ', + 'VersionRemindDay' => 'îÁÐÏÍÎÉÔØ ÞÅÒÅÚ ÄÅÎØ', + 'VersionRemindHour' => 'îÁÐÏÍÎÉÔØ ÞÅÒÅÚ ÞÁÓ', + 'VersionRemindNever' => 'îÅ ÇÏ×ÏÒÉÔØ Ï ÎÏ×ÙÈ ×ÅÒÓÉÑÈ', + 'VersionRemindWeek' => 'îÁÐÏÍÎÉÔØ ÞÅÒÅÚ ÎÅÄÅÌÀ', + 'Video' => '÷ÉÄÅÏ', + 'VideoFormat' => 'Video Format', + 'VideoGenFailed' => 'ïÛÉÂËÁ ÇÅÎÅÒÁÃÉÉ ×ÉÄÅÏ!', + 'VideoGenFiles' => 'Existing Video Files', + 'VideoGenNoFiles' => 'No Video Files Found', + 'VideoGenParms' => 'ðÁÒÁÍÅÔÒÙ ÇÅÎÅÒÁÃÉÉ ×ÉÄÅÏ', + 'VideoGenSucceeded' => 'Video Generation Succeeded!', + 'VideoSize' => 'òÁÚÍÅÒ ÉÚÏÂÒÁÖÅÎÉÑ', + 'View' => 'ðÒÏÓÍÏÔÒ', + 'ViewAll' => 'ðÒÏÓÍ. ×ÓÅ', + 'ViewEvent' => 'View Event', + 'ViewPaged' => 'ðÒÏÓÍ. ÐÏÓÔÒÁÎÉÞÎÏ', + 'Wake' => 'Wake', + 'WarmupFrames' => 'ëÁÄÒÙ ÒÁÚÏÇÒÅ×Á', + 'Watch' => 'Watch', + 'Web' => 'éÎÔÅÒÆÅÊÓ', + 'WebColour' => 'Web Colour', + 'Week' => 'îÅÄÅÌÑ', + 'White' => 'White', + 'WhiteBalance' => 'White Balance', + 'Wide' => 'Wide', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 Activation String', + 'X10InputAlarmString' => 'X10 Input Alarm String', + 'X10OutputAlarmString' => 'X10 Output Alarm String', + 'Y' => 'Y', + 'Yes' => 'äÁ', + 'YouNoPerms' => 'õ ×ÁÓ ÎÅ ÄÏÓÔÁÔÏÞÎÏ ÐÒÁ× ÄÌÑ ÄÏÓÔÕÐÁ Ë ÜÔÏÍÕ ÒÅÓÕÒÓÕ.', + 'Zone' => 'úÏÎÁ', + 'ZoneAlarmColour' => 'ã×ÅÔ ÔÒÅ×ÏÇÉ (Red/Green/Blue)', + 'ZoneArea' => 'Zone Area', + 'ZoneFilterSize' => 'Filter Width/Height (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'úÏÎÙ', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Out', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'ôÅËÕÝÉÊ ÐÏÌØÚÏ×ÁÔÅÌØ: \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'ðÏÓÌÅÄÎÉÅ %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'ðÏÓÌÅÄÎÑÑ ×ÅÒÓÉÑ: v%1$s, Õ ÷ÁÓ ÕÓÔÁÎÏ×ÌÅÎÁ: v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'æÕÎËÃÉÑ ÍÏÎÉÔÏÒÁ %1$s', + 'RunningRecentVer' => 'õ ×ÁÓ ÕÓÔÁÎÏ×ÌÅÎÁ ÎÏ×ÅÊÛÁÑ ×ÅÒÓÉÑ ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// --> actually, if written in 'translit', or russian words in english letters, +// the example would be ( 1=>"Kartoshek", 2=>"Katroshka", 3=>"Kartoshki"); :) +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 1=>'óÏÂÙÔÉÊ', 2=>'óÏÂÙÔÉÅ', 3=>'óÏÂÙÔÉÑ' ), + 'Monitor' => array( 1=>'íÏÎÉÔÏÒÏ×', 2=>'íÏÎÉÔÏÒ', 3=>'íÏÎÉÔÏÒÁ' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +/*function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +}*/ + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +function zmVlang( $langVarArray, $count ) +{ + $secondlastdigit = ($count/10)%10; + $lastdigit = $count%10; + + // Get rid of the special cases first, the teens + if ( $secondlastdigit == 1 && $lastdigit != 0 ) + { + return( $langVarArray[1] ); + } + switch ( $lastdigit ) + { + case 0 : + case 5 : + case 6 : + case 7 : + case 8 : + case 9 : + { + return( $langVarArray[1] ); + break; + } + case 1 : + { + return( $langVarArray[2] ); + break; + } + case 2 : + case 3 : + case 4 : + { + return( $langVarArray[3] ); + break; + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/se_se.php b/web/lang/se_se.php index f3a65c75a..59e5de4ca 100644 --- a/web/lang/se_se.php +++ b/web/lang/se_se.php @@ -265,6 +265,7 @@ $SLANG = array( 'DonateRemindNever' => 'Nej, Jag vill inte donera, påminn mig inte mer', 'DonateRemindWeek' => 'Inte än, påminn om 1 vecka', 'DonateYes' => 'Ja, jag vill gärna donera nu', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Ladda ner', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Längd', @@ -528,6 +529,7 @@ $SLANG = array( 'Play' => 'Spela', 'PlayAll' => 'Visa alla', 'PleaseWait' => 'Vänta...', + 'Plugins' => 'Plugins', 'Point' => 'Punkt', 'PostEventImageBuffer' => 'Post Event Image Count', 'PreEventImageBuffer' => 'Pre Event Image Count', @@ -653,6 +655,7 @@ $SLANG = array( 'UpdateNotNecessary' => 'Ingen uppdatering behövs.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 + 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Använd filter', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Använd ', // This is used at the beginning of the phrase 'use N filter expressions' diff --git a/web/lang/se_se.php.orig b/web/lang/se_se.php.orig new file mode 100644 index 000000000..f3a65c75a --- /dev/null +++ b/web/lang/se_se.php.orig @@ -0,0 +1,846 @@ + '24 bitars färg', + '32BitColour' => '32 bitars färg', // Added - 2011-06-15 + '8BitGrey' => '8 bit gråskala', + 'Action' => 'Action', + 'Actual' => 'Verklig', + 'AddNewControl' => 'Ny kontroll', + 'AddNewMonitor' => 'Ny bevakare', + 'AddNewUser' => 'Ny användare', + 'AddNewZone' => 'Ny zon', + 'Alarm' => 'Larm', + 'AlarmBrFrames' => 'Larm
ramar', + 'AlarmFrame' => 'Larmram', + 'AlarmFrameCount' => 'Larmramsräknare', + 'AlarmLimits' => 'Larmgränser', + 'AlarmMaximumFPS' => 'Max. ramar/s för larm', + 'AlarmPx' => 'Larmpunkter', + 'AlarmRGBUnset' => 'Du måste sätta en färg för RGB-larm', + 'Alert' => 'Varning', + 'All' => 'Alla', + 'Apply' => 'Lägg till', + 'ApplyingStateChange' => 'Aktivera statusändring', + 'ArchArchived' => 'Arkivera endast', + 'ArchUnarchived' => 'Endast ej arkiverade', + 'Archive' => 'Arkiv', + 'Archived' => 'Arkiverad', + 'Area' => 'Område', + 'AreaUnits' => 'Område (px/%)', + 'AttrAlarmFrames' => 'Larmramar', + 'AttrArchiveStatus' => 'Arkivstatus', + 'AttrAvgScore' => 'Ung. värde', + 'AttrCause' => 'Orsak', + 'AttrDate' => 'Datum', + 'AttrDateTime' => 'Datum/Tid', + 'AttrDiskBlocks' => 'Diskblock', + 'AttrDiskPercent' => 'Diskprocent', + 'AttrDuration' => 'Längd', + 'AttrFrames' => 'Ramar', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Max. värde', + 'AttrMonitorId' => 'Bevakningsid', + 'AttrMonitorName' => 'Bevakningsnamn', + 'AttrName' => 'Namn', + 'AttrNotes' => 'Notering', + 'AttrSystemLoad' => 'Systemlast', + 'AttrTime' => 'Tid', + 'AttrTotalScore' => 'Totalvärde', + 'AttrWeekday' => 'Veckodag', + 'Auto' => 'Automatik', + 'AutoStopTimeout' => 'Tidsutlösning för automatstop', + 'Available' => 'Available', // Added - 2009-03-31 + 'AvgBrScore' => 'Ung.
träff', + 'Background' => 'Bakgrund', + 'BackgroundFilter' => 'Kör filter i bakgrunden', + 'BadAlarmFrameCount' => 'Ramantalet för larm måste vara ett heltal, minsta värdet är 1', + 'BadAlarmMaxFPS' => 'Larm för bilder/s måste vara ett positivt heltal eller ett flyttal', + 'BadChannel' => 'Kanalen måste vara ett heltal, noll eller högre', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 + 'BadDevice' => 'Enheten måste sättas till ett giltigt värde', + 'BadFPSReportInterval' => 'Buffern för ramintervallrapporten måste vara ett heltal på minst 0 eller högre', + 'BadFormat' => 'Formatet måste vara ett heltal, noll eller högre', + 'BadFrameSkip' => 'Värdet för ramöverhopp måste vara ett heltal på 0 eller högre', + 'BadHeight' => 'Höjden måste sättas till ett giltigt värde', + 'BadHost' => 'Detta fält ska innehålla en giltig ip-adress eller värdnamn, inkludera inte http://', + 'BadImageBufferCount' => 'Bufferstorleken för avbilden måste vara ett heltal på minst 10 eller högre', + 'BadLabelX' => 'Etiketten för X koordinaten måste sättas till ett heltal, 0 eller högre', + 'BadLabelY' => 'Etiketten för Y koordinaten måste sättas till ett heltal, 0 eller högre', + 'BadMaxFPS' => 'Max. ramar/s måste vara ett positivt heltal eller ett flyttal', + 'BadNameChars' => 'Namn kan endast innehålla alfanumeriska tecken, bindestreck och understreck', + 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 + 'BadPath' => 'Sökvägen måste innehålla ett giltigt värde', + 'BadPort' => 'Porten måste innehålla ett giltigt nummer', + 'BadPostEventCount' => 'Räknaren för efterhändelsen måste vara ett heltal på 0 eller högre', + 'BadPreEventCount' => 'Räknaren för för-händelsen måste vara ett heltal på 0 eller högre, och mindre än bufferstorleken på avbilden', + 'BadRefBlendPerc' => 'Mixprocenten för referensen måste hara ett positivt heltal', + 'BadSectionLength' => 'Sektionslängden måste vara ett heltal på minst 30 eller högre', + 'BadSignalCheckColour' => 'Kontrollfärgen på signalen måste vara en giltig RGB färgsträng', + 'BadStreamReplayBuffer'=> 'Buffern för strömmande uppspelning måste vara ett heltal på 0 eller högre', + 'BadWarmupCount' => 'Uppvärmingsramen måste vara ett heltal på 0 eller högre', + 'BadWebColour' => 'Webbfärgen måste vara en giltig sträng för webbfärg', + 'BadWidth' => 'Bredden måste sättas til ett giltigt värde', + 'Bandwidth' => 'Bandbredd', + 'BlobPx' => 'Blob Px', + 'BlobSizes' => 'Blobstorlek', + 'Blobs' => 'Blobbar', + 'Brightness' => 'Ljusstyrka', + 'Buffers' => 'Buffrar', + 'CanAutoFocus' => 'Har autofokus', + 'CanAutoGain' => 'Har autonivå', + 'CanAutoIris' => 'Har autoiris', + 'CanAutoWhite' => 'Har autovitbalans.', + 'CanAutoZoom' => 'Har autozoom', + 'CanFocus' => 'Har fokus', + 'CanFocusAbs' => 'Har absolut fokus', + 'CanFocusCon' => 'Har kontinuerlig fokus', + 'CanFocusRel' => 'Har relativ fokus', + 'CanGain' => 'Har nivå', + 'CanGainAbs' => 'Har absolut nivå', + 'CanGainCon' => 'Har kontinuerlig nivå', + 'CanGainRel' => 'Har relativ nivå', + 'CanIris' => 'Har iris', + 'CanIrisAbs' => 'Har absolut iris', + 'CanIrisCon' => 'Har kontinuerlig iris', + 'CanIrisRel' => 'Har relativ iris', + 'CanMove' => 'Har förflyttning', + 'CanMoveAbs' => 'Har absolut förflyttning', + 'CanMoveCon' => 'Har kontinuerlig förflyttning', + 'CanMoveDiag' => 'Har diagonal förflyttning', + 'CanMoveMap' => 'Har mappad förflyttning', + 'CanMoveRel' => 'Har relativ förflyttning', + 'CanPan' => 'Har panorering', + 'CanReset' => 'Har återställning', + 'CanSetPresets' => 'Har förinställningar', + 'CanSleep' => 'Kan vila', + 'CanTilt' => 'Kan tilta', + 'CanWake' => 'Kan vakna', + 'CanWhite' => 'Kan vitbalansera', + 'CanWhiteAbs' => 'Har absolut vitbalans', + 'CanWhiteBal' => 'Kan vitbalans', + 'CanWhiteCon' => 'Kan kontinuerligt vitbalansera', + 'CanWhiteRel' => 'Kan relativt vitbalansera', + 'CanZoom' => 'Kan zooma', + 'CanZoomAbs' => 'Kan zooma absolut', + 'CanZoomCon' => 'Kan zooma kontinuerligt', + 'CanZoomRel' => 'Kan zooma realativt', + 'Cancel' => 'Ångra', + 'CancelForcedAlarm' => 'Ångra tvingande larm', + 'CaptureHeight' => 'Fångsthöjd', + 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 + 'CapturePalette' => 'Fångstpalett', + 'CaptureWidth' => 'Fångstbredd', + 'Cause' => 'Orsak', + 'CheckMethod' => 'Larmkontrollmetod', + 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Välj filter', + 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 + 'ChoosePreset' => 'Välj standard', + 'Clear' => 'Clear', // Added - 2011-06-16 + 'Close' => 'Stäng', + 'Colour' => 'Färg', + 'Command' => 'Kommando', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Konfigurera', + 'ConfiguredFor' => 'Konfigurerad för', + 'ConfirmDeleteEvents' => 'Är du säker på att du vill ta bort dom valda händelserna?', + 'ConfirmPassword' => 'Bekräfta lösenord', + 'ConjAnd' => 'och', + 'ConjOr' => 'eller', + 'Console' => 'Konsoll', + 'ContactAdmin' => 'Kontakta din administratör för detaljer.', + 'Continue' => 'Fortsätt', + 'Contrast' => 'Kontrast', + 'Control' => 'Kontroll', + 'ControlAddress' => 'Kontrolladress', + 'ControlCap' => 'Kontrollförmåga', + 'ControlCaps' => 'Kontrollförmågor', + 'ControlDevice' => 'Kontrollenhet', + 'ControlType' => 'Kontrolltyp', + 'Controllable' => 'Kontrollerbar', + 'Cycle' => 'Period', + 'CycleWatch' => 'Cycle Watch', + 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'Day' => 'Dag', + 'Debug' => 'Avlusa', + 'DefaultRate' => 'Standardhastighet', + 'DefaultScale' => 'Standardskala', + 'DefaultView' => 'Standardvy', + 'Delete' => 'Radera', + 'DeleteAndNext' => 'Radera & Nästa', + 'DeleteAndPrev' => 'Radera & Föreg.', + 'DeleteSavedFilter' => 'Radera sparade filter', + 'Description' => 'Beskrivning', + 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'Device' => 'Device', // Added - 2009-02-08 + 'DeviceChannel' => 'Enhetskanal', + 'DeviceFormat' => 'Enhetsformat', + 'DeviceNumber' => 'Enhetsnummer', + 'DevicePath' => 'Enhetssökväg', + 'Devices' => 'Enheter', + 'Dimensions' => 'Dimensioner', + 'DisableAlarms' => 'Avaktivera larm', + 'Disk' => 'Disk', + 'Display' => 'Display', // Added - 2011-01-30 + 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Donate' => 'Var vänlig och donera', + 'DonateAlready' => 'Nej, Jag har redan donerat', + 'DonateEnticement' => 'Du har kört ZoneMinder ett tag nu och förhoppningsvis har du sett att det fungerar bra hemma eller på ditt företag. Även om ZoneMinder är, och kommer att vara, fri programvara och öppen kallkod, så kostar det pengar att utveckla och underhålla. Om du vill hjälpa till med framtida utveckling och nya funktioner så var vanlig och bidrag med en slant. Bidragen är naturligtvis en option men mycket uppskattade och du kan bidra med precis hur mycket du vill.

Om du vill ge ett bidrag väljer du nedan eller surfar till http://www.zoneminder.com/donate.html.

Tack för att du använder ZoneMinder, glöm inte att besöka forumen på ZoneMinder.com för support och förslag om hur du får din ZoneMinder att fungera lite bättre.', + 'DonateRemindDay' => 'Inte än, påminn om 1 dag', + 'DonateRemindHour' => 'Inte än, påminn om en 1 timme', + 'DonateRemindMonth' => 'Inte än, påminn om 1 månad', + 'DonateRemindNever' => 'Nej, Jag vill inte donera, påminn mig inte mer', + 'DonateRemindWeek' => 'Inte än, påminn om 1 vecka', + 'DonateYes' => 'Ja, jag vill gärna donera nu', + 'Download' => 'Ladda ner', + 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'Duration' => 'Längd', + 'Edit' => 'Redigera', + 'Email' => 'E-post', + 'EnableAlarms' => 'Aktivera larm', + 'Enabled' => 'Aktiverad', + 'EnterNewFilterName' => 'Mata in nytt filternamn', + 'Error' => 'Fel', + 'ErrorBrackets' => 'Fel, kontrollera att du har samma antal vänster som höger-hakar', + 'ErrorValidValue' => 'Fel, kontrollera att alla parametrar har giltligt värde', + 'Etc' => 'etc', + 'Event' => 'Händelse', + 'EventFilter' => 'Händelsefilter', + 'EventId' => 'Händelse nr', + 'EventName' => 'Händelsenamn', + 'EventPrefix' => 'Händelseprefix', + 'Events' => 'Händelser', + 'Exclude' => 'Exkludera', + 'Execute' => 'Utför', + 'Export' => 'Exportera', + 'ExportDetails' => 'Exportera händelsedetaljer', + 'ExportFailed' => 'Exporten misslyckades', + 'ExportFormat' => 'Filformat för exporter', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Exportera ramdetaljer', + 'ExportImageFiles' => 'Exportera bildfiler', + 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Exportera andra filer (om dom finns)', + 'ExportOptions' => 'Konfiguera export', + 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Exportera videofiler (om dom finns)', + 'Exporting' => 'Exporterar', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS rapportintervall', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Fast Forward', + 'Feed' => 'Matning', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'Fil', + 'FilterArchiveEvents' => 'Arkivera alla träffar', + 'FilterDeleteEvents' => 'Radera alla träffar', + 'FilterEmailEvents' => 'Skicka e-post med detaljer om alla träffar', + 'FilterExecuteEvents' => 'Utför kommando på alla träffar', + 'FilterMessageEvents' => 'Meddela detaljer om alla träffar', + 'FilterPx' => 'Filter Px', + 'FilterUnset' => 'Du måste specificera filtrets bredd och höjd', + 'FilterUploadEvents' => 'Ladda upp alla träffar', + 'FilterVideoEvents' => 'Skapa video för alla träffar', + 'Filters' => 'Filter', + 'First' => 'Först', + 'FlippedHori' => 'Vänd horisontellt', + 'FlippedVert' => 'Vänd vertikalt', + 'Focus' => 'Fokus', + 'ForceAlarm' => 'Tvinga larm', + 'Format' => 'Format', + 'Frame' => 'Ram', + 'FrameId' => 'Ram id', + 'FrameRate' => 'Ram hastighet', + 'FrameSkip' => 'Hoppa över ram', + 'Frames' => 'Ramar', + 'Func' => 'Funk', + 'Function' => 'Funktion', + 'Gain' => 'Nivå', + 'General' => 'Generell', + 'GenerateVideo' => 'Skapa video', + 'GeneratingVideo' => 'Skapar video', + 'GoToZoneMinder' => 'Gå till ZoneMinder.com', + 'Grey' => 'Grå', + 'Group' => 'Grupp', + 'Groups' => 'Grupper', + 'HasFocusSpeed' => 'Har focushastighet', + 'HasGainSpeed' => 'Har nivåhastighet', + 'HasHomePreset' => 'Har normalinställning', + 'HasIrisSpeed' => 'Har irishastighet', + 'HasPanSpeed' => 'Har panoramahastighet', + 'HasPresets' => 'Har förinställningar', + 'HasTiltSpeed' => 'Har tilthastighet', + 'HasTurboPan' => 'Har turbopanorering', + 'HasTurboTilt' => 'Har turbotilt', + 'HasWhiteSpeed' => 'Har vitbalanshastighet', + 'HasZoomSpeed' => 'Har Zoomhastighet', + 'High' => 'Hög', + 'HighBW' => 'Hög bandbredd', + 'Home' => 'Hem', + 'Hour' => 'Timme', + 'Hue' => 'Hue', + 'Id' => 'nr', + 'Idle' => 'Vila', + 'Ignore' => 'Ignorera', + 'Image' => 'Bild', + 'ImageBufferSize' => 'Bildbufferstorlek (ramar)', + 'Images' => 'Images', + 'In' => 'I', + 'Include' => 'Inkludera', + 'Inverted' => 'Inverterad', + 'Iris' => 'Iris', + 'KeyString' => 'Nyckelsträng', + 'Label' => 'Etikett', + 'Language' => 'Språk', + 'Last' => 'Sist', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Level', // Added - 2011-06-16 + 'LimitResultsPost' => 'resultaten;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Begränsa till första', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Line', // Added - 2011-06-16 + 'LinkedMonitors' => 'Länkade övervakare', + 'List' => 'Lista', + 'Load' => 'Belastning', + 'Local' => 'Lokal', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Inloggad som', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Loggar in', + 'Login' => 'Logga in', + 'Logout' => 'Logga ut', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Låg', + 'LowBW' => 'Låg bandbredd', + 'Main' => 'Huvudmeny', + 'Man' => 'Man', + 'Manual' => 'Manuell', + 'Mark' => 'Markera', + 'Max' => 'Max', + 'MaxBandwidth' => 'Max bandbredd', + 'MaxBrScore' => 'Max.
Score', + 'MaxFocusRange' => 'Max fokusområde', + 'MaxFocusSpeed' => 'Max fokushastighet', + 'MaxFocusStep' => 'Max fokussteg', + 'MaxGainRange' => 'Max nivåområde', + 'MaxGainSpeed' => 'Max nivåhastighet', + 'MaxGainStep' => 'Max nivåsteg', + 'MaxIrisRange' => 'Max irsiområde', + 'MaxIrisSpeed' => 'Max irishastighet', + 'MaxIrisStep' => 'Max irissteg', + 'MaxPanRange' => 'Max panoramaområde', + 'MaxPanSpeed' => 'Max panoramahastighet', + 'MaxPanStep' => 'Max panoramasteg', + 'MaxTiltRange' => 'Max tiltområde', + 'MaxTiltSpeed' => 'Max tilthastighet', + 'MaxTiltStep' => 'Max tiltsteg', + 'MaxWhiteRange' => 'Max vitbalansområde', + 'MaxWhiteSpeed' => 'Max vitbalanshastighet', + 'MaxWhiteStep' => 'Max vitbalanssteg', + 'MaxZoomRange' => 'Max zoomområde', + 'MaxZoomSpeed' => 'Max zoomhastighet', + 'MaxZoomStep' => 'Max zoomsteg', + 'MaximumFPS' => 'Max ramar/s', + 'Medium' => 'Mellan', + 'MediumBW' => 'Mellan bandbredd', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minsta larmarean skall vara mindre än största', + 'MinAlarmAreaUnset' => 'Du måste ange minsta antal larmbildpunkter', + 'MinBlobAreaLtMax' => 'Minsta blobarean skall vara mindre än högsta', + 'MinBlobAreaUnset' => 'Du måste ange minsta antalet blobpixlar', + 'MinBlobLtMinFilter' => 'Minsta blobarean skall vara mindre än eller lika med minsta filterarean', + 'MinBlobsLtMax' => 'Minsta antalet blobbar skall vara mindre än största', + 'MinBlobsUnset' => 'Du måste ange minsta antalet blobbar', + 'MinFilterAreaLtMax' => 'Minsta filterarean skall vara mindre än högsta', + 'MinFilterAreaUnset' => 'Du måste ange minsta antal filterbildpunkter', + 'MinFilterLtMinAlarm' => 'Minsta filterarean skall vara mindre än eller lika med minsta larmarean', + 'MinFocusRange' => 'Min fokusområde', + 'MinFocusSpeed' => 'Min fokushastighet', + 'MinFocusStep' => 'Min fokussteg', + 'MinGainRange' => 'Min nivåområde', + 'MinGainSpeed' => 'Min nivåhastighet', + 'MinGainStep' => 'Min nivåsteg', + 'MinIrisRange' => 'Min irisområde', + 'MinIrisSpeed' => 'Min irishastighet', + 'MinIrisStep' => 'Min irissteg', + 'MinPanRange' => 'Min panoramaområde', + 'MinPanSpeed' => 'Min panoramahastighet', + 'MinPanStep' => 'Min panoramasteg', + 'MinPixelThresLtMax' => 'Minsta tröskelvärde för bildpunkter ska vara mindre än högsta', + 'MinPixelThresUnset' => 'Du måste ange minsta tröskelvärde för bildpunkter', + 'MinTiltRange' => 'Min tiltområde', + 'MinTiltSpeed' => 'Min tilthastighet', + 'MinTiltStep' => 'Min tiltsteg', + 'MinWhiteRange' => 'Min vitbalansområde', + 'MinWhiteSpeed' => 'Min vitbalanshastighet', + 'MinWhiteStep' => 'Min vitbalanssteg', + 'MinZoomRange' => 'Min zoomområde', + 'MinZoomSpeed' => 'Min zoomhastighet', + 'MinZoomStep' => 'Min zoomsteg', + 'Misc' => 'Övrigt', + 'Monitor' => 'Bevakning', + 'MonitorIds' => 'Bevakningsnr', + 'MonitorPreset' => 'Förinställd bevakning', + 'MonitorPresetIntro' => 'Välj en förinställning från listan.

Var medveten om att detta kan skriva över inställningar du redan gjort för denna bevakare.

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'Monitors' => 'Bevakare', + 'Montage' => 'Montera', + 'Month' => 'Månad', + 'More' => 'More', // Added - 2011-06-16 + 'Move' => 'Flytta', + 'MustBeGe' => 'måste vara större än eller lika med', + 'MustBeLe' => 'måste vara mindre än eller lika med', + 'MustConfirmPassword' => 'Du måste bekräfta lösenordet', + 'MustSupplyPassword' => 'Du måste ange ett lösenord', + 'MustSupplyUsername' => 'Du måste ange ett användarnamn', + 'Name' => 'Namn', + 'Near' => 'Nära', + 'Network' => 'Nätverk', + 'New' => 'Ny', + 'NewGroup' => 'Ny grupp', + 'NewLabel' => 'Ny etikett', + 'NewPassword' => 'Nytt lösenord', + 'NewState' => 'Nytt läge', + 'NewUser' => 'Ny användare', + 'Next' => 'Nästa', + 'No' => 'Nej', + 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Det finns inga ramar inspelade för denna händelse', + 'NoGroup' => 'Ingen grupp', + 'NoSavedFilters' => 'Inga sparade filter', + 'NoStatisticsRecorded' => 'Det finns ingen statistik inspelad för denna händelse/ram', + 'None' => 'Ingen', + 'NoneAvailable' => 'Ingen tillgänglig', + 'Normal' => 'Normal', + 'Notes' => 'Not.', + 'NumPresets' => 'Antal förinställningar', + 'Off' => 'Av', + 'On' => 'På', + 'OpEq' => 'lika med', + 'OpGt' => 'större än', + 'OpGtEq' => 'större än eller lika med', + 'OpIn' => 'in set', + 'OpLt' => 'mindre än', + 'OpLtEq' => 'mindre än eller lika med', + 'OpMatches' => 'matchar', + 'OpNe' => 'inte lika med', + 'OpNotIn' => 'inte i set', + 'OpNotMatches' => 'matchar inte', + 'Open' => 'Öppna', + 'OptionHelp' => 'Optionhjälp', + 'OptionRestartWarning' => 'Dessa ändringar kommer inte att vara implementerade\nnär systemet körs. När du är klar starta om\n ZoneMinder.', + 'Options' => 'Alternativ', + 'OrEnterNewName' => 'eller skriv in nytt namn', + 'Order' => 'Sortera', + 'Orientation' => 'Orientation', + 'Out' => 'Ut', + 'OverwriteExisting' => 'Skriv över', + 'Paged' => 'Paged', + 'Pan' => 'Panorera', + 'PanLeft' => 'Panorera vänster', + 'PanRight' => 'Panorera höger', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Parameter', + 'Password' => 'Lösenord', + 'PasswordsDifferent' => 'Lösenorden skiljer sig åt', + 'Paths' => 'Sökvägar', + 'Pause' => 'Paus', + 'Phone' => 'Mobil', + 'PhoneBW' => 'Mobil bandbredd', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Skillnad i bildpunkter', + 'Pixels' => 'bildpunkter', + 'Play' => 'Spela', + 'PlayAll' => 'Visa alla', + 'PleaseWait' => 'Vänta...', + 'Point' => 'Punkt', + 'PostEventImageBuffer' => 'Post Event Image Count', + 'PreEventImageBuffer' => 'Pre Event Image Count', + 'PreserveAspect' => 'Bevara lägesförhållande', + 'Preset' => 'Förinställning', + 'Presets' => 'Förinställningar', + 'Prev' => 'Föreg.', + 'Probe' => 'Probe', // Added - 2009-03-31 + 'Protocol' => 'Protokol', + 'Rate' => 'Hastighet', + 'Real' => 'Verklig', + 'Record' => 'Spela in', + 'RefImageBlendPct' => 'Reference Image Blend %ge', + 'Refresh' => 'Uppdatera', + 'Remote' => 'Fjärr', + 'RemoteHostName' => 'Fjärrnamn', + 'RemoteHostPath' => 'Fjärrsökväg', + 'RemoteHostPort' => 'Fjärrport', + 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 + 'RemoteImageColours' => 'Fjärrbildfärger', + 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Byt namn', + 'Replay' => 'Repris', + 'ReplayAll' => 'Alla händelser', + 'ReplayGapless' => 'Gapless Events', + 'ReplaySingle' => 'Ensam händelse', + 'Reset' => 'Återställ', + 'ResetEventCounts' => 'Återställ händelseräknare', + 'Restart' => 'Återstart', + 'Restarting' => 'Återstartar', + 'RestrictedCameraIds' => 'Begränsade kameranr.', + 'RestrictedMonitors' => 'Begränsade bevakare', + 'ReturnDelay' => 'Fördröjd retur', + 'ReturnLocation' => 'Återvänd till position', + 'Rewind' => 'Backa', + 'RotateLeft' => 'Rotera vänster', + 'RotateRight' => 'Rotera höger', + 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunMode' => 'Körläge', + 'RunState' => 'Körläge', + 'Running' => 'Körs', + 'Save' => 'Spara', + 'SaveAs' => 'Spara som', + 'SaveFilter' => 'Spara filter', + 'Scale' => 'Skala', + 'Score' => 'Resultat', + 'Secs' => 'Sek', + 'Sectionlength' => 'Sektionslängd', + 'Select' => 'Välj', + 'SelectFormat' => 'Select Format', // Added - 2011-06-17 + 'SelectLog' => 'Select Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Välj bevakare', + 'SelfIntersecting' => 'Polygonändarna får inte överlappa', + 'Set' => 'Ställ in', + 'SetNewBandwidth' => 'Ställ in ny bandbredd', + 'SetPreset' => 'Ställ in förinställning', + 'Settings' => 'Inställningar', + 'ShowFilterWindow' => 'Visa fönsterfilter', + 'ShowTimeline' => 'Visa tidslinje', + 'SignalCheckColour' => 'Signal Check Colour', + 'Size' => 'Storlek', + 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Sleep' => 'Vila', + 'SortAsc' => 'Stigande', + 'SortBy' => 'Sortera', + 'SortDesc' => 'Fallande', + 'Source' => 'Källa', + 'SourceColours' => 'Source Colours', // Added - 2009-02-08 + 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceType' => 'Källtyp', + 'Speed' => 'Hastighet', + 'SpeedHigh' => 'Höghastighet', + 'SpeedLow' => 'Låghastighet', + 'SpeedMedium' => 'Normalhastighet', + 'SpeedTurbo' => 'Turbohastighet', + 'Start' => 'Start', + 'State' => 'Läge', + 'Stats' => 'Statistik', + 'Status' => 'Status', + 'Step' => 'Steg', + 'StepBack' => 'Stepga bakåt', + 'StepForward' => 'Stega framåt', + 'StepLarge' => 'Stora steg', + 'StepMedium' => 'Normalsteg', + 'StepNone' => 'Inga steg', + 'StepSmall' => 'Små steg', + 'Stills' => 'Stillbilder', + 'Stop' => 'Stopp', + 'Stopped' => 'Stoppad', + 'Stream' => 'Strömmande', + 'StreamReplayBuffer' => 'Buffert för strömmande uppspelning', + 'Submit' => 'Skicka', + 'System' => 'System', + 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'Tele' => 'Tele', + 'Thumbnail' => 'Miniatyrer', + 'Tilt' => 'Tilt', + 'Time' => 'Tid', + 'TimeDelta' => 'tidsdelta', + 'TimeStamp' => 'Tidsstämpel', + 'Timeline' => 'Tidslinje', + 'Timestamp' => 'Tidsstämpel', + 'TimestampLabelFormat' => 'Format på tidsstämpel', + 'TimestampLabelX' => 'Värde på tidsstämpel X', + 'TimestampLabelY' => 'Värde på tidsstämpel Y', + 'Today' => 'Idag', + 'Tools' => 'Verktyg', + 'Total' => 'Total', // Added - 2011-06-16 + 'TotalBrScore' => 'Total
Score', + 'TrackDelay' => 'Spårfördröjning', + 'TrackMotion' => 'Spåra rörelse', + 'Triggers' => 'Triggers', + 'TurboPanSpeed' => 'Turbo panoramahastighet', + 'TurboTiltSpeed' => 'Turbo tilthastighet', + 'Type' => 'Typ', + 'Unarchive' => 'Packa upp', + 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Units' => 'Enheter', + 'Unknown' => 'Okänd', + 'Update' => 'Uppdatera', + 'UpdateAvailable' => 'En uppdatering till ZoneMinder finns tillgänglig.', + 'UpdateNotNecessary' => 'Ingen uppdatering behövs.', + 'Updated' => 'Updated', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2011-08-23 + 'UseFilter' => 'Använd filter', + 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Använd ', // This is used at the beginning of the phrase 'use N filter expressions' + 'User' => 'Användare', + 'Username' => 'Användarnamn', + 'Users' => 'Användare', + 'Value' => 'Värde', + 'Version' => 'Version', + 'VersionIgnore' => 'Ignorera denna version', + 'VersionRemindDay' => 'Påminn om 1 dag', + 'VersionRemindHour' => 'Påminn om 1 timme', + 'VersionRemindNever' => 'Påminn inte om nya versioner', + 'VersionRemindWeek' => 'Påminn om en 1 vecka', + 'Video' => 'Video', + 'VideoFormat' => 'Videoformat', + 'VideoGenFailed' => 'Videogenereringen misslyckades!', + 'VideoGenFiles' => 'Befintliga videofiler', + 'VideoGenNoFiles' => 'Inga videofiler', + 'VideoGenParms' => 'Inställningar för videogenerering', + 'VideoGenSucceeded' => 'Videogenereringen lyckades!', + 'VideoSize' => 'Videostorlek', + 'View' => 'Visa', + 'ViewAll' => 'Visa alla', + 'ViewEvent' => 'Visa händelse', + 'ViewPaged' => 'Visa Paged', + 'Wake' => 'Vakna', + 'WarmupFrames' => 'Värm upp ramar', + 'Watch' => 'Se', + 'Web' => 'Webb', + 'WebColour' => 'Webbfärg', + 'Week' => 'Vecka', + 'White' => 'Vit', + 'WhiteBalance' => 'Vitbalans', + 'Wide' => 'Vid', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 aktiveringssträng', + 'X10InputAlarmString' => 'X10 larmingångssträng', + 'X10OutputAlarmString' => 'X10 larmutgångssträng', + 'Y' => 'J', + 'Yes' => 'Ja', + 'YouNoPerms' => 'Du har inte tillstånd till denna resurs.', + 'Zone' => 'Zon', + 'ZoneAlarmColour' => 'Larmfärg (Röd/Grön/Blå)', + 'ZoneArea' => 'Zonarea', + 'ZoneFilterSize' => 'Filterbredd/höjd (pixlar)', + 'ZoneMinMaxAlarmArea' => 'Min/Max larmarea', + 'ZoneMinMaxBlobArea' => 'Min/Max blobbarea', + 'ZoneMinMaxBlobs' => 'Min/Max blobbar', + 'ZoneMinMaxFiltArea' => 'Min/Max filterarea', + 'ZoneMinMaxPixelThres' => 'Min/Max pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', + 'Zones' => 'Zoner', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zooma in', + 'ZoomOut' => 'Zooma ut', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'Aktuell inloggning är \'%1$s\'', + 'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below) + 'LastEvents' => 'Senaste %1$s %2$s', // For example 'Last 37 Events' (from Vlang below) + 'LatestRelease' => 'Aktuell version är v%1$s, du har v%2$s.', + 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) + 'MonitorFunction' => 'Bevakare %1$s funktion', + 'RunningRecentVer' => 'Du använder den senaste versionen av ZoneMinder, v%s.', + 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'Händelser', 1=>'Händelsen', 2=>'Händelserna' ), + 'Monitor' => array( 0=>'Bevakare', 1=>'Bevakare', 2=>'Bevakare' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Fel, kan inte relatera variabel språksträng' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +$OLANG = array( + 'LANG_DEFAULT' => array( + 'Prompt' => "Välj språk för ZoneMinder", + 'Help' => "ZoneMinder kan använda annat språk än engelska i menyer och texter. Välj här det språk du vill använda till ZoneMinder." + ), +); + +?> diff --git a/web/skins/classic/js/skin.js b/web/skins/classic/js/skin.js index 06f4848d6..32d83a9cd 100644 --- a/web/skins/classic/js/skin.js +++ b/web/skins/classic/js/skin.js @@ -200,12 +200,12 @@ function checkStreamForErrors( funcName, streamObj ) { if ( !streamObj ) { - console.error( funcName+": stream object was null" ); + Error( funcName+": stream object was null" ); return true; } if ( streamObj.result == "Error" ) { - console.error( funcName+" stream error: "+streamObj.message ); + Error( funcName+" stream error: "+streamObj.message ); return true; } return false; diff --git a/web/skins/classic/svn-commit.tmp b/web/skins/classic/svn-commit.tmp new file mode 100644 index 000000000..a8bae9fc0 --- /dev/null +++ b/web/skins/classic/svn-commit.tmp @@ -0,0 +1,5 @@ + +--This line, and those below, will be ignored-- + +M views/plugin.php +M views/css/plugin.css diff --git a/web/skins/classic/views/css/plugin.css b/web/skins/classic/views/css/plugin.css new file mode 100644 index 000000000..040e26558 --- /dev/null +++ b/web/skins/classic/views/css/plugin.css @@ -0,0 +1,20 @@ +#settingsPanel { + float: left; + margin: 0 2px; +} + +#pluginSettings { + border-collapse: collapse; +} + +#pluginSettings th, #pluginSettings td { + border: 1px solid #7f7fb2; + padding: 3px; + text-align: left; +} + +#pluginSettings th[scope=row] { + padding: 4px 3px 3px; + vertical-align: top; + white-space: nowrap; +} diff --git a/web/skins/classic/views/js/plugin.js b/web/skins/classic/views/js/plugin.js new file mode 100644 index 000000000..f03768317 --- /dev/null +++ b/web/skins/classic/views/js/plugin.js @@ -0,0 +1,29 @@ +function validateForm( form ) +{ + return( true ); +} + +function submitForm( form ) +{ + form.submit(); +} + + +function limitRange( field, minValue, maxValue ) +{ + if ( parseInt(field.value) < parseInt(minValue) ) + { + field.value = minValue; + } + else if ( parseInt(field.value) > parseInt(maxValue) ) + { + field.value = maxValue; + } +} + +function initPage() +{ + return( true ); +} + +window.addEvent( 'domready', initPage ); diff --git a/web/skins/classic/views/js/plugin.js.php b/web/skins/classic/views/js/plugin.js.php new file mode 100644 index 000000000..e69de29bb diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index 0170a308f..f58212fd1 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -102,6 +102,8 @@ else 'SignalCheckColour' => '#0000c0', 'WebColour' => 'red', 'Triggers' => "", + 'DoNativeMotDet' => true, + 'UsedPl' => "", ); } @@ -444,6 +446,8 @@ if ( $tab != 'general' ) + + + + checked="checked"/> 0, + 'Name' => $SLANG['Monitor'].'-'.$nextId, + 'Function' => "Monitor", + 'Enabled' => true, + 'LinkedMonitors' => "", + 'Type' => "", + 'Device' => "/dev/video0", + 'Channel' => "0", + 'Format' => 0x000000ff, + 'Protocol' => "", + 'Method' => "", + 'Host' => "", + 'Path' => "", + 'Port' => "80", + 'Colours' => 3, + 'Palette' => 0, + 'Width' => "320", + 'Height' => "240", + 'Orientation' => "0", + 'Deinterlacing' => 0, + 'LabelFormat' => '%N - %d/%m/%y %H:%M:%S', + 'LabelX' => 0, + 'LabelY' => 0, + 'ImageBufferCount' => 50, + 'WarmupCount' => 25, + 'PreEventCount' => 25, + 'PostEventCount' => 25, + 'StreamReplayBuffer' => 1000, + 'AlarmFrameCount' => 1, + 'Controllable' => 0, + 'ControlId' => "", + 'ControlType' => 0, + 'ControlDevice' => "", + 'ControlAddress' => "", + 'AutoStopTimeout' => "", + 'TrackMotion' => 0, + 'TrackDelay' => "", + 'ReturnLocation' => -1, + 'ReturnDelay' => "", + 'SectionLength' => 600, + 'FrameSkip' => 0, + 'EventPrefix' => 'Event-', + 'MaxFPS' => "", + 'AlarmMaxFPS' => "", + 'FPSReportInterval' => 1000, + 'RefBlendPerc' => 12, + 'DefaultView' => 'Events', + 'DefaultRate' => '100', + 'DefaultScale' => '100', + 'SignalCheckColour' => '#0000c0', + 'WebColour' => 'red', + 'Triggers' => "", + ); +} + +if ( ZM_OPT_X10 && empty($x10Monitor) ) +{ + $x10Monitor = array( + 'Activation' => '', + 'AlarmInput' => '', + 'AlarmOutput' => '', + ); +} + +function fourcc( $a, $b, $c, $d ) +{ + return( ord($a) | (ord($b) << 8) | (ord($c) << 16) | (ord($d) << 24) ); +} + +if ( isset( $_REQUEST['newMonitor'] ) ) +{ + $newMonitor = $_REQUEST['newMonitor']; + if ( ZM_OPT_X10 ) + $newX10Monitor = $_REQUEST['newX10Monitor']; +} +else +{ + $newMonitor = $monitor; + $newMonitor['Triggers'] = explode( ',', isset($monitor['Triggers'])?$monitor['Triggers']:"" ); + if ( ZM_OPT_X10 ) + $newX10Monitor = $x10Monitor; +} + +if ( $newMonitor['MaxFPS'] == '0.00' ) + $newMonitor['MaxFPS'] = ''; +if ( $newMonitor['AlarmMaxFPS'] == '0.00' ) + $newMonitor['AlarmMaxFPS'] = ''; + +if ( !empty($_REQUEST['preset']) ) +{ + $preset = dbFetchOne( "select Type, Device, Channel, Format, Protocol, Method, Host, Port, Path, Width, Height, Palette, MaxFPS, Controllable, ControlId, ControlDevice, ControlAddress, DefaultRate, DefaultScale from MonitorPresets where Id = '".dbEscape($_REQUEST['preset'])."'" ); + foreach ( $preset as $name=>$value ) + { + if ( isset($value) ) + { + $newMonitor[$name] = $value; + } + } +} +if ( !empty($_REQUEST['probe']) ) +{ + $probe = unserialize(base64_decode($_REQUEST['probe'])); + foreach ( $probe as $name=>$value ) + { + if ( isset($value) ) + { + $newMonitor[$name] = $value; + } + } + if ( ZM_HAS_V4L && $newMonitor['Type'] == 'Local' ) + { + $newMonitor['Palette'] = fourCC( substr($newMonitor['Palette'],0,1), substr($newMonitor['Palette'],1,1), substr($newMonitor['Palette'],2,1), substr($newMonitor['Palette'],3,1) ); + if ( $newMonitor['Format'] == 'PAL' ) + $newMonitor['Format'] = 0x000000ff; + elseif ( $newMonitor['Format'] == 'NTSC' ) + $newMonitor['Format'] = 0x0000b000; + } +} + +$sourceTypes = array( + 'Local' => $SLANG['Local'], + 'Remote' => $SLANG['Remote'], + 'File' => $SLANG['File'], + 'Ffmpeg' => $SLANG['Ffmpeg'], +); +if ( !ZM_HAS_V4L ) + unset($sourceTypes['Local']); + +$localMethods = array( + 'v4l2' => "Video For Linux version 2", + 'v4l1' => "Video For Linux version 1", +); +if ( !ZM_HAS_V4L2 ) + unset($localMethods['v4l2']); +if ( !ZM_HAS_V4L1 ) + unset($localMethods['v4l1']); + +$remoteProtocols = array( + "http" => "HTTP", + "rtsp" => "RTSP" +); + +$rtspMethods = array( + "rtpUni" => "RTP/Unicast", + "rtpMulti" => "RTP/Multicast", + "rtpRtsp" => "RTP/RTSP", + "rtpRtspHttp" => "RTP/RTSP/HTTP" +); + +$httpMethods = array( + "simple" => "Simple", + "regexp" => "Regexp", + "jpegTags" => "JPEG Tags" +); +if ( !ZM_PCRE ) + unset($httpMethods['regexp']); +// Currently unsupported +unset($httpMethods['jpegTags']); + +if ( ZM_HAS_V4L1 ) +{ + $v4l1DeviceFormats = array( + "PAL" => 0, + "NTSC" => 1, + "SECAM" => 2, + "AUTO" => 3, + "FMT4" => 4, + "FMT5" => 5, + "FMT6" => 6, + "FMT7" => 7 + ); + + $v4l1MaxChannels = 15; + $v4l1DeviceChannels = array(); + for ( $i = 0; $i <= $v4l1MaxChannels; $i++ ) + $v4l1DeviceChannels["$i"] = $i; + + $v4l1LocalPalettes = array( + $SLANG['Grey'] => 1, + "BGR32" => 5, + "BGR24" => 4, + "*YUYV" => 8, + "*RGB565" => 3, + "*RGB555" => 6, + "*YUV422" => 7, + "*YUV422P" => 13, + "*YUV420P" => 15 + ); +} + +if ( ZM_HAS_V4L2 ) +{ + $v4l2DeviceFormats = array( + "PAL" => 0x000000ff, + "NTSC" => 0x0000b000, + "PAL B" => 0x00000001, + "PAL B1" => 0x00000002, + "PAL G" => 0x00000004, + "PAL H" => 0x00000008, + "PAL I" => 0x00000010, + "PAL D" => 0x00000020, + "PAL D1" => 0x00000040, + "PAL K" => 0x00000080, + "PAL M" => 0x00000100, + "PAL N" => 0x00000200, + "PAL Nc" => 0x00000400, + "PAL 60" => 0x00000800, + "NTSC M" => 0x00001000, + "NTSC M JP" => 0x00002000, + "NTSC 443" => 0x00004000, + "NTSC M KR" => 0x00008000, + "SECAM B" => 0x00010000, + "SECAM D" => 0x00020000, + "SECAM G" => 0x00040000, + "SECAM H" => 0x00080000, + "SECAM K" => 0x00100000, + "SECAM K1" => 0x00200000, + "SECAM L" => 0x00400000, + "SECAM LC" => 0x00800000, + "ATSC 8 VSB" => 0x01000000, + "ATSC 16 VSB" => 0x02000000, + ); + + $v4l2MaxChannels = 31; + $v4l2DeviceChannels = array(); + for ( $i = 0; $i <= $v4l2MaxChannels; $i++ ) + $v4l2DeviceChannels["$i"] = $i; + + $v4l2LocalPalettes = array( + "Auto" => 0, /* Automatic palette selection */ + + /* Pixel format FOURCC depth Description */ + $SLANG['Grey'] => fourcc('G','R','E','Y'), /* 8 Greyscale */ + "BGR32" => fourcc('B','G','R','4'), /* 32 BGR-8-8-8-8 */ + "RGB32" => fourcc('R','G','B','4'), /* 32 RGB-8-8-8-8 */ + "BGR24" => fourcc('B','G','R','3'), /* 24 BGR-8-8-8 */ + "RGB24" => fourcc('R','G','B','3'), /* 24 RGB-8-8-8 */ + "*YUYV" => fourcc('Y','U','Y','V'), /* 16 YUV 4:2:2 */ + + /* compressed formats */ + "*JPEG" => fourcc('J','P','E','G'), /* JFIF JPEG */ + "*MJPEG" => fourcc('M','J','P','G'), /* Motion-JPEG */ + //"DV" => fourcc('d','v','s','d'), /* 1394 */ + //"MPEG" => fourcc('M','P','E','G'), /* MPEG-1/2/4 */ + + //"RGB332" => fourcc('R','G','B','1'), /* 8 RGB-3-3-2 */ + "*RGB444" => fourcc('R','4','4','4'), /* 16 xxxxrrrr ggggbbbb */ + "*RGB555" => fourcc('R','G','B','O'), /* 16 RGB-5-5-5 */ + "*RGB565" => fourcc('R','G','B','P'), /* 16 RGB-5-6-5 */ + //"RGB555X" => fourcc('R','G','B','Q'), /* 16 RGB-5-5-5 BE */ + //"RGB565X" => fourcc('R','G','B','R'), /* 16 RGB-5-6-5 BE */ + //"Y16" => fourcc('Y','1','6',''), /* 16 Greyscale */ + //"PAL8" => fourcc('P','A','L','8'), /* 8 8-bit palette */ + //"YVU410" => fourcc('Y','V','U','9'), /* 9 YVU 4:1:0 */ + //"YVU420" => fourcc('Y','V','1','2'), /* 12 YVU 4:2:0 */ + + //"UYVY" => fourcc('U','Y','V','Y'), /* 16 YUV 4:2:2 */ + "*YUV422P" => fourcc('4','2','2','P'), /* 16 YVU422 planar */ + "*YUV411P" => fourcc('4','1','1','P'), /* 16 YVU411 planar */ + //"Y41P" => fourcc('Y','4','1','P'), /* 12 YUV 4:1:1 */ + "*YUV444" => fourcc('Y','4','4','4'), /* 16 xxxxyyyy uuuuvvvv */ + //"YUV555" => fourcc('Y','U','V','O'), /* 16 YUV-5-5-5 */ + //"YUV565" => fourcc('Y','U','V','P'), /* 16 YUV-5-6-5 */ + //"YUV32" => fourcc('Y','U','V','4'), /* 32 YUV-8-8-8-8 */ + + /* two planes -- one Y, one Cr + Cb interleaved */ + //"NV12" => fourcc('N','V','1','2'), /* 12 Y/CbCr 4:2:0 */ + //"NV21" => fourcc('N','V','2','1'), /* 12 Y/CrCb 4:2:0 */ + + /* The following formats are not defined in the V4L2 specification */ + "*YUV410" => fourcc('Y','U','V','9'), /* 9 YUV 4:1:0 */ + "*YUV420" => fourcc('Y','U','1','2'), /* 12 YUV 4:2:0 */ + //"YYUV" => fourcc('Y','Y','U','V'), /* 16 YUV 4:2:2 */ + //"HI240" => fourcc('H','I','2','4'), /* 8 8-bit color */ + //"HM12" => fourcc('H','M','1','2'), /* 8 YUV 4:2:0 16x16 macroblocks */ + + /* see http://www.siliconimaging.com/RGB%20Bayer.htm */ + //"SBGGR8" => fourcc('B','A','8','1'), /* 8 BGBG.. GRGR.. */ + //"SGBRG8" => fourcc('G','B','R','G'), /* 8 GBGB.. RGRG.. */ + //"SBGGR16" => fourcc('B','Y','R','2'), /* 16 BGBG.. GRGR.. */ + + /* Vendor-specific formats */ + //"WNVA" => fourcc('W','N','V','A'), /* Winnov hw compress */ + //"SN9C10X" => fourcc('S','9','1','0'), /* SN9C10x compression */ + //"PWC1" => fourcc('P','W','C','1'), /* pwc older webcam */ + //"PWC2" => fourcc('P','W','C','2'), /* pwc newer webcam */ + //"ET61X251" => fourcc('E','6','2','5'), /* ET61X251 compression */ + //"SPCA501" => fourcc('S','5','0','1'), /* YUYV per line */ + //"SPCA505" => fourcc('S','5','0','5'), /* YYUV per line */ + //"SPCA508" => fourcc('S','5','0','8'), /* YUVY per line */ + //"SPCA561" => fourcc('S','5','6','1'), /* compressed GBRG bayer */ + //"PAC207" => fourcc('P','2','0','7'), /* compressed BGGR bayer */ + //"PJPG" => fourcc('P','J','P','G'), /* Pixart 73xx JPEG */ + //"YVYU" => fourcc('Y','V','Y','U'), /* 16 YVU 4:2:2 */ + ); +} + +$Colours = array( + $SLANG['8BitGrey'] => 1, + $SLANG['24BitColour'] => 3, + $SLANG['32BitColour'] => 4 +); + +$orientations = array( + $SLANG['Normal'] => '0', + $SLANG['RotateRight'] => '90', + $SLANG['Inverted'] => '180', + $SLANG['RotateLeft'] => '270', + $SLANG['FlippedHori'] => 'hori', + $SLANG['FlippedVert'] => 'vert' +); + +$deinterlaceopts = array( + "Disabled" => 0x00000000, + "Four field motion adaptive - Soft" => 0x00001E04, /* 30 change */ + "Four field motion adaptive - Medium" => 0x00001404, /* 20 change */ + "Four field motion adaptive - Hard" => 0x00000A04, /* 10 change */ + "Discard" => 0x00000001, + "Linear" => 0x00000002, + "Blend" => 0x00000003, + "Blend (25%)" => 0x00000205 +); + +$deinterlaceopts_v4l2 = array( + "Disabled" => 0x00000000, + "Four field motion adaptive - Soft" => 0x00001E04, /* 30 change */ + "Four field motion adaptive - Medium" => 0x00001404, /* 20 change */ + "Four field motion adaptive - Hard" => 0x00000A04, /* 10 change */ + "Discard" => 0x00000001, + "Linear" => 0x00000002, + "Blend" => 0x00000003, + "Blend (25%)" => 0x00000205, + "V4L2: Capture top field only" => 0x02000000, + "V4L2: Capture bottom field only" => 0x03000000, + "V4L2: Alternate fields (Bob)" => 0x07000000, + "V4L2: Progressive" => 0x01000000, + "V4L2: Interlaced" => 0x04000000, +); + +xhtmlHeaders(__FILE__, $SLANG['Monitor']." - ".validHtmlStr($monitor['Name']) ); +?> + +
+ +
+
    +$value ) +{ + if ( $tab == $name ) + { +?> +
  • + +
  • + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $SLANG['None'], + '0' => $SLANG['Home'], + '1' => $SLANG['Preset']." 1", + ); +?> + + + + + + + + + + + + + + + + + + + + + +
checked="checked"/>
+ +
+"; +?> + checked="checked"/>  + + + +
()
()
checked="checked"/>
 
checked="checked"/>
    
    
+
+ disabled="disabled"/> +
+
+
+
+ + diff --git a/web/skins/classic/views/plugin.php b/web/skins/classic/views/plugin.php new file mode 100644 index 000000000..91795be77 --- /dev/null +++ b/web/skins/classic/views/plugin.php @@ -0,0 +1,170 @@ + 0 ) +{ + $newZone = dbFetchOne( "select * from Zones where MonitorId = '".dbEscape($mid)."' and Id = '".dbEscape($zid)."'" ); +} else { + $view = "error"; + return; +} +$monitor = dbFetchMonitor ( $mid ); +$plugin = dbEscape($_REQUEST['pl']); + +$plugin_path = dirname(ZM_PLUGINS_CONFIG_PATH)."/".$plugin; + +$focusWindow = true; + +xhtmlHeaders(__FILE__, $SLANG['Plugin'] ); + + +$pluginOptions=array( + 'Enabled'=>array( + 'Type'=>'select', + 'Name'=>'Enabled', + 'Choices'=>'yes,no', + 'Value'=>'no' + ) + ); + +$optionNames=array(); +if(file_exists($plugin_path."/config.php")) +{ + include_once($plugin_path."/config.php"); +} + +$sql="SELECT * FROM PluginsConfig WHERE MonitorId=$mid AND ZoneId=$zid AND pluginName='$plugin'"; +foreach( dbFetchAll( $sql ) as $popt ) +{ + if(array_key_exists($popt['Name'], $pluginOptions) + && $popt['Type']==$pluginOptions[$popt['Name']]['Type'] + && $popt['Choices']==$pluginOptions[$popt['Name']]['Choices'] + ) + { + $pluginOptions[$popt['Name']]=$popt; + array_push($optionNames, $popt['Name']); + } else { + dbQuery("DELETE from PluginsConfig WHERE Id=".$popt['Id']); + } +} +foreach($pluginOptions as $name => $values) +{ + if(!in_array($name, $optionNames)) + { + $popt=$pluginOptions[$name]; + $sql="INSERT INTO PluginsConfig VALUES + ('','".dbEscape($popt['Name'])."','".dbEscape($popt['Value'])."', + '".dbEscape($popt['Type'])."','".dbEscape($popt['Choices'])."','$mid','$zid','$plugin')"; + dbQuery($sql); + } +} + +$PLANG=array(); +if(file_exists($plugin_path."/lang/".$user['Language'].".php")) { + include_once($plugin_path."/lang/".$user['Language'].".php"); +} + +function pLang($name) +{ + global $PLANG; + if(array_key_exists($name, $PLANG)) + return $PLANG[$name]; + else + return $name; +} + + +?> + +
+ +
+
+ + + + + + +
+ + + $popt) +{ + ?> + + + + + + + + +
+
+ disabled="disabled"/> +
+
+
+
+ + diff --git a/web/skins/classic/views/zone.php b/web/skins/classic/views/zone.php index f7b917e26..80a3f5e0e 100644 --- a/web/skins/classic/views/zone.php +++ b/web/skins/classic/views/zone.php @@ -207,6 +207,21 @@ xhtmlHeaders(__FILE__, $SLANG['Zone'] ); + +$pl
"; + } +} +?> +