Added simplified direct config interface.
git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@1406 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
parent
f03079af6e
commit
f089f28bd4
|
@ -99,6 +99,7 @@ void zmLoadConfig()
|
|||
fclose( cfg);
|
||||
zmDbConnect();
|
||||
config.Load();
|
||||
config.Assign();
|
||||
}
|
||||
|
||||
ConfigItem::ConfigItem( const char *p_name, const char *p_value, const char *const p_type )
|
||||
|
@ -237,6 +238,11 @@ void Config::Load()
|
|||
}
|
||||
}
|
||||
|
||||
void Config::Assign()
|
||||
{
|
||||
ZM_CFG_ASSIGN_LIST
|
||||
}
|
||||
|
||||
const ConfigItem &Config::Item( int id )
|
||||
{
|
||||
if ( !n_items )
|
||||
|
|
|
@ -88,6 +88,9 @@ public:
|
|||
|
||||
class Config
|
||||
{
|
||||
public:
|
||||
ZM_CFG_DECLARE_LIST
|
||||
|
||||
private:
|
||||
int n_items;
|
||||
ConfigItem **items;
|
||||
|
@ -97,6 +100,7 @@ public:
|
|||
~Config();
|
||||
|
||||
void Load();
|
||||
void Assign();
|
||||
const ConfigItem &Item( int id );
|
||||
};
|
||||
|
||||
|
|
|
@ -33,8 +33,6 @@
|
|||
#include "zmf.h"
|
||||
|
||||
bool Event::initialised = false;
|
||||
bool Event::timestamp_on_capture;
|
||||
int Event::bulk_frame_interval;
|
||||
char Event::capture_file_format[PATH_MAX];
|
||||
char Event::analyse_file_format[PATH_MAX];
|
||||
char Event::general_file_format[PATH_MAX];
|
||||
|
@ -63,7 +61,7 @@ Event::Event( Monitor *p_monitor, struct timeval p_start_time, const char *event
|
|||
alarm_frames = 0;
|
||||
tot_score = 0;
|
||||
max_score = 0;
|
||||
snprintf( path, sizeof(path), "%s/%d/%d", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Id(), id );
|
||||
snprintf( path, sizeof(path), "%s/%d/%d", config.dir_events, monitor->Id(), id );
|
||||
|
||||
struct stat statbuf;
|
||||
errno = 0;
|
||||
|
@ -128,7 +126,7 @@ bool Event::OpenFrameSocket( int monitor_id )
|
|||
return( false );
|
||||
}
|
||||
|
||||
int socket_buffer_size = (int)config.Item( ZM_FRAME_SOCKET_SIZE );
|
||||
int socket_buffer_size = config.frame_socket_size;
|
||||
if ( socket_buffer_size > 0 )
|
||||
{
|
||||
if ( setsockopt( sd, SOL_SOCKET, SO_SNDBUF, &socket_buffer_size, sizeof(socket_buffer_size) ) < 0 )
|
||||
|
@ -158,7 +156,7 @@ bool Event::OpenFrameSocket( int monitor_id )
|
|||
}
|
||||
|
||||
char sock_path[PATH_MAX] = "";
|
||||
snprintf( sock_path, sizeof(sock_path), "%s/zmf-%d.sock", (const char *)config.Item( ZM_PATH_SOCKS ), monitor_id );
|
||||
snprintf( sock_path, sizeof(sock_path), "%s/zmf-%d.sock", config.path_socks, monitor_id );
|
||||
|
||||
struct sockaddr_un addr;
|
||||
|
||||
|
@ -243,9 +241,9 @@ bool Event::SendFrameImage( const Image *image, bool alarm_frame )
|
|||
|
||||
bool Event::WriteFrameImage( Image *image, struct timeval timestamp, const char *event_file, bool alarm_frame )
|
||||
{
|
||||
if ( timestamp_on_capture )
|
||||
if ( config.timestamp_on_capture )
|
||||
{
|
||||
if ( !(bool)config.Item( ZM_OPT_FRAME_SERVER ) || !SendFrameImage( image, alarm_frame) )
|
||||
if ( !config.opt_frame_server || !SendFrameImage( image, alarm_frame) )
|
||||
{
|
||||
image->WriteJpeg( event_file );
|
||||
}
|
||||
|
@ -254,7 +252,7 @@ bool Event::WriteFrameImage( Image *image, struct timeval timestamp, const char
|
|||
{
|
||||
Image ts_image( *image );
|
||||
monitor->TimestampImage( &ts_image, timestamp.tv_sec );
|
||||
if ( !(bool)config.Item( ZM_OPT_FRAME_SERVER ) || !SendFrameImage( &ts_image, alarm_frame) )
|
||||
if ( !config.opt_frame_server || !SendFrameImage( &ts_image, alarm_frame) )
|
||||
{
|
||||
ts_image.WriteJpeg( event_file );
|
||||
}
|
||||
|
@ -307,7 +305,7 @@ void Event::AddFrame( Image *image, struct timeval timestamp, int score, Image *
|
|||
struct DeltaTimeval delta_time;
|
||||
DELTA_TIMEVAL( delta_time, timestamp, start_time, DT_PREC_2 );
|
||||
|
||||
bool db_frame = (score>=0) || ((frames%bulk_frame_interval)==0) || !frames;
|
||||
bool db_frame = (score>=0) || ((frames%config.bulk_frame_interval)==0) || !frames;
|
||||
|
||||
if ( db_frame )
|
||||
{
|
||||
|
@ -343,11 +341,11 @@ void Event::AddFrame( Image *image, struct timeval timestamp, int score, Image *
|
|||
}
|
||||
}
|
||||
|
||||
if ( (bool)config.Item( ZM_RECORD_DIAG_IMAGES ) )
|
||||
if ( config.record_diag_images )
|
||||
{
|
||||
char diag_glob[PATH_MAX] = "";
|
||||
|
||||
snprintf( diag_glob, sizeof(diag_glob), "%s/%d/diag-*.jpg", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Id() );
|
||||
snprintf( diag_glob, sizeof(diag_glob), "%s/%d/diag-*.jpg", config.dir_events, monitor->Id() );
|
||||
glob_t pglob;
|
||||
int glob_status = glob( diag_glob, 0, 0, &pglob );
|
||||
if ( glob_status != 0 )
|
||||
|
@ -414,7 +412,7 @@ void Event::StreamEvent( int event_id, int scale, int rate, int maxfps )
|
|||
exit( mysql_errno( &dbconn ) );
|
||||
}
|
||||
|
||||
snprintf( eventpath, sizeof(eventpath), "%s/%s/%d/%d", ZM_PATH_WEB, (const char *)config.Item( ZM_DIR_EVENTS ), atoi( dbrow[0] ), event_id );
|
||||
snprintf( eventpath, sizeof(eventpath), "%s/%s/%d/%d", ZM_PATH_WEB, config.dir_events, atoi( dbrow[0] ), event_id );
|
||||
int frames = atoi(dbrow[2]);
|
||||
double duration = atof(dbrow[3]);
|
||||
|
||||
|
@ -538,8 +536,6 @@ void Event::StreamMpeg( int event_id, const char *format, int scale, int rate, i
|
|||
if ( !initialised )
|
||||
Initialise();
|
||||
|
||||
bool timed_frames = (bool)config.Item( ZM_VIDEO_TIMED_FRAMES );
|
||||
|
||||
snprintf( sql, sizeof(sql), "select M.Id, M.Name, E.Frames, max(F.Delta)-min(F.Delta) as Duration from Events as E inner join Monitors as M on E.MonitorId = M.Id inner join Frames as F on E.Id = F.EventId where E.Id = %d group by E.Id", event_id );
|
||||
if ( mysql_query( &dbconn, sql ) )
|
||||
{
|
||||
|
@ -561,7 +557,7 @@ void Event::StreamMpeg( int event_id, const char *format, int scale, int rate, i
|
|||
exit( mysql_errno( &dbconn ) );
|
||||
}
|
||||
|
||||
snprintf( eventpath, sizeof(eventpath), "%s/%s/%d/%d", ZM_PATH_WEB, (const char *)config.Item( ZM_DIR_EVENTS ), atoi( dbrow[0] ), event_id );
|
||||
snprintf( eventpath, sizeof(eventpath), "%s/%s/%d/%d", ZM_PATH_WEB, config.dir_events, atoi( dbrow[0] ), event_id );
|
||||
int frames = atoi(dbrow[2]);
|
||||
double duration = atof(dbrow[3]);
|
||||
|
||||
|
@ -633,7 +629,7 @@ void Event::StreamMpeg( int event_id, const char *format, int scale, int rate, i
|
|||
delta_ms = (unsigned int)((last_delta+temp_delta)*1000);
|
||||
if ( rate != ZM_RATE_SCALE )
|
||||
delta_ms = (delta_ms*ZM_RATE_SCALE)/rate;
|
||||
double pts = vid_stream->EncodeFrame( image.Buffer(), image.Size(), timed_frames, delta_ms );
|
||||
double pts = vid_stream->EncodeFrame( image.Buffer(), image.Size(), config.video_timed_frames, delta_ms );
|
||||
|
||||
Debug( 2, ( "I:%d, DI:%d, LI:%d, DD:%lf, LD:%lf, TD:%lf, DM:%d, PTS:%lf", id, db_id, last_id, db_delta, last_delta, temp_delta, delta_ms, pts ));
|
||||
|
||||
|
|
|
@ -45,8 +45,6 @@ class Event
|
|||
{
|
||||
protected:
|
||||
static bool initialised;
|
||||
static bool timestamp_on_capture;
|
||||
static int bulk_frame_interval;
|
||||
static char capture_file_format[PATH_MAX];
|
||||
static char analyse_file_format[PATH_MAX];
|
||||
static char general_file_format[PATH_MAX];
|
||||
|
@ -85,11 +83,9 @@ protected:
|
|||
{
|
||||
initialised = true;
|
||||
|
||||
timestamp_on_capture = (bool)config.Item( ZM_TIMESTAMP_ON_CAPTURE );
|
||||
bulk_frame_interval = (int)config.Item( ZM_BULK_FRAME_INTERVAL );
|
||||
snprintf( capture_file_format, sizeof(capture_file_format), "%%s/%%0%dd-capture.jpg", (int)config.Item( ZM_EVENT_IMAGE_DIGITS ) );
|
||||
snprintf( analyse_file_format, sizeof(analyse_file_format), "%%s/%%0%dd-analyse.jpg", (int)config.Item( ZM_EVENT_IMAGE_DIGITS ) );
|
||||
snprintf( general_file_format, sizeof(general_file_format), "%%s/%%0%dd-%%s", (int)config.Item( ZM_EVENT_IMAGE_DIGITS ) );
|
||||
snprintf( capture_file_format, sizeof(capture_file_format), "%%s/%%0%dd-capture.jpg", config.event_image_digits );
|
||||
snprintf( analyse_file_format, sizeof(analyse_file_format), "%%s/%%0%dd-analyse.jpg", config.event_image_digits );
|
||||
snprintf( general_file_format, sizeof(general_file_format), "%%s/%%0%dd-%%s", config.event_image_digits );
|
||||
}
|
||||
|
||||
public:
|
||||
|
|
|
@ -23,9 +23,6 @@
|
|||
#define ABSDIFF(a,b) (((a)<(b))?((b)-(a)):((a)-(b)))
|
||||
|
||||
bool Image::initialised = false;
|
||||
bool Image::y_image_deltas;
|
||||
bool Image::fast_image_blends;
|
||||
bool Image::colour_jpeg_files;
|
||||
unsigned char *Image::abs_table;
|
||||
unsigned char *Image::y_r_table;
|
||||
unsigned char *Image::y_g_table;
|
||||
|
@ -36,9 +33,6 @@ void Image::Initialise()
|
|||
{
|
||||
initialised = true;
|
||||
|
||||
y_image_deltas = (bool)config.Item( ZM_Y_IMAGE_DELTAS );
|
||||
fast_image_blends = (bool)config.Item( ZM_FAST_IMAGE_BLENDS );
|
||||
colour_jpeg_files = (bool)config.Item( ZM_COLOUR_JPEG_FILES );
|
||||
abs_table = new unsigned char[(6*255)+1];
|
||||
abs_table += (3*255);
|
||||
y_r_table = new unsigned char[511];
|
||||
|
@ -164,7 +158,7 @@ void Image::ReadJpeg( const char *filename )
|
|||
|
||||
void Image::WriteJpeg( const char *filename ) const
|
||||
{
|
||||
if ( colour_jpeg_files && colours == 1 )
|
||||
if ( config.colour_jpeg_files && colours == 1 )
|
||||
{
|
||||
Image temp_image( *this );
|
||||
temp_image.Colourise();
|
||||
|
@ -199,7 +193,7 @@ void Image::WriteJpeg( const char *filename ) const
|
|||
}
|
||||
jpeg_set_defaults(&cinfo);
|
||||
cinfo.dct_method = JDCT_FASTEST;
|
||||
jpeg_set_quality(&cinfo, (int)config.Item( ZM_JPEG_FILE_QUALITY ), false);
|
||||
jpeg_set_quality(&cinfo, config.jpeg_file_quality, false);
|
||||
jpeg_start_compress(&cinfo, TRUE);
|
||||
|
||||
JSAMPROW row_pointer; /* pointer to a single row */
|
||||
|
@ -254,7 +248,7 @@ void Image::DecodeJpeg( JOCTET *inbuffer, int inbuffer_size )
|
|||
|
||||
void Image::EncodeJpeg( JOCTET *outbuffer, int *outbuffer_size ) const
|
||||
{
|
||||
if ( colour_jpeg_files && colours == 1 )
|
||||
if ( config.colour_jpeg_files && colours == 1 )
|
||||
{
|
||||
Image temp_image( *this );
|
||||
temp_image.Colourise();
|
||||
|
@ -282,7 +276,7 @@ void Image::EncodeJpeg( JOCTET *outbuffer, int *outbuffer_size ) const
|
|||
}
|
||||
jpeg_set_defaults(&cinfo);
|
||||
cinfo.dct_method = JDCT_FASTEST;
|
||||
jpeg_set_quality(&cinfo, (int)config.Item( ZM_JPEG_IMAGE_QUALITY ), false);
|
||||
jpeg_set_quality(&cinfo, config.jpeg_file_quality, false);
|
||||
jpeg_start_compress(&cinfo, TRUE);
|
||||
|
||||
JSAMPROW row_pointer; /* pointer to a single row */
|
||||
|
@ -371,7 +365,7 @@ void Image::Blend( const Image &image, int transparency ) const
|
|||
{
|
||||
assert( width == image.width && height == image.height && colours == image.colours );
|
||||
|
||||
if ( fast_image_blends )
|
||||
if ( config.fast_image_blends )
|
||||
{
|
||||
BlendTablePtr blend_ptr = GetBlendTable( transparency );
|
||||
|
||||
|
@ -540,7 +534,7 @@ Image *Image::Delta( const Image &image ) const
|
|||
register int red, green, blue;
|
||||
while( psrc < (buffer+size) )
|
||||
{
|
||||
if ( y_image_deltas )
|
||||
if ( config.y_image_deltas )
|
||||
{
|
||||
//Info(( "RS:%d, RR: %d", *psrc, *pref ));
|
||||
red = y_r_table[*psrc++ - *pref++];
|
||||
|
|
|
@ -50,9 +50,6 @@ protected:
|
|||
|
||||
protected:
|
||||
static bool initialised;
|
||||
static bool y_image_deltas;
|
||||
static bool fast_image_blends;
|
||||
static bool colour_jpeg_files;
|
||||
static unsigned char *abs_table;
|
||||
static unsigned char *y_r_table;
|
||||
static unsigned char *y_g_table;
|
||||
|
|
|
@ -114,7 +114,8 @@ void LocalCamera::Initialise()
|
|||
if ( ioctl( m_videohandle, VIDIOCSPICT, &vid_pic ) < 0 )
|
||||
{
|
||||
Error(( "Failed to set picture attributes: %s", strerror(errno) ));
|
||||
if ( (bool)config.Item( ZM_STRICT_VIDEO_CONFIG ) ) exit(-1);
|
||||
if ( config.strict_video_config )
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
struct video_window vid_win;
|
||||
|
@ -140,7 +141,8 @@ void LocalCamera::Initialise()
|
|||
if ( ioctl( m_videohandle, VIDIOCSWIN, &vid_win ) < 0 )
|
||||
{
|
||||
Error(( "Failed to set window attributes: %s", strerror(errno) ));
|
||||
if ( (bool)config.Item( ZM_STRICT_VIDEO_CONFIG ) ) exit(-1);
|
||||
if ( config.strict_video_config )
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if ( ioctl(m_videohandle, VIDIOCGMBUF, &m_vmb) < 0 )
|
||||
|
@ -186,7 +188,8 @@ void LocalCamera::Initialise()
|
|||
if ( ioctl( m_videohandle, VIDIOCSCHAN, &vid_src) < 0 )
|
||||
{
|
||||
Error(( "Failed to set camera source %d: %s", channel, strerror(errno) ));
|
||||
if ( (bool)config.Item( ZM_STRICT_VIDEO_CONFIG ) ) exit(-1);
|
||||
if ( config.strict_video_config )
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if ( ioctl( m_videohandle, VIDIOCGWIN, &vid_win) < 0 )
|
||||
|
@ -785,7 +788,7 @@ int LocalCamera::PostCapture( Image &image )
|
|||
}
|
||||
case VIDEO_PALETTE_RGB24 :
|
||||
{
|
||||
if ( (bool)config.Item( ZM_LOCAL_BGR_INVERT ) )
|
||||
if ( config.local_bgr_invert )
|
||||
{
|
||||
int size = width*height*3;
|
||||
unsigned char *s_ptr = buffer;
|
||||
|
|
|
@ -27,17 +27,6 @@
|
|||
#include "zm_local_camera.h"
|
||||
#include "zm_remote_camera.h"
|
||||
|
||||
bool Monitor::initialised = false;
|
||||
bool Monitor::record_event_stats;
|
||||
bool Monitor::record_diag_images;
|
||||
bool Monitor::opt_adaptive_skip;
|
||||
bool Monitor::create_analysis_images;
|
||||
bool Monitor::blend_alarmed_images;
|
||||
bool Monitor::timestamp_on_capture;
|
||||
int Monitor::bulk_frame_interval;
|
||||
bool Monitor::opt_control;
|
||||
const char *Monitor::dir_events;
|
||||
|
||||
Monitor::Monitor(
|
||||
int p_id,
|
||||
char *p_name,
|
||||
|
@ -219,9 +208,6 @@ Monitor::~Monitor()
|
|||
|
||||
void Monitor::Setup()
|
||||
{
|
||||
if ( !initialised )
|
||||
Initialise();
|
||||
|
||||
fps = 0.0;
|
||||
event_count = 0;
|
||||
image_count = 0;
|
||||
|
@ -240,7 +226,7 @@ void Monitor::Setup()
|
|||
|
||||
int shared_data_size = sizeof(SharedData)+sizeof(TriggerData)+(image_buffer_count*sizeof(time_t))+(image_buffer_count*camera->ImageSize());
|
||||
Debug( 1, ( "shm.size=%d", shared_data_size ));
|
||||
shmid = shmget( (int)config.Item( ZM_SHM_KEY )|id, shared_data_size, IPC_CREAT|0700 );
|
||||
shmid = shmget( config.shm_key|id, shared_data_size, IPC_CREAT|0700 );
|
||||
if ( shmid < 0 )
|
||||
{
|
||||
Error(( "Can't shmget, probably not enough shared memory space free: %s", strerror(errno)));
|
||||
|
@ -310,7 +296,7 @@ void Monitor::Setup()
|
|||
{
|
||||
static char path[PATH_MAX];
|
||||
|
||||
strncpy( path, dir_events, sizeof(path) );
|
||||
strncpy( path, config.dir_events, sizeof(path) );
|
||||
|
||||
struct stat statbuf;
|
||||
errno = 0;
|
||||
|
@ -323,7 +309,7 @@ void Monitor::Setup()
|
|||
}
|
||||
}
|
||||
|
||||
snprintf( path, sizeof(path), "%s/%d", dir_events, id );
|
||||
snprintf( path, sizeof(path), "%s/%d", config.dir_events, id );
|
||||
|
||||
errno = 0;
|
||||
stat( path, &statbuf );
|
||||
|
@ -335,7 +321,7 @@ void Monitor::Setup()
|
|||
}
|
||||
char temp_path[PATH_MAX];
|
||||
snprintf( temp_path, sizeof(temp_path), "%d", id );
|
||||
chdir( dir_events );
|
||||
chdir( config.dir_events );
|
||||
symlink( temp_path, name );
|
||||
chdir( ".." );
|
||||
}
|
||||
|
@ -376,7 +362,7 @@ int Monitor::GetImage( int index, int scale ) const
|
|||
|
||||
static char filename[PATH_MAX];
|
||||
snprintf( filename, sizeof(filename), "%s.jpg", name );
|
||||
if ( !timestamp_on_capture )
|
||||
if ( !config.timestamp_on_capture )
|
||||
{
|
||||
TimestampImage( &snap_image, snap->timestamp->tv_sec );
|
||||
}
|
||||
|
@ -673,7 +659,7 @@ bool Monitor::Analyse()
|
|||
}
|
||||
|
||||
int index;
|
||||
if ( opt_adaptive_skip )
|
||||
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;
|
||||
|
@ -787,7 +773,7 @@ bool Monitor::Analyse()
|
|||
|
||||
Info(( "%s: %03d - Starting new event %d", name, image_count, event->Id() ));
|
||||
|
||||
//if ( (bool)config.Item( ZM_OVERLAP_TIMED_EVENTS ) )
|
||||
//if ( config.overlap_timed_events )
|
||||
if ( true )
|
||||
{
|
||||
int pre_index = ((index+image_buffer_count)-pre_event_count)%image_buffer_count;
|
||||
|
@ -807,7 +793,7 @@ bool Monitor::Analyse()
|
|||
}
|
||||
if ( score )
|
||||
{
|
||||
if ( opt_control && track_motion && (activity_state != ACTIVE) )
|
||||
if ( config.opt_control && track_motion && (activity_state != ACTIVE) )
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
@ -864,7 +850,7 @@ bool Monitor::Analyse()
|
|||
}
|
||||
else
|
||||
{
|
||||
if ( opt_control && track_motion && (activity_state != ACTIVE) )
|
||||
if ( config.opt_control && track_motion && (activity_state != ACTIVE) )
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
@ -909,7 +895,7 @@ bool Monitor::Analyse()
|
|||
{
|
||||
if ( state == PREALARM || state == ALARM )
|
||||
{
|
||||
if ( create_analysis_images )
|
||||
if ( config.create_analysis_images )
|
||||
{
|
||||
bool got_anal_image = false;
|
||||
Image alarm_image( *snap_image );
|
||||
|
@ -922,7 +908,7 @@ bool Monitor::Analyse()
|
|||
alarm_image.Overlay( *(zones[i]->AlarmImage()) );
|
||||
got_anal_image = true;
|
||||
}
|
||||
if ( record_event_stats && state == ALARM )
|
||||
if ( config.record_event_stats && state == ALARM )
|
||||
{
|
||||
zones[i]->RecordStats( event );
|
||||
}
|
||||
|
@ -959,7 +945,7 @@ bool Monitor::Analyse()
|
|||
{
|
||||
if ( !(image_count%(frame_skip+1)) )
|
||||
{
|
||||
if ( bulk_frame_interval > 1 )
|
||||
if ( config.bulk_frame_interval > 1 )
|
||||
{
|
||||
event->AddFrame( snap_image, *timestamp, -1 );
|
||||
}
|
||||
|
@ -991,7 +977,7 @@ bool Monitor::Analyse()
|
|||
}
|
||||
}
|
||||
|
||||
if ( (function == MODECT || function == MOCORD) && (blend_alarmed_images || state != ALARM) )
|
||||
if ( (function == MODECT || function == MOCORD) && (config.blend_alarmed_images || state != ALARM) )
|
||||
{
|
||||
ref_image.Blend( *snap_image, ref_blend_perc );
|
||||
}
|
||||
|
@ -1335,7 +1321,7 @@ void Monitor::StreamImages( int scale, int maxfps, time_t ttl )
|
|||
|
||||
snap_image = &scaled_image;
|
||||
}
|
||||
if ( !timestamp_on_capture )
|
||||
if ( !config.timestamp_on_capture )
|
||||
{
|
||||
TimestampImage( snap_image, snap->timestamp->tv_sec );
|
||||
}
|
||||
|
@ -1378,7 +1364,7 @@ void Monitor::SingleImage( int scale)
|
|||
scaled_image.Scale( scale );
|
||||
snap_image = &scaled_image;
|
||||
}
|
||||
if ( !timestamp_on_capture )
|
||||
if ( !config.timestamp_on_capture )
|
||||
{
|
||||
TimestampImage( snap_image, snap->timestamp->tv_sec );
|
||||
}
|
||||
|
@ -1393,8 +1379,6 @@ void Monitor::SingleImage( int scale)
|
|||
|
||||
void Monitor::StreamMpeg( const char *format, int scale, int maxfps, int bitrate )
|
||||
{
|
||||
bool timed_frames = (bool)config.Item( ZM_VIDEO_TIMED_FRAMES );
|
||||
|
||||
int fps = int(GetFPS());
|
||||
if ( !fps )
|
||||
fps = 5;
|
||||
|
@ -1450,7 +1434,7 @@ void Monitor::StreamMpeg( const char *format, int scale, int maxfps, int bitrate
|
|||
|
||||
snap_image = &scaled_image;
|
||||
}
|
||||
if ( !timestamp_on_capture )
|
||||
if ( !config.timestamp_on_capture )
|
||||
{
|
||||
TimestampImage( snap_image, snap->timestamp->tv_sec );
|
||||
}
|
||||
|
@ -1460,7 +1444,7 @@ void Monitor::StreamMpeg( const char *format, int scale, int maxfps, int bitrate
|
|||
base_time = *(snap->timestamp);
|
||||
}
|
||||
DELTA_TIMEVAL( delta_time, *(snap->timestamp), base_time, DT_PREC_3 );
|
||||
double pts = vid_stream.EncodeFrame( snap_image->Buffer(), snap_image->Size(), timed_frames, delta_time.delta );
|
||||
double pts = vid_stream.EncodeFrame( snap_image->Buffer(), snap_image->Size(), config.video_timed_frames, delta_time.delta );
|
||||
//Info(( "FC:%d, DTD:%d, PTS:%lf", frame_count, delta_time.delta, pts ));
|
||||
}
|
||||
frame_count++;
|
||||
|
@ -1528,24 +1512,24 @@ unsigned int Monitor::Compare( const Image &comp_image )
|
|||
|
||||
if ( n_zones <= 0 ) return( alarm );
|
||||
|
||||
if ( record_diag_images )
|
||||
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", dir_events, id );
|
||||
snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-r.jpg", config.dir_events, id );
|
||||
}
|
||||
ref_image.WriteJpeg( diag_path );
|
||||
}
|
||||
|
||||
Image *delta_image = ref_image.Delta( comp_image );
|
||||
|
||||
if ( record_diag_images )
|
||||
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", dir_events, id );
|
||||
snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-d.jpg", config.dir_events, id );
|
||||
}
|
||||
delta_image->WriteJpeg( diag_path );
|
||||
}
|
||||
|
@ -1608,7 +1592,7 @@ unsigned int Monitor::Compare( const Image &comp_image )
|
|||
score += zone->Score();
|
||||
zone->SetAlarm();
|
||||
Debug( 3, ( "Zone is alarmed, zone score = %d", zone->Score() ));
|
||||
if ( opt_control && track_motion )
|
||||
if ( config.opt_control && track_motion )
|
||||
{
|
||||
if ( (int)zone->Score() > top_score )
|
||||
{
|
||||
|
@ -1635,7 +1619,7 @@ unsigned int Monitor::Compare( const Image &comp_image )
|
|||
score += zone->Score();
|
||||
zone->SetAlarm();
|
||||
Debug( 3, ( "Zone is alarmed, zone score = %d", zone->Score() ));
|
||||
if ( opt_control && track_motion )
|
||||
if ( config.opt_control && track_motion )
|
||||
{
|
||||
if ( zone->Score() > top_score )
|
||||
{
|
||||
|
|
|
@ -65,18 +65,6 @@ public:
|
|||
|
||||
typedef enum { ACTIVE, SUSPENDED, RESUMING } ActivityState;
|
||||
|
||||
protected:
|
||||
static bool initialised;
|
||||
static bool record_event_stats;
|
||||
static bool record_diag_images;
|
||||
static bool opt_adaptive_skip;
|
||||
static bool create_analysis_images;
|
||||
static bool blend_alarmed_images;
|
||||
static bool timestamp_on_capture;
|
||||
static int bulk_frame_interval;
|
||||
static bool opt_control;
|
||||
static const char *dir_events;
|
||||
|
||||
protected:
|
||||
// These are read from the DB and thereafter remain unchanged
|
||||
int id;
|
||||
|
@ -168,22 +156,6 @@ protected:
|
|||
|
||||
Camera *camera;
|
||||
|
||||
protected:
|
||||
static void Initialise()
|
||||
{
|
||||
initialised = true;
|
||||
|
||||
record_event_stats = (bool)config.Item( ZM_RECORD_EVENT_STATS );
|
||||
record_diag_images = (bool)config.Item( ZM_RECORD_DIAG_IMAGES );
|
||||
opt_adaptive_skip = (bool)config.Item( ZM_OPT_ADAPTIVE_SKIP );
|
||||
create_analysis_images = (bool)config.Item( ZM_CREATE_ANALYSIS_IMAGES );
|
||||
blend_alarmed_images = (bool)config.Item( ZM_BLEND_ALARMED_IMAGES );
|
||||
timestamp_on_capture = (bool)config.Item( ZM_TIMESTAMP_ON_CAPTURE );
|
||||
bulk_frame_interval = (int)config.Item( ZM_BULK_FRAME_INTERVAL );
|
||||
opt_control = (bool)config.Item( ZM_OPT_CONTROL );
|
||||
dir_events = (const char *)config.Item( ZM_DIR_EVENTS );
|
||||
}
|
||||
|
||||
public:
|
||||
Monitor( int p_id, char *p_name, int p_function, int p_device, int p_channel, int p_format, int p_width, int p_height, int p_palette, int p_orientation, int p_brightness, int p_contrast, int p_hue, int p_colour, char *p_event_prefix, 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_alarm_frame_count, int p_section_length, int p_frame_skip, int p_capture_delay, int p_fps_report_interval, int p_ref_blend_perc, bool p_track_motion, Purpose p_purpose=QUERY, int p_n_zones=0, Zone *p_zones[]=0 );
|
||||
Monitor( int p_id, char *p_name, int p_function, const char *p_host, const char *p_port, const char *p_path, int p_width, int p_height, int p_palette, int p_orientation, int p_brightness, int p_contrast, int p_hue, int p_colour, char *p_event_prefix, 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_alarm_frame_count, int p_section_length, int p_frame_skip, int p_capture_delay, int p_fps_report_interval, int p_ref_blend_perc, bool p_track_motion, Purpose p_purpose=QUERY, int p_n_zones=0, Zone *p_zones[]=0 );
|
||||
|
@ -283,7 +255,7 @@ public:
|
|||
}
|
||||
|
||||
gettimeofday( image_buffer[index].timestamp, &dummy_tz );
|
||||
if ( timestamp_on_capture )
|
||||
if ( config.timestamp_on_capture )
|
||||
{
|
||||
TimestampImage( &image, image_buffer[index].timestamp->tv_sec );
|
||||
}
|
||||
|
|
|
@ -38,8 +38,6 @@
|
|||
#include "zm.h"
|
||||
#include "zm_remote_camera.h"
|
||||
|
||||
bool RemoteCamera::netcam_regexps = false;
|
||||
|
||||
RemoteCamera::RemoteCamera( const char *p_host, const char *p_port, const char *p_path, int p_width, int p_height, int p_palette, int p_brightness, int p_contrast, int p_hue, int p_colour, bool p_capture ) : Camera( REMOTE, p_width, p_height, p_palette, p_brightness, p_contrast, p_hue, p_colour, p_capture ), host( p_host ), port( p_port ), path( p_path )
|
||||
{
|
||||
auth = 0;
|
||||
|
@ -67,8 +65,6 @@ RemoteCamera::~RemoteCamera()
|
|||
|
||||
void RemoteCamera::Initialise()
|
||||
{
|
||||
netcam_regexps = (bool)config.Item( ZM_NETCAM_REGEXPS );
|
||||
|
||||
if( !host )
|
||||
{
|
||||
Error(( "No host specified for remote get" ));
|
||||
|
@ -112,8 +108,8 @@ void RemoteCamera::Initialise()
|
|||
|
||||
if ( !request[0] )
|
||||
{
|
||||
snprintf( request, sizeof(request), "GET %s HTTP/%s\n", path, (const char *)config.Item( ZM_HTTP_VERSION ) );
|
||||
snprintf( &(request[strlen(request)]), sizeof(request)-strlen(request), "User-Agent: %s/%s\n", (const char *)config.Item( ZM_HTTP_UA ), ZM_VERSION );
|
||||
snprintf( request, sizeof(request), "GET %s HTTP/%s\n", path, config.http_version );
|
||||
snprintf( &(request[strlen(request)]), sizeof(request)-strlen(request), "User-Agent: %s/%s\n", config.http_ua, ZM_VERSION );
|
||||
snprintf( &(request[strlen(request)]), sizeof(request)-strlen(request), "Host: %s\n", host );
|
||||
snprintf( &(request[strlen(request)]), sizeof(request)-strlen(request), "Connection: Keep-Alive\n" );
|
||||
if ( auth )
|
||||
|
@ -125,8 +121,8 @@ void RemoteCamera::Initialise()
|
|||
}
|
||||
if ( !timeout.tv_sec )
|
||||
{
|
||||
timeout.tv_sec = (int)config.Item( ZM_HTTP_TIMEOUT )/1000;
|
||||
timeout.tv_usec = (int)config.Item( ZM_HTTP_TIMEOUT )%1000;
|
||||
timeout.tv_sec = config.http_timeout/1000;
|
||||
timeout.tv_usec = config.http_timeout%1000;
|
||||
}
|
||||
|
||||
int max_size = width*height*colours;
|
||||
|
@ -258,7 +254,7 @@ int RemoteCamera::ReadData( Buffer &buffer, int bytes_expected )
|
|||
int RemoteCamera::GetResponse()
|
||||
{
|
||||
#if HAVE_LIBPCRE
|
||||
if ( netcam_regexps )
|
||||
if ( config.netcam_regexps )
|
||||
{
|
||||
const char *header = 0;
|
||||
int header_len = 0;
|
||||
|
|
|
@ -188,7 +188,7 @@ User *zmLoadAuthUser( const char *auth, bool use_remote_addr )
|
|||
struct tm *now_tm = localtime( &now );
|
||||
|
||||
snprintf( auth_key, sizeof(auth_key), "%s%s%s%s%d%d%d%d",
|
||||
(const char *)config.Item( ZM_AUTH_SECRET ),
|
||||
config.auth_secret,
|
||||
user,
|
||||
pass,
|
||||
remote_addr,
|
||||
|
|
|
@ -23,15 +23,8 @@
|
|||
#include "zm_image.h"
|
||||
#include "zm_monitor.h"
|
||||
|
||||
bool Zone::initialised = false;
|
||||
bool Zone::record_diag_images;
|
||||
bool Zone::create_analysis_images;
|
||||
|
||||
void Zone::Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Box &p_limits, 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 )
|
||||
{
|
||||
if ( !initialised )
|
||||
Initialise();
|
||||
|
||||
monitor = p_monitor;
|
||||
|
||||
id = p_id;
|
||||
|
@ -123,12 +116,12 @@ bool Zone::CheckAlarms( const Image *delta_image )
|
|||
}
|
||||
}
|
||||
}
|
||||
if ( record_diag_images )
|
||||
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", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Name(), id, 1 );
|
||||
snprintf( diag_path, sizeof(diag_path), "%s/%s/diag-%d-%d.jpg", config.dir_events, monitor->Name(), id, 1 );
|
||||
}
|
||||
diff_image->WriteJpeg( diag_path );
|
||||
}
|
||||
|
@ -199,12 +192,12 @@ bool Zone::CheckAlarms( const Image *delta_image )
|
|||
{
|
||||
alarm_filter_pixels = alarm_pixels;
|
||||
}
|
||||
if ( record_diag_images )
|
||||
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", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Id(), id, 2 );
|
||||
snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-%d-%d.jpg", config.dir_events, monitor->Id(), id, 2 );
|
||||
}
|
||||
diff_image->WriteJpeg( diag_path );
|
||||
}
|
||||
|
@ -347,12 +340,12 @@ bool Zone::CheckAlarms( const Image *delta_image )
|
|||
}
|
||||
}
|
||||
}
|
||||
if ( record_diag_images )
|
||||
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", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Id(), id, 3 );
|
||||
snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-%d-%d.jpg", config.dir_events, monitor->Id(), id, 3 );
|
||||
}
|
||||
diff_image->WriteJpeg( diag_path );
|
||||
}
|
||||
|
@ -398,12 +391,12 @@ bool Zone::CheckAlarms( const Image *delta_image )
|
|||
}
|
||||
}
|
||||
}
|
||||
if ( record_diag_images )
|
||||
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", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Id(), id, 4 );
|
||||
snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-%d-%d.jpg", config.dir_events, monitor->Id(), id, 4 );
|
||||
}
|
||||
diff_image->WriteJpeg( diag_path );
|
||||
}
|
||||
|
@ -483,7 +476,7 @@ bool Zone::CheckAlarms( const Image *delta_image )
|
|||
alarm_centre = alarm_box.Centre();
|
||||
}
|
||||
|
||||
if ( (type < PRECLUSIVE) && check_method >= BLOBS && create_analysis_images )
|
||||
if ( (type < PRECLUSIVE) && check_method >= BLOBS && config.create_analysis_images )
|
||||
{
|
||||
image = diff_image->HighlightEdges( alarm_rgb, &limits );
|
||||
// Only need to delete this when 'image' becomes detached and points somewhere else
|
||||
|
|
|
@ -38,11 +38,6 @@ public:
|
|||
typedef enum { ACTIVE=1, INCLUSIVE, EXCLUSIVE, PRECLUSIVE, INACTIVE } ZoneType;
|
||||
typedef enum { ALARMED_PIXELS=1, FILTERED_PIXELS, BLOBS } CheckMethod;
|
||||
|
||||
protected:
|
||||
static bool initialised;
|
||||
static bool record_diag_images;
|
||||
static bool create_analysis_images;
|
||||
|
||||
protected:
|
||||
// Inputs
|
||||
Monitor *monitor;
|
||||
|
@ -83,13 +78,6 @@ protected:
|
|||
Image *image;
|
||||
|
||||
protected:
|
||||
static void Initialise()
|
||||
{
|
||||
initialised = true;
|
||||
record_diag_images = (bool)config.Item( ZM_RECORD_DIAG_IMAGES );
|
||||
create_analysis_images = (bool)config.Item( ZM_CREATE_ANALYSIS_IMAGES );
|
||||
}
|
||||
|
||||
void Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Box &p_limits, 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 );
|
||||
|
||||
public:
|
||||
|
|
|
@ -131,7 +131,7 @@ int main( int argc, char *argv[] )
|
|||
{
|
||||
Info(( "Warming up" ));
|
||||
|
||||
if ( (bool)config.Item( ZM_OPT_FRAME_SERVER ) )
|
||||
if ( config.opt_frame_server )
|
||||
{
|
||||
Event::OpenFrameSocket( monitor->Id() );
|
||||
}
|
||||
|
|
|
@ -198,8 +198,6 @@ int main( int argc, char *argv[] )
|
|||
capture_delays[i] = monitors[i]->GetCaptureDelay();
|
||||
}
|
||||
|
||||
bool no_max_fps = (bool)config.Item( ZM_NO_MAX_FPS_ON_ALARM );
|
||||
|
||||
struct timeval now;
|
||||
struct DeltaTimeval delta_time;
|
||||
while( !zmc_terminate )
|
||||
|
@ -209,7 +207,7 @@ int main( int argc, char *argv[] )
|
|||
for ( int i = 0; i < n_monitors; i++ )
|
||||
{
|
||||
long min_delay = MAXINT;
|
||||
if ( no_max_fps && (monitors[i]->GetState() == Monitor::ALARM) )
|
||||
if ( config.no_max_fps_on_alarm && (monitors[i]->GetState() == Monitor::ALARM) )
|
||||
{
|
||||
next_delays[i] = 0;
|
||||
}
|
||||
|
|
|
@ -80,7 +80,7 @@ int OpenSocket( int monitor_id )
|
|||
}
|
||||
|
||||
char sock_path[PATH_MAX] = "";
|
||||
snprintf( sock_path, sizeof(sock_path), "%s/zmf-%d.sock", (const char *)config.Item( ZM_PATH_SOCKS ), monitor_id );
|
||||
snprintf( sock_path, sizeof(sock_path), "%s/zmf-%d.sock", config.path_socks, monitor_id );
|
||||
if ( unlink( sock_path ) < 0 )
|
||||
{
|
||||
Warning(( "Can't unlink '%s': %s", sock_path, strerror(errno) ));
|
||||
|
@ -202,8 +202,8 @@ int main( int argc, char *argv[] )
|
|||
|
||||
char capt_path[PATH_MAX];
|
||||
char anal_path[PATH_MAX];
|
||||
snprintf( capt_path, sizeof(capt_path), "%s/%d/%%d/%%0%dd-capture.jpg", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Id(), (int)config.Item( ZM_EVENT_IMAGE_DIGITS ) );
|
||||
snprintf( anal_path, sizeof(anal_path), "%s/%d/%%d/%%0%dd-analyse.jpg", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Id(), (int)config.Item( ZM_EVENT_IMAGE_DIGITS ) );
|
||||
snprintf( capt_path, sizeof(capt_path), "%s/%d/%%d/%%0%dd-capture.jpg", config.dir_events, monitor->Id(), config.event_image_digits );
|
||||
snprintf( anal_path, sizeof(anal_path), "%s/%d/%%d/%%0%dd-analyse.jpg", config.dir_events, monitor->Id(), config.event_image_digits );
|
||||
|
||||
sigset_t block_set;
|
||||
sigemptyset( &block_set );
|
||||
|
|
|
@ -137,13 +137,11 @@ int main( int argc, char *argv[] )
|
|||
// Yadda yadda
|
||||
mysql_free_result( result );
|
||||
|
||||
if ( (bool)config.Item( ZM_OPT_X10 ) )
|
||||
if ( config.opt_x10 )
|
||||
{
|
||||
const char *x10_port = (const char *)config.Item( ZM_X10_DEVICE );
|
||||
|
||||
if ( x10_port )
|
||||
if ( config.x10_device )
|
||||
{
|
||||
fixDevice( x10_port );
|
||||
fixDevice( config.x10_device );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -114,7 +114,7 @@ int main( int argc, const char *argv[] )
|
|||
bitrate = atoi( value );
|
||||
else if ( !strcmp( name, "ttl" ) )
|
||||
ttl = atoi(value);
|
||||
else if ( (bool)config.Item( ZM_OPT_USE_AUTH ) )
|
||||
else if ( config.opt_use_auth )
|
||||
{
|
||||
if ( !strcmp( name, "user" ) )
|
||||
{
|
||||
|
@ -132,7 +132,7 @@ int main( int argc, const char *argv[] )
|
|||
}
|
||||
}
|
||||
|
||||
if ( (bool)config.Item( ZM_OPT_USE_AUTH ) )
|
||||
if ( config.opt_use_auth )
|
||||
{
|
||||
User *user = 0;
|
||||
if ( *username && *password )
|
||||
|
|
|
@ -319,7 +319,7 @@ int main( int argc, char *argv[] )
|
|||
|
||||
zmLoadConfig();
|
||||
|
||||
if ( (bool)config.Item( ZM_OPT_USE_AUTH ) )
|
||||
if ( config.opt_use_auth )
|
||||
{
|
||||
if ( !(username && password) && !auth )
|
||||
{
|
||||
|
@ -466,7 +466,7 @@ int main( int argc, char *argv[] )
|
|||
{
|
||||
if ( verbose )
|
||||
printf( "Forcing alarm on\n" );
|
||||
monitor->ForceAlarmOn( (int)config.Item( ZM_FORCED_ALARM_SCORE ), "Forced Web" );
|
||||
monitor->ForceAlarmOn( config.forced_alarm_score, "Forced Web" );
|
||||
}
|
||||
if ( function & NOALARM )
|
||||
{
|
||||
|
|
|
@ -1706,13 +1706,67 @@ if ( $reprocess )
|
|||
print( CFG_HDR_FILE "// The file is autogenerated by zmconfig.pl\n" );
|
||||
print( CFG_HDR_FILE "// Do not edit this file as any changes will be overwritten\n\n" );
|
||||
my $last_id = 0;
|
||||
my $define_list = "";
|
||||
my $declare_list = "";
|
||||
my $assign_list = "";
|
||||
foreach my $option ( @options )
|
||||
{
|
||||
next if ( !defined($option->{id}) );
|
||||
printf( CFG_HDR_FILE "#define $option->{name} $option->{id}\n" );
|
||||
|
||||
my $opt_id = $option->{id};
|
||||
my $opt_name = $option->{name};
|
||||
my $opt_type = $option->{type};
|
||||
my $var_name = substr( lc($opt_name), 3 );
|
||||
|
||||
$define_list .= sprintf( "#define $opt_name $opt_id\n" );
|
||||
|
||||
$declare_list .= sprintf( "\t" );
|
||||
if ( $opt_type == $types{boolean} )
|
||||
{
|
||||
$declare_list .= sprintf( "bool " );
|
||||
}
|
||||
elsif ( $opt_type == $types{integer} || $opt_type == $types{hexadecimal} )
|
||||
{
|
||||
$declare_list .= sprintf( "int " );
|
||||
}
|
||||
elsif ( $opt_type == $types{decimal} )
|
||||
{
|
||||
$declare_list .= sprintf( "double " );
|
||||
}
|
||||
else
|
||||
{
|
||||
$declare_list .= sprintf( "const char *" );
|
||||
}
|
||||
$declare_list .= sprintf( $var_name.";\\\n" );
|
||||
|
||||
$assign_list .= sprintf( "\t" );
|
||||
$assign_list .= sprintf( $var_name." = " );
|
||||
if ( $opt_type == $types{boolean} )
|
||||
{
|
||||
$assign_list .= sprintf( "(bool)" );
|
||||
}
|
||||
elsif ( $opt_type == $types{integer} || $opt_type == $types{hexadecimal} )
|
||||
{
|
||||
$assign_list .= sprintf( "(int)" );
|
||||
}
|
||||
elsif ( $opt_type == $types{decimal} )
|
||||
{
|
||||
$assign_list .= sprintf( "(double) " );
|
||||
}
|
||||
else
|
||||
{
|
||||
$assign_list .= sprintf( "(const char *)" );
|
||||
}
|
||||
$assign_list .= sprintf( "config.Item( ".$opt_name." );\\\n" );
|
||||
|
||||
$last_id = $option->{id};
|
||||
}
|
||||
printf( CFG_HDR_FILE "#define ZM_MAX_CFG_ID $last_id\n" );
|
||||
printf( CFG_HDR_FILE $define_list."\n\n" );
|
||||
printf( CFG_HDR_FILE "#define ZM_MAX_CFG_ID $last_id\n\n" );
|
||||
printf( CFG_HDR_FILE "#define ZM_CFG_DECLARE_LIST \\\n" );
|
||||
printf( CFG_HDR_FILE $declare_list."\n\n" );
|
||||
printf( CFG_HDR_FILE "#define ZM_CFG_ASSIGN_LIST \\\n" );
|
||||
printf( CFG_HDR_FILE $assign_list."\n\n" );
|
||||
close( CFG_HDR_FILE );
|
||||
|
||||
my @config_files = qw( zm.conf src/zm_config.h web/zm_config.php scripts/zmdc.pl scripts/zmwatch.pl scripts/zmaudit.pl scripts/zmfilter.pl scripts/zmtrigger.pl scripts/zmx10.pl scripts/zmpkg.pl scripts/zmupdate.pl scripts/zmvideo.pl scripts/zmcontrol-pelco-d.pl scripts/zmcontrol-visca.pl scripts/zmcontrol-kx-hcm10.pl scripts/zmtrack.pl scripts/zm db/zmschema.sql );
|
||||
|
|
Loading…
Reference in New Issue