Applied Ian@zestysoft changes.
git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@744 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
parent
48173e6bbb
commit
0aafd9d30b
|
@ -19,7 +19,7 @@ zmu_SOURCES = zmu.cpp $(zm_SOURCES)
|
||||||
zmf_SOURCES = zmf.cpp $(zm_SOURCES)
|
zmf_SOURCES = zmf.cpp $(zm_SOURCES)
|
||||||
zmfix_SOURCES = zmfix.cpp zm_debug.c zm_db.cpp zm.cpp
|
zmfix_SOURCES = zmfix.cpp zm_debug.c zm_db.cpp zm.cpp
|
||||||
|
|
||||||
noinst_HEADERS = zm.h zm_db.h zm_font.h zm_rgb.h zm_config.h zm_config_defines.h zm_debug.h zm_coord.h zm_box.h zm_image.h zm_event.h zm_zone.h zm_camera.h zm_local_camera.h zm_remote_camera.h zm_monitor.h zm_font.h jinclude.h zmf.h
|
noinst_HEADERS = zm.h zm_db.h zm_font.h zm_rgb.h zm_config.h zm_config_defines.h zm_debug.h zm_coord.h zm_box.h zm_image.h zm_event.h zm_zone.h zm_camera.h zm_local_camera.h zm_remote_camera.h zm_monitor.h zm_font.h jinclude.h zmf.h zm_jpeg.h
|
||||||
|
|
||||||
EXTRA_DIST = zm_config.h.z
|
EXTRA_DIST = zm_config.h.z
|
||||||
|
|
||||||
|
|
|
@ -136,7 +136,7 @@ zmu_SOURCES = zmu.cpp $(zm_SOURCES)
|
||||||
zmf_SOURCES = zmf.cpp $(zm_SOURCES)
|
zmf_SOURCES = zmf.cpp $(zm_SOURCES)
|
||||||
zmfix_SOURCES = zmfix.cpp zm_debug.c zm_db.cpp zm.cpp
|
zmfix_SOURCES = zmfix.cpp zm_debug.c zm_db.cpp zm.cpp
|
||||||
|
|
||||||
noinst_HEADERS = zm.h zm_db.h zm_font.h zm_rgb.h zm_config.h zm_config_defines.h zm_debug.h zm_coord.h zm_box.h zm_image.h zm_event.h zm_zone.h zm_camera.h zm_local_camera.h zm_remote_camera.h zm_monitor.h zm_font.h jinclude.h zmf.h
|
noinst_HEADERS = zm.h zm_db.h zm_font.h zm_rgb.h zm_config.h zm_config_defines.h zm_debug.h zm_coord.h zm_box.h zm_image.h zm_event.h zm_zone.h zm_camera.h zm_local_camera.h zm_remote_camera.h zm_monitor.h zm_font.h jinclude.h zmf.h zm_jpeg.h
|
||||||
|
|
||||||
EXTRA_DIST = zm_config.h.z
|
EXTRA_DIST = zm_config.h.z
|
||||||
subdir = src
|
subdir = src
|
||||||
|
|
|
@ -55,10 +55,10 @@ public:
|
||||||
unsigned int Colours() const { return( colours ); }
|
unsigned int Colours() const { return( colours ); }
|
||||||
unsigned int ImageSize() const { return( colours*width*height ); }
|
unsigned int ImageSize() const { return( colours*width*height ); }
|
||||||
|
|
||||||
virtual int Brightness( int p_brightness=-1 ) { return( -1 ); }
|
virtual int Brightness( int/*p_brightness*/=-1 ) { return( -1 ); }
|
||||||
virtual int Hue( int p_hue=-1 ) { return( -1 ); }
|
virtual int Hue( int/*p_hue*/=-1 ) { return( -1 ); }
|
||||||
virtual int Colour( int p_colour=-1 ) { return( -1 ); }
|
virtual int Colour( int/*p_colour*/=-1 ) { return( -1 ); }
|
||||||
virtual int Contrast( int p_contrast=-1 ) { return( -1 ); }
|
virtual int Contrast( int/*p_contrast*/=-1 ) { return( -1 ); }
|
||||||
|
|
||||||
bool CanCapture() const { return( capture ); }
|
bool CanCapture() const { return( capture ); }
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ void ConfigItem::ConvertValue() const
|
||||||
if ( !strcmp( type, "boolean" ) )
|
if ( !strcmp( type, "boolean" ) )
|
||||||
{
|
{
|
||||||
cfg_type = CFG_BOOLEAN;
|
cfg_type = CFG_BOOLEAN;
|
||||||
cfg_value.boolean_value = strtol( value, 0, 2 );
|
cfg_value.boolean_value = (bool)strtol( value, 0, 2 );
|
||||||
}
|
}
|
||||||
else if ( !strcmp( type, "integer" ) )
|
else if ( !strcmp( type, "integer" ) )
|
||||||
{
|
{
|
||||||
|
@ -64,7 +64,7 @@ void ConfigItem::ConvertValue() const
|
||||||
else if ( !strcmp( type, "decimal" ) )
|
else if ( !strcmp( type, "decimal" ) )
|
||||||
{
|
{
|
||||||
cfg_type = CFG_DECIMAL;
|
cfg_type = CFG_DECIMAL;
|
||||||
cfg_value.decimal_value = atof( value );
|
cfg_value.decimal_value = strtod( value, 0 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
//
|
/*
|
||||||
// ZoneMinder Debug Implementation, $Date$, $Revision$
|
* ZoneMinder Debug Implementation, $Date$, $Revision$
|
||||||
// Copyright (C) 2003 Philip Coombes
|
* Copyright (C) 2003 Philip Coombes
|
||||||
//
|
*
|
||||||
// This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
// modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
// as published by the Free Software Foundation; either version 2
|
* as published by the Free Software Foundation; either version 2
|
||||||
// of the License, or (at your option) any later version.
|
* of the License, or (at your option) any later version.
|
||||||
//
|
*
|
||||||
// This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
//
|
*
|
||||||
// You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
// along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
//
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -346,7 +346,7 @@ int zmDbgOutput( const char *fstring, ... )
|
||||||
log_code = LOG_CRIT;
|
log_code = LOG_CRIT;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
//log_code = LOG_DEBUG;
|
/* log_code = LOG_DEBUG; */
|
||||||
log_code = LOG_INFO;
|
log_code = LOG_INFO;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
//
|
/*
|
||||||
// ZoneMinder Debug Interface, $Date$, $Revision$
|
* ZoneMinder Debug Interface, $Date$, $Revision$
|
||||||
// Copyright (C) 2003 Philip Coombes
|
* Copyright (C) 2003 Philip Coombes
|
||||||
//
|
*
|
||||||
// This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
// modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
// as published by the Free Software Foundation; either version 2
|
* as published by the Free Software Foundation; either version 2
|
||||||
// of the License, or (at your option) any later version.
|
* of the License, or (at your option) any later version.
|
||||||
//
|
*
|
||||||
// This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
//
|
*
|
||||||
// You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
// along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
//
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
@ -94,6 +94,14 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* function declarations */
|
||||||
|
void zmUsrHandler( int sig );
|
||||||
|
int zmGetDebugEnv( const char * const command );
|
||||||
|
int zmDebugInitialise( void );
|
||||||
|
int zmDebugTerminate( void );
|
||||||
|
void zmDbgSubtractTime( struct timeval * const tp1, struct timeval * const tp2 );
|
||||||
|
|
||||||
|
|
||||||
#if defined(__STDC__) || defined(__cplusplus)
|
#if defined(__STDC__) || defined(__cplusplus)
|
||||||
int zmDbgInit(void);
|
int zmDbgInit(void);
|
||||||
int zmDbgTerm(void);
|
int zmDbgTerm(void);
|
||||||
|
@ -119,7 +127,7 @@ extern int zm_dbg_flush;
|
||||||
extern int zm_dbg_add_log_id;
|
extern int zm_dbg_add_log_id;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} //extern "C"
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -167,15 +167,26 @@ bool Event::SendFrameImage( const Image *image, bool alarm_frame )
|
||||||
iovecs[1].iov_base = jpg_buffer;
|
iovecs[1].iov_base = jpg_buffer;
|
||||||
iovecs[1].iov_len = jpg_buffer_size;
|
iovecs[1].iov_len = jpg_buffer_size;
|
||||||
|
|
||||||
if ( writev( sd, iovecs, sizeof(iovecs)/sizeof(*iovecs) ) != sizeof(frame_header)+jpg_buffer_size )
|
ssize_t writev_size = sizeof(frame_header)+jpg_buffer_size;
|
||||||
|
ssize_t writev_result = writev( sd, iovecs, sizeof(iovecs)/sizeof(*iovecs));
|
||||||
|
if ( writev_result != writev_size )
|
||||||
{
|
{
|
||||||
if ( errno == EAGAIN )
|
if ( writev_result < 0 )
|
||||||
{
|
{
|
||||||
Warning(( "Blocking write detected" ));
|
if ( errno == EAGAIN )
|
||||||
|
{
|
||||||
|
Warning(( "Blocking write detected" ));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Error(( "Can't write frame: %s", strerror(errno) ));
|
||||||
|
close( sd );
|
||||||
|
sd = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Error(( "Can't write frame: %s", strerror(errno) ));
|
Error(( "Incomplete frame write: %d of %d bytes written", writev_result, writev_size ));
|
||||||
close( sd );
|
close( sd );
|
||||||
sd = -1;
|
sd = -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
// along with this program; if not, write to the Free Software
|
// along with this program; if not, write to the Free Software
|
||||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "zm.h"
|
#include "zm.h"
|
||||||
#include "zm_font.h"
|
#include "zm_font.h"
|
||||||
#include "zm_image.h"
|
#include "zm_image.h"
|
||||||
|
@ -454,8 +453,6 @@ Image *Image::Delta( const Image &image ) const
|
||||||
|
|
||||||
Image *result = new Image( width, height, 1 );
|
Image *result = new Image( width, height, 1 );
|
||||||
|
|
||||||
typedef JSAMPLE IMAGE[width][height][colours];
|
|
||||||
|
|
||||||
unsigned char *psrc = buffer;
|
unsigned char *psrc = buffer;
|
||||||
unsigned char *pref = image.buffer;
|
unsigned char *pref = image.buffer;
|
||||||
unsigned char *pdiff = result->buffer;
|
unsigned char *pdiff = result->buffer;
|
||||||
|
|
|
@ -30,14 +30,11 @@
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include <jpeglib.h>
|
|
||||||
|
|
||||||
#if !HAVE_DECL_ROUND
|
#if !HAVE_DECL_ROUND
|
||||||
double round(double);
|
double round(double);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void jpeg_mem_src(j_decompress_ptr cinfo, JOCTET *inbuffer, int inbuffer_size );
|
#include "zm_jpeg.h"
|
||||||
void jpeg_mem_dest(j_compress_ptr cinfo, JOCTET *outbuffer, int *outbuffer_size );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "zm_rgb.h"
|
#include "zm_rgb.h"
|
||||||
|
@ -78,17 +75,17 @@ public:
|
||||||
height = p_height;
|
height = p_height;
|
||||||
colours = p_colours;
|
colours = p_colours;
|
||||||
size = width*height*colours;
|
size = width*height*colours;
|
||||||
if ( !p_buffer )
|
if ( p_buffer )
|
||||||
|
{
|
||||||
|
our_buffer = false;
|
||||||
|
buffer = p_buffer;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
our_buffer = true;
|
our_buffer = true;
|
||||||
buffer = new JSAMPLE[size];
|
buffer = new JSAMPLE[size];
|
||||||
memset( buffer, 0, size );
|
memset( buffer, 0, size );
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
our_buffer = false;
|
|
||||||
buffer = p_buffer;
|
|
||||||
}
|
|
||||||
blend_buffer = 0;
|
blend_buffer = 0;
|
||||||
}
|
}
|
||||||
Image( const Image &p_image )
|
Image( const Image &p_image )
|
||||||
|
|
|
@ -17,9 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "jinclude.h"
|
#include "zm_jpeg.h"
|
||||||
#include "jpeglib.h"
|
|
||||||
#include "jerror.h"
|
|
||||||
|
|
||||||
/* Expanded data destination object for memory */
|
/* Expanded data destination object for memory */
|
||||||
|
|
||||||
|
@ -218,7 +216,7 @@ static boolean fill_input_buffer (j_decompress_ptr cinfo)
|
||||||
mem_src_ptr src = (mem_src_ptr) cinfo->src;
|
mem_src_ptr src = (mem_src_ptr) cinfo->src;
|
||||||
size_t nbytes;
|
size_t nbytes;
|
||||||
|
|
||||||
memcpy( src->buffer, src->inbuffer, src->inbuffer_size );
|
memcpy( src->buffer, src->inbuffer, (size_t) src->inbuffer_size );
|
||||||
nbytes = src->inbuffer_size;
|
nbytes = src->inbuffer_size;
|
||||||
|
|
||||||
if (nbytes <= 0) {
|
if (nbytes <= 0) {
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* ZoneMinder Jpeg Interface, $Date$, $Revision$
|
||||||
|
* Copyright (C) 2003 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 "jinclude.h"
|
||||||
|
#include "jpeglib.h"
|
||||||
|
#include "jerror.h"
|
||||||
|
|
||||||
|
// Prototypes for memory compress/descompression object */
|
||||||
|
void jpeg_mem_src(j_decompress_ptr cinfo, JOCTET *inbuffer, int inbuffer_size );
|
||||||
|
void jpeg_mem_dest(j_compress_ptr cinfo, JOCTET *outbuffer, int *outbuffer_size );
|
|
@ -301,11 +301,11 @@ int Monitor::GetImage( int index ) const
|
||||||
index = shared_data->last_write_index;
|
index = shared_data->last_write_index;
|
||||||
}
|
}
|
||||||
Snapshot *snap = &image_buffer[index];
|
Snapshot *snap = &image_buffer[index];
|
||||||
Image *image = snap->image;
|
Image *snap_image = snap->image;
|
||||||
|
|
||||||
char filename[64];
|
char filename[64];
|
||||||
sprintf( filename, "%s.jpg", name );
|
sprintf( filename, "%s.jpg", name );
|
||||||
image->WriteJpeg( filename );
|
snap_image->WriteJpeg( filename );
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,8 +316,8 @@ struct timeval Monitor::GetTimestamp( int index ) const
|
||||||
index = shared_data->last_write_index;
|
index = shared_data->last_write_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
Info(( "Index %d = %x", index, image_buffer[index].timestamp ));
|
Info(( "Index %d = %p", index, (void *) image_buffer[index].timestamp ));
|
||||||
Info(( "Timestamp %d.%d", image_buffer[index].timestamp->tv_sec, image_buffer[index].timestamp->tv_usec ));
|
Info(( "Timestamp %ld.%ld", image_buffer[index].timestamp->tv_sec, image_buffer[index].timestamp->tv_usec ));
|
||||||
|
|
||||||
Snapshot *snap = &image_buffer[index];
|
Snapshot *snap = &image_buffer[index];
|
||||||
return( *(snap->timestamp) );
|
return( *(snap->timestamp) );
|
||||||
|
@ -350,9 +350,9 @@ double Monitor::GetFPS() const
|
||||||
Snapshot *snap2 = &image_buffer[index2];
|
Snapshot *snap2 = &image_buffer[index2];
|
||||||
time_t time2 = snap2->timestamp->tv_sec;
|
time_t time2 = snap2->timestamp->tv_sec;
|
||||||
|
|
||||||
double fps = double(image_buffer_count)/(time1-time2);
|
double curr_fps = double(image_buffer_count)/(time1-time2);
|
||||||
|
|
||||||
return( fps );
|
return( curr_fps );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Monitor::ForceAlarmOn()
|
void Monitor::ForceAlarmOn()
|
||||||
|
@ -510,9 +510,9 @@ void Monitor::DumpZoneImage()
|
||||||
{
|
{
|
||||||
int index = shared_data->last_write_index;
|
int index = shared_data->last_write_index;
|
||||||
Snapshot *snap = &image_buffer[index];
|
Snapshot *snap = &image_buffer[index];
|
||||||
Image *image = snap->image;
|
Image *snap_image = snap->image;
|
||||||
|
|
||||||
Image zone_image( *image );
|
Image zone_image( *snap_image );
|
||||||
zone_image.Colourise();
|
zone_image.Colourise();
|
||||||
for( int i = 0; i < n_zones; i++ )
|
for( int i = 0; i < n_zones; i++ )
|
||||||
{
|
{
|
||||||
|
@ -544,7 +544,7 @@ void Monitor::DumpZoneImage()
|
||||||
zone_image.WriteJpeg( filename );
|
zone_image.WriteJpeg( filename );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Monitor::DumpImage( Image *image ) const
|
void Monitor::DumpImage( Image *dump_image ) const
|
||||||
{
|
{
|
||||||
if ( image_count && !(image_count%10) )
|
if ( image_count && !(image_count%10) )
|
||||||
{
|
{
|
||||||
|
@ -552,7 +552,7 @@ void Monitor::DumpImage( Image *image ) const
|
||||||
static char filename[64];
|
static char filename[64];
|
||||||
sprintf( filename, "%s.jpg", name );
|
sprintf( filename, "%s.jpg", name );
|
||||||
sprintf( new_filename, "%s-new.jpg", name );
|
sprintf( new_filename, "%s-new.jpg", name );
|
||||||
image->WriteJpeg( new_filename );
|
dump_image->WriteJpeg( new_filename );
|
||||||
rename( new_filename, filename );
|
rename( new_filename, filename );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -610,13 +610,16 @@ bool Monitor::Analyse()
|
||||||
|
|
||||||
Snapshot *snap = &image_buffer[index];
|
Snapshot *snap = &image_buffer[index];
|
||||||
struct timeval *timestamp = snap->timestamp;
|
struct timeval *timestamp = snap->timestamp;
|
||||||
Image *image = snap->image;
|
Image *snap_image = snap->image;
|
||||||
|
|
||||||
|
static struct timeval **timestamps;
|
||||||
|
static const Image **images;
|
||||||
|
|
||||||
unsigned int score = 0;
|
unsigned int score = 0;
|
||||||
if ( Ready() )
|
if ( Ready() )
|
||||||
{
|
{
|
||||||
if ( function != RECORD && shared_data->force_state != FORCE_OFF )
|
if ( function != RECORD && shared_data->force_state != FORCE_OFF )
|
||||||
score = Compare( *image );
|
score = Compare( *snap_image );
|
||||||
if ( shared_data->force_state == FORCE_ON )
|
if ( shared_data->force_state == FORCE_ON )
|
||||||
score = (int)config.Item( ZM_FORCED_ALARM_SCORE );
|
score = (int)config.Item( ZM_FORCED_ALARM_SCORE );
|
||||||
|
|
||||||
|
@ -633,8 +636,8 @@ bool Monitor::Analyse()
|
||||||
if ( 1 )
|
if ( 1 )
|
||||||
{
|
{
|
||||||
int pre_index = ((index+image_buffer_count)-pre_event_count)%image_buffer_count;
|
int pre_index = ((index+image_buffer_count)-pre_event_count)%image_buffer_count;
|
||||||
struct timeval *timestamps[pre_event_count];
|
if ( !timestamps ) timestamps = new struct timeval *[pre_event_count];
|
||||||
const Image *images[pre_event_count];
|
if ( !images ) images = new const Image *[pre_event_count];
|
||||||
for ( int i = 0; i < pre_event_count; i++ )
|
for ( int i = 0; i < pre_event_count; i++ )
|
||||||
{
|
{
|
||||||
timestamps[i] = image_buffer[pre_index].timestamp;
|
timestamps[i] = image_buffer[pre_index].timestamp;
|
||||||
|
@ -657,8 +660,8 @@ bool Monitor::Analyse()
|
||||||
event = new Event( this, *timestamp );
|
event = new Event( this, *timestamp );
|
||||||
|
|
||||||
int pre_index = ((index+image_buffer_count)-pre_event_count)%image_buffer_count;
|
int pre_index = ((index+image_buffer_count)-pre_event_count)%image_buffer_count;
|
||||||
struct timeval *timestamps[pre_event_count];
|
if ( !timestamps ) timestamps = new struct timeval *[pre_event_count];
|
||||||
const Image *images[pre_event_count];
|
if ( !images ) images = new const Image *[pre_event_count];
|
||||||
for ( int i = 0; i < pre_event_count; i++ )
|
for ( int i = 0; i < pre_event_count; i++ )
|
||||||
{
|
{
|
||||||
timestamps[i] = image_buffer[pre_index].timestamp;
|
timestamps[i] = image_buffer[pre_index].timestamp;
|
||||||
|
@ -703,7 +706,7 @@ bool Monitor::Analyse()
|
||||||
{
|
{
|
||||||
if ( (bool)config.Item( ZM_CREATE_ANALYSIS_IMAGES ) )
|
if ( (bool)config.Item( ZM_CREATE_ANALYSIS_IMAGES ) )
|
||||||
{
|
{
|
||||||
Image alarm_image( *image );
|
Image alarm_image( *snap_image );
|
||||||
for( int i = 0; i < n_zones; i++ )
|
for( int i = 0; i < n_zones; i++ )
|
||||||
{
|
{
|
||||||
if ( zones[i]->Alarmed() )
|
if ( zones[i]->Alarmed() )
|
||||||
|
@ -715,22 +718,22 @@ bool Monitor::Analyse()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
event->AddFrame( *timestamp, image, score, &alarm_image );
|
event->AddFrame( *timestamp, snap_image, score, &alarm_image );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
event->AddFrame( *timestamp, image, score );
|
event->AddFrame( *timestamp, snap_image, score );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( state == ALERT )
|
else if ( state == ALERT )
|
||||||
{
|
{
|
||||||
event->AddFrame( *timestamp, image );
|
event->AddFrame( *timestamp, snap_image );
|
||||||
}
|
}
|
||||||
else if ( state == TAPE )
|
else if ( state == TAPE )
|
||||||
{
|
{
|
||||||
if ( !(image_count%(frame_skip+1)) )
|
if ( !(image_count%(frame_skip+1)) )
|
||||||
{
|
{
|
||||||
event->AddFrame( *timestamp, image );
|
event->AddFrame( *timestamp, snap_image );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -751,8 +754,8 @@ bool Monitor::Analyse()
|
||||||
|
|
||||||
if ( (bool)config.Item( ZM_BLEND_ALARMED_IMAGES ) || state != ALARM )
|
if ( (bool)config.Item( ZM_BLEND_ALARMED_IMAGES ) || state != ALARM )
|
||||||
{
|
{
|
||||||
ref_image.Blend( *image, ref_blend_perc );
|
ref_image.Blend( *snap_image, ref_blend_perc );
|
||||||
//DumpImage( image );
|
//DumpImage( snap_image );
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_data->last_read_index = index%image_buffer_count;
|
shared_data->last_read_index = index%image_buffer_count;
|
||||||
|
@ -1030,8 +1033,8 @@ void Monitor::StreamImages( unsigned long idle, unsigned long refresh, time_t tt
|
||||||
int img_buffer_size = 0;
|
int img_buffer_size = 0;
|
||||||
int loop_count = (idle/refresh)-1;
|
int loop_count = (idle/refresh)-1;
|
||||||
|
|
||||||
time_t start_time;
|
time_t stream_start_time;
|
||||||
time( &start_time );
|
time( &stream_start_time );
|
||||||
|
|
||||||
while ( true )
|
while ( true )
|
||||||
{
|
{
|
||||||
|
@ -1046,15 +1049,15 @@ void Monitor::StreamImages( unsigned long idle, unsigned long refresh, time_t tt
|
||||||
int index = shared_data->last_write_index%image_buffer_count;
|
int index = shared_data->last_write_index%image_buffer_count;
|
||||||
//Info(( "%d: %x - %x", index, image_buffer[index].image, image_buffer[index].image->buffer ));
|
//Info(( "%d: %x - %x", index, image_buffer[index].image, image_buffer[index].image->buffer ));
|
||||||
Snapshot *snap = &image_buffer[index];
|
Snapshot *snap = &image_buffer[index];
|
||||||
Image *image = snap->image;
|
Image *snap_image = snap->image;
|
||||||
|
|
||||||
if ( scale == 1 )
|
if ( scale == 1 )
|
||||||
{
|
{
|
||||||
image->EncodeJpeg( img_buffer, &img_buffer_size );
|
snap_image->EncodeJpeg( img_buffer, &img_buffer_size );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Image scaled_image( *image );
|
Image scaled_image( *snap_image );
|
||||||
|
|
||||||
scaled_image.Scale( scale );
|
scaled_image.Scale( scale );
|
||||||
|
|
||||||
|
@ -1075,7 +1078,7 @@ void Monitor::StreamImages( unsigned long idle, unsigned long refresh, time_t tt
|
||||||
if ( ttl )
|
if ( ttl )
|
||||||
{
|
{
|
||||||
time( &now );
|
time( &now );
|
||||||
if ( (now - start_time) > ttl )
|
if ( (now - stream_start_time) > ttl )
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1130,14 +1133,14 @@ bool Monitor::DumpSettings( char *output, bool verbose )
|
||||||
return( true );
|
return( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int Monitor::Compare( const Image &image )
|
unsigned int Monitor::Compare( const Image &comp_image )
|
||||||
{
|
{
|
||||||
bool alarm = false;
|
bool alarm = false;
|
||||||
unsigned int score = 0;
|
unsigned int score = 0;
|
||||||
|
|
||||||
if ( n_zones <= 0 ) return( alarm );
|
if ( n_zones <= 0 ) return( alarm );
|
||||||
|
|
||||||
Image *delta_image = ref_image.Delta( image );
|
Image *delta_image = ref_image.Delta( comp_image );
|
||||||
|
|
||||||
// Blank out all exclusion zones
|
// Blank out all exclusion zones
|
||||||
for ( int n_zone = 0; n_zone < n_zones; n_zone++ )
|
for ( int n_zone = 0; n_zone < n_zones; n_zone++ )
|
||||||
|
|
|
@ -83,12 +83,13 @@ protected:
|
||||||
int fps_report_interval;// How many images should be captured/processed between reporting the current FPS
|
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.
|
int ref_blend_perc; // Percentage of new image going into reference image.
|
||||||
|
|
||||||
Image ref_image;
|
|
||||||
|
|
||||||
Purpose purpose; // What this monitor has been created to do
|
|
||||||
|
|
||||||
double fps;
|
double fps;
|
||||||
Image image;
|
Image image;
|
||||||
|
Image ref_image;
|
||||||
|
|
||||||
|
Purpose purpose; // What this monitor has been created to do
|
||||||
int event_count;
|
int event_count;
|
||||||
int image_count;
|
int image_count;
|
||||||
int first_alarm_count;
|
int first_alarm_count;
|
||||||
|
@ -251,7 +252,7 @@ public:
|
||||||
return( function > MONITOR && image_count > warmup_count );
|
return( function > MONITOR && image_count > warmup_count );
|
||||||
}
|
}
|
||||||
|
|
||||||
void DumpImage( Image *image ) const;
|
void DumpImage( Image *dump_image ) const;
|
||||||
bool Analyse();
|
bool Analyse();
|
||||||
|
|
||||||
void Adjust( double ratio )
|
void Adjust( double ratio )
|
||||||
|
@ -259,7 +260,7 @@ public:
|
||||||
ref_image.Blend( image, 0.1 );
|
ref_image.Blend( image, 0.1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int Compare( const Image &image );
|
unsigned int Compare( const Image &comp_image );
|
||||||
void ReloadZones();
|
void ReloadZones();
|
||||||
static int Load( int device, Monitor **&monitors, Purpose purpose=QUERY );
|
static int Load( int device, Monitor **&monitors, Purpose purpose=QUERY );
|
||||||
static int Load( const char *host, const char*port, const char*path, Monitor **&monitors, Purpose purpose=QUERY );
|
static int Load( const char *host, const char*port, const char*path, Monitor **&monitors, Purpose purpose=QUERY );
|
||||||
|
|
|
@ -156,14 +156,13 @@ int RemoteCamera::GetHeader( const char *content, const char *header, char *valu
|
||||||
strcat( header_string, ":" );
|
strcat( header_string, ":" );
|
||||||
|
|
||||||
char *header_ptr = strstr( content, header_string );
|
char *header_ptr = strstr( content, header_string );
|
||||||
if ( !header_ptr )
|
int result = -1;
|
||||||
|
if ( header_ptr )
|
||||||
{
|
{
|
||||||
return( -1 );
|
strcat( header_string, " %s" );
|
||||||
|
result = sscanf( header_ptr, header_string, value );
|
||||||
|
//Debug( 3, ( "R:%d, %s\n", result, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
strcat( header_string, " %s" );
|
|
||||||
int result = sscanf( header_ptr, header_string, value );
|
|
||||||
//Debug( 3, ( "R:%d, %s\n", result, value );
|
|
||||||
return( result );
|
return( result );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -466,7 +466,7 @@ int Zone::Load( Monitor *monitor, Zone **&zones )
|
||||||
return( n_zones );
|
return( n_zones );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Zone::DumpSettings( char *output, bool verbose )
|
bool Zone::DumpSettings( char *output, bool /*verbose*/ )
|
||||||
{
|
{
|
||||||
output[0] = 0;
|
output[0] = 0;
|
||||||
|
|
||||||
|
|
16
src/zma.cpp
16
src/zma.cpp
|
@ -26,7 +26,13 @@
|
||||||
|
|
||||||
void zm_die_handler( int signal )
|
void zm_die_handler( int signal )
|
||||||
{
|
{
|
||||||
Info(( "Got signal %d, crashing", signal ));
|
char * error = strsignal(signal);
|
||||||
|
size_t errorStringSize = strlen(error) + strlen("Got signal (), crashing.");
|
||||||
|
char * errorString =(char *) malloc(errorStringSize + 1); // plus 1 for termination char.
|
||||||
|
(void) snprintf(errorString, errorStringSize, "Got signal (%s), crashing.", error);
|
||||||
|
|
||||||
|
Info(( (const char *)errorString ));
|
||||||
|
free(errorString);
|
||||||
exit( signal );
|
exit( signal );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +40,13 @@ bool zma_terminate = false;
|
||||||
|
|
||||||
void zm_term_handler( int signal )
|
void zm_term_handler( int signal )
|
||||||
{
|
{
|
||||||
Info(( "Got TERM signal, exiting" ));
|
char * error = strsignal(signal);
|
||||||
|
size_t errorStringSize = strlen(error) + strlen("Got signal (), exiting.");
|
||||||
|
char * errorString =(char *) malloc(errorStringSize + 1); // plus 1 for termination char.
|
||||||
|
(void) snprintf(errorString, errorStringSize, "Got signal (%s), exiting.", error);
|
||||||
|
|
||||||
|
Info(( (const char *)errorString ));
|
||||||
|
free(errorString);
|
||||||
zma_terminate = true;
|
zma_terminate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
18
src/zmc.cpp
18
src/zmc.cpp
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
bool zmc_terminate = false;
|
bool zmc_terminate = false;
|
||||||
|
|
||||||
void zmc_term_handler( int signal )
|
void zmc_term_handler( int /* signal */ )
|
||||||
{
|
{
|
||||||
Info(( "Got TERM signal, exiting" ));
|
Info(( "Got TERM signal, exiting" ));
|
||||||
zmc_terminate = true;
|
zmc_terminate = true;
|
||||||
|
@ -46,9 +46,9 @@ void Usage()
|
||||||
int main( int argc, char *argv[] )
|
int main( int argc, char *argv[] )
|
||||||
{
|
{
|
||||||
int device = -1;
|
int device = -1;
|
||||||
char *host = "";
|
const char *host = "";
|
||||||
char *port = "";
|
const char *port = "";
|
||||||
char *path = "";
|
const char *path = "";
|
||||||
|
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{"device", 1, 0, 'd'},
|
{"device", 1, 0, 'd'},
|
||||||
|
@ -169,9 +169,9 @@ int main( int argc, char *argv[] )
|
||||||
monitors[0]->PreCapture();
|
monitors[0]->PreCapture();
|
||||||
}
|
}
|
||||||
|
|
||||||
long capture_delays[n_monitors];
|
long *capture_delays = new long[n_monitors];
|
||||||
long next_delays[n_monitors];
|
long *next_delays = new long[n_monitors];
|
||||||
struct timeval last_capture_times[n_monitors];
|
struct timeval * last_capture_times = new struct timeval[n_monitors];
|
||||||
for ( int i = 0; i < n_monitors; i++ )
|
for ( int i = 0; i < n_monitors; i++ )
|
||||||
{
|
{
|
||||||
last_capture_times[i].tv_sec = last_capture_times[i].tv_usec = 0;
|
last_capture_times[i].tv_sec = last_capture_times[i].tv_usec = 0;
|
||||||
|
@ -239,5 +239,9 @@ int main( int argc, char *argv[] )
|
||||||
{
|
{
|
||||||
delete monitors[i];
|
delete monitors[i];
|
||||||
}
|
}
|
||||||
|
delete [] capture_delays;
|
||||||
|
delete [] next_delays;
|
||||||
|
delete [] last_capture_times;
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
30
src/zmf.cpp
30
src/zmf.cpp
|
@ -33,20 +33,32 @@
|
||||||
|
|
||||||
#include "zm.h"
|
#include "zm.h"
|
||||||
#include "zm_db.h"
|
#include "zm_db.h"
|
||||||
#include "zm_debug.h"
|
//#include "zm_debug.h"
|
||||||
#include "zm_monitor.h"
|
#include "zm_monitor.h"
|
||||||
|
|
||||||
#include "zmf.h"
|
#include "zmf.h"
|
||||||
|
|
||||||
void zm_die_handler( int signal )
|
void zm_die_handler( int signal )
|
||||||
{
|
{
|
||||||
Info(( "Got signal %d, crashing", signal ));
|
char * error = strsignal(signal);
|
||||||
|
size_t errorStringSize = strlen(error) + strlen("Got signal (), crashing.");
|
||||||
|
char * errorString =(char *) malloc(errorStringSize + 1); // plus 1 for termination char.
|
||||||
|
(void) snprintf(errorString, errorStringSize, "Got signal (%s), crashing.", error);
|
||||||
|
|
||||||
|
Info(( (const char *)errorString ));
|
||||||
|
free(errorString);
|
||||||
exit( signal );
|
exit( signal );
|
||||||
}
|
}
|
||||||
|
|
||||||
void zm_term_handler( int signal )
|
void zm_term_handler( int signal )
|
||||||
{
|
{
|
||||||
Info(( "Got TERM signal, exiting" ));
|
char * error = strsignal(signal);
|
||||||
|
size_t errorStringSize = strlen(error) + strlen("Got signal (), exiting.");
|
||||||
|
char * errorString =(char *) malloc(errorStringSize + 1); // plus 1 for termination char.
|
||||||
|
(void) snprintf(errorString, errorStringSize, "Got signal (%s), exiting.", error);
|
||||||
|
|
||||||
|
Info(( (const char *)errorString ));
|
||||||
|
free(errorString);
|
||||||
exit( 0 );
|
exit( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,8 +212,8 @@ int main( int argc, char *argv[] )
|
||||||
|
|
||||||
int sd = OpenSocket( monitor->Id() );
|
int sd = OpenSocket( monitor->Id() );
|
||||||
|
|
||||||
FrameHeader frame_header = { -1, -1, false, -1 };
|
FrameHeader frame_header = { 0, 0, false, 0 };
|
||||||
unsigned char *image_data = 0;
|
//unsigned char *image_data = 0;
|
||||||
|
|
||||||
fd_set rfds;
|
fd_set rfds;
|
||||||
|
|
||||||
|
@ -233,15 +245,15 @@ int main( int argc, char *argv[] )
|
||||||
Error(( "Can't read frame header: %s", strerror(errno) ));
|
Error(( "Can't read frame header: %s", strerror(errno) ));
|
||||||
ReopenSocket( sd, monitor->Id() );
|
ReopenSocket( sd, monitor->Id() );
|
||||||
}
|
}
|
||||||
Debug( 1, ( "Read frame header, expecting %d bytes of image", frame_header.image_length ));
|
Debug( 1, ( "Read frame header, expecting %ld bytes of image", frame_header.image_length ));
|
||||||
static unsigned char image_data[ZM_MAX_IMAGE_SIZE];
|
static unsigned char image_data[ZM_MAX_IMAGE_SIZE];
|
||||||
if ( read( sd, image_data, frame_header.image_length ) != frame_header.image_length )
|
if ( read( sd, image_data, frame_header.image_length ) != (ssize_t)frame_header.image_length )
|
||||||
{
|
{
|
||||||
Error(( "Can't read frame image data: %s", strerror(errno) ));
|
Error(( "Can't read frame image data: %s", strerror(errno) ));
|
||||||
ReopenSocket( sd, monitor->Id() );
|
ReopenSocket( sd, monitor->Id() );
|
||||||
}
|
}
|
||||||
static char path[PATH_MAX] = "";
|
static char path[PATH_MAX] = "";
|
||||||
sprintf( path, "%s//%s/%d/%s-%03d.jpg", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Name(), frame_header.event_id, frame_header.alarm_frame?"analyse":"capture", frame_header.frame_id );
|
sprintf( path, "%s/%s/%ld/%s-%03ld.jpg", (const char *)config.Item( ZM_DIR_EVENTS ), monitor->Name(), frame_header.event_id, frame_header.alarm_frame?"analyse":"capture", frame_header.frame_id );
|
||||||
Debug( 1, ( "Got image, writing to %s", path ));
|
Debug( 1, ( "Got image, writing to %s", path ));
|
||||||
|
|
||||||
FILE *fd = 0;
|
FILE *fd = 0;
|
||||||
|
@ -250,7 +262,7 @@ int main( int argc, char *argv[] )
|
||||||
Error(( "Can't fopen '%s': %s", path, strerror(errno) ));
|
Error(( "Can't fopen '%s': %s", path, strerror(errno) ));
|
||||||
exit( -1 );
|
exit( -1 );
|
||||||
}
|
}
|
||||||
if ( fwrite( image_data, frame_header.image_length, 1, fd ) < 0 )
|
if ( 0 == fwrite( image_data, frame_header.image_length, 1, fd ) )
|
||||||
{
|
{
|
||||||
Error(( "Can't fwrite image data: %s", strerror(errno) ));
|
Error(( "Can't fwrite image data: %s", strerror(errno) ));
|
||||||
exit( -1 );
|
exit( -1 );
|
||||||
|
|
|
@ -16,16 +16,16 @@
|
||||||
// along with this program; if not, write to the Free Software
|
// along with this program; if not, write to the Free Software
|
||||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
//
|
//
|
||||||
|
#include <mysql/mysql.h>
|
||||||
#ifndef ZMFILE_H
|
#ifndef ZMFILE_H
|
||||||
#define ZMFILE_H
|
#define ZMFILE_H
|
||||||
|
|
||||||
struct FrameHeader
|
struct FrameHeader
|
||||||
{
|
{
|
||||||
int event_id;
|
unsigned long event_id;
|
||||||
int frame_id;
|
unsigned long frame_id;
|
||||||
bool alarm_frame;
|
bool alarm_frame;
|
||||||
int image_length;
|
unsigned long image_length;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ZMFILE_H
|
#endif // ZMFILE_H
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#include "zm_db.h"
|
#include "zm_db.h"
|
||||||
#include "zm_monitor.h"
|
#include "zm_monitor.h"
|
||||||
|
|
||||||
int main( int argc, const char *argv[] )
|
int main(void )
|
||||||
{
|
{
|
||||||
int id = 1;
|
int id = 1;
|
||||||
unsigned long idle = 5000;
|
unsigned long idle = 5000;
|
||||||
|
@ -29,7 +29,7 @@ int main( int argc, const char *argv[] )
|
||||||
unsigned int rate = 1;
|
unsigned int rate = 1;
|
||||||
unsigned int scale = 1;
|
unsigned int scale = 1;
|
||||||
int event = 0;
|
int event = 0;
|
||||||
char *path = ".";
|
const char *path = ".";
|
||||||
unsigned int ttl = 0;
|
unsigned int ttl = 0;
|
||||||
|
|
||||||
//setbuf( fd, 0 );
|
//setbuf( fd, 0 );
|
||||||
|
@ -65,7 +65,7 @@ int main( int argc, const char *argv[] )
|
||||||
else if ( !strcmp( name, "monitor" ) )
|
else if ( !strcmp( name, "monitor" ) )
|
||||||
id = atoi( value );
|
id = atoi( value );
|
||||||
else if ( !strcmp( name, "event" ) )
|
else if ( !strcmp( name, "event" ) )
|
||||||
event = atoi( value );
|
event = strtoull( value, (char **)NULL, 10 );
|
||||||
else if ( !strcmp( name, "path" ) )
|
else if ( !strcmp( name, "path" ) )
|
||||||
path = value;
|
path = value;
|
||||||
else if ( !strcmp( name, "ttl" ) )
|
else if ( !strcmp( name, "ttl" ) )
|
||||||
|
|
|
@ -119,7 +119,7 @@ bool ValidateAccess( const char *username, const char *password, int mon_id, Fun
|
||||||
int stream = atoi(dbrow[1]);
|
int stream = atoi(dbrow[1]);
|
||||||
int events = atoi(dbrow[2]);
|
int events = atoi(dbrow[2]);
|
||||||
int monitors = atoi(dbrow[3]);
|
int monitors = atoi(dbrow[3]);
|
||||||
int system = atoi(dbrow[4]);
|
//int system = atoi(dbrow[4]);
|
||||||
const char *monitor_ids = dbrow[5];
|
const char *monitor_ids = dbrow[5];
|
||||||
if ( function & (STATE|IMAGE|TIME|READ_IDX|WRITE_IDX|FPS) )
|
if ( function & (STATE|IMAGE|TIME|READ_IDX|WRITE_IDX|FPS) )
|
||||||
{
|
{
|
||||||
|
@ -148,7 +148,7 @@ bool ValidateAccess( const char *username, const char *password, int mon_id, Fun
|
||||||
char *mon_id_str_ptr = mon_id_str;
|
char *mon_id_str_ptr = mon_id_str;
|
||||||
char *mon_id_ptr = 0;
|
char *mon_id_ptr = 0;
|
||||||
bool found_mon_id = false;
|
bool found_mon_id = false;
|
||||||
while( mon_id_ptr = strtok( mon_id_str_ptr, "," ) )
|
while( (mon_id_ptr = strtok( mon_id_str_ptr, "," )) )
|
||||||
{
|
{
|
||||||
mon_id_str_ptr = 0;
|
mon_id_str_ptr = 0;
|
||||||
if ( mon_id == atoi( mon_id_ptr ) )
|
if ( mon_id == atoi( mon_id_ptr ) )
|
||||||
|
|
Loading…
Reference in New Issue