Added flip support and optimised some config calls.

git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@1395 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
stan 2005-05-05 16:43:19 +00:00
parent d704c9b2fb
commit a1006edcbd
2 changed files with 38 additions and 13 deletions

View File

@ -35,6 +35,8 @@ bool Monitor::create_analysis_images;
bool Monitor::blend_alarmed_images; bool Monitor::blend_alarmed_images;
bool Monitor::timestamp_on_capture; bool Monitor::timestamp_on_capture;
int Monitor::bulk_frame_interval; int Monitor::bulk_frame_interval;
bool Monitor::opt_control;
const char *Monitor::dir_events;
Monitor::Monitor( Monitor::Monitor(
int p_id, int p_id,
@ -101,7 +103,9 @@ Monitor::Monitor(
strncpy( event_prefix, p_event_prefix, sizeof(event_prefix) ); strncpy( event_prefix, p_event_prefix, sizeof(event_prefix) );
strncpy( label_format, p_label_format, sizeof(label_format) ); strncpy( label_format, p_label_format, sizeof(label_format) );
camera = new LocalCamera( p_device, p_channel, p_format, (p_orientation%2)?width:height, (orientation%2)?height:width, p_palette, p_brightness, p_contrast, p_hue, p_colour, purpose==CAPTURE ); int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width);
int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height);
camera = new LocalCamera( p_device, p_channel, p_format, cam_width, cam_height, p_palette, p_brightness, p_contrast, p_hue, p_colour, purpose==CAPTURE );
Setup(); Setup();
} }
@ -171,7 +175,9 @@ Monitor::Monitor(
strncpy( event_prefix, p_event_prefix, sizeof(event_prefix) ); strncpy( event_prefix, p_event_prefix, sizeof(event_prefix) );
strncpy( label_format, p_label_format, sizeof(label_format) ); strncpy( label_format, p_label_format, sizeof(label_format) );
camera = new RemoteCamera( p_host, p_port, p_path, (p_orientation%2)?width:height, (orientation%2)?height:width, p_palette, p_brightness, p_contrast, p_hue, p_colour, purpose==CAPTURE ); int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width);
int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height);
camera = new RemoteCamera( p_host, p_port, p_path, cam_width, cam_height, p_palette, p_brightness, p_contrast, p_hue, p_colour, purpose==CAPTURE );
Setup(); Setup();
} }
@ -304,7 +310,7 @@ void Monitor::Setup()
{ {
static char path[PATH_MAX]; static char path[PATH_MAX];
strncpy( path, (const char *)config.Item( ZM_DIR_EVENTS ), sizeof(path) ); strncpy( path, dir_events, sizeof(path) );
struct stat statbuf; struct stat statbuf;
errno = 0; errno = 0;
@ -317,7 +323,7 @@ void Monitor::Setup()
} }
} }
snprintf( path, sizeof(path), "%s/%d", (const char *)config.Item( ZM_DIR_EVENTS ), id ); snprintf( path, sizeof(path), "%s/%d", dir_events, id );
errno = 0; errno = 0;
stat( path, &statbuf ); stat( path, &statbuf );
@ -329,7 +335,7 @@ void Monitor::Setup()
} }
char temp_path[PATH_MAX]; char temp_path[PATH_MAX];
snprintf( temp_path, sizeof(temp_path), "%d", id ); snprintf( temp_path, sizeof(temp_path), "%d", id );
chdir( (const char *)config.Item( ZM_DIR_EVENTS ) ); chdir( dir_events );
symlink( temp_path, name ); symlink( temp_path, name );
chdir( ".." ); chdir( ".." );
} }
@ -801,7 +807,7 @@ bool Monitor::Analyse()
} }
if ( score ) if ( score )
{ {
if ( (bool)config.Item( ZM_OPT_CONTROL ) && track_motion && activity_state != ACTIVE ) if ( opt_control && track_motion && (activity_state != ACTIVE) )
{ {
// Do nothing // Do nothing
} }
@ -858,7 +864,7 @@ bool Monitor::Analyse()
} }
else else
{ {
if ( (bool)config.Item( ZM_OPT_CONTROL ) && track_motion && activity_state != ACTIVE ) if ( opt_control && track_motion && (activity_state != ACTIVE) )
{ {
// Do nothing // Do nothing
} }
@ -1527,7 +1533,7 @@ unsigned int Monitor::Compare( const Image &comp_image )
static char diag_path[PATH_MAX] = ""; static char diag_path[PATH_MAX] = "";
if ( !diag_path[0] ) if ( !diag_path[0] )
{ {
snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-r.jpg", (const char *)config.Item( ZM_DIR_EVENTS ), id ); snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-r.jpg", dir_events, id );
} }
ref_image.WriteJpeg( diag_path ); ref_image.WriteJpeg( diag_path );
} }
@ -1539,7 +1545,7 @@ unsigned int Monitor::Compare( const Image &comp_image )
static char diag_path[PATH_MAX] = ""; static char diag_path[PATH_MAX] = "";
if ( !diag_path[0] ) if ( !diag_path[0] )
{ {
snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-d.jpg", (const char *)config.Item( ZM_DIR_EVENTS ), id ); snprintf( diag_path, sizeof(diag_path), "%s/%d/diag-d.jpg", dir_events, id );
} }
delta_image->WriteJpeg( diag_path ); delta_image->WriteJpeg( diag_path );
} }
@ -1602,7 +1608,7 @@ unsigned int Monitor::Compare( const Image &comp_image )
score += zone->Score(); score += zone->Score();
zone->SetAlarm(); zone->SetAlarm();
Debug( 3, ( "Zone is alarmed, zone score = %d", zone->Score() )); Debug( 3, ( "Zone is alarmed, zone score = %d", zone->Score() ));
if ( (bool)config.Item( ZM_OPT_CONTROL ) && track_motion ) if ( opt_control && track_motion )
{ {
if ( (int)zone->Score() > top_score ) if ( (int)zone->Score() > top_score )
{ {
@ -1629,7 +1635,7 @@ unsigned int Monitor::Compare( const Image &comp_image )
score += zone->Score(); score += zone->Score();
zone->SetAlarm(); zone->SetAlarm();
Debug( 3, ( "Zone is alarmed, zone score = %d", zone->Score() )); Debug( 3, ( "Zone is alarmed, zone score = %d", zone->Score() ));
if ( (bool)config.Item( ZM_OPT_CONTROL ) && track_motion ) if ( opt_control && track_motion )
{ {
if ( zone->Score() > top_score ) if ( zone->Score() > top_score )
{ {

View File

@ -59,7 +59,7 @@ public:
NODECT NODECT
} Function; } Function;
typedef enum { ROTATE_0=1, ROTATE_90, ROTATE_180, ROTATE_270 } Orientation; typedef enum { ROTATE_0=1, ROTATE_90, ROTATE_180, ROTATE_270, FLIP_HORI, FLIP_VERT } Orientation;
typedef enum { IDLE, PREALARM, ALARM, ALERT, TAPE } State; typedef enum { IDLE, PREALARM, ALARM, ALERT, TAPE } State;
@ -74,6 +74,8 @@ protected:
static bool blend_alarmed_images; static bool blend_alarmed_images;
static bool timestamp_on_capture; static bool timestamp_on_capture;
static int bulk_frame_interval; static int bulk_frame_interval;
static bool opt_control;
static const char *dir_events;
protected: protected:
// These are read from the DB and thereafter remain unchanged // These are read from the DB and thereafter remain unchanged
@ -178,6 +180,8 @@ protected:
blend_alarmed_images = (bool)config.Item( ZM_BLEND_ALARMED_IMAGES ); blend_alarmed_images = (bool)config.Item( ZM_BLEND_ALARMED_IMAGES );
timestamp_on_capture = (bool)config.Item( ZM_TIMESTAMP_ON_CAPTURE ); timestamp_on_capture = (bool)config.Item( ZM_TIMESTAMP_ON_CAPTURE );
bulk_frame_interval = (int)config.Item( ZM_BULK_FRAME_INTERVAL ); 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: public:
@ -253,7 +257,22 @@ public:
{ {
if ( orientation != ROTATE_0 ) if ( orientation != ROTATE_0 )
{ {
image.Rotate( (orientation-1)*90 ); switch ( orientation )
{
case ROTATE_90 :
case ROTATE_180 :
case ROTATE_270 :
{
image.Rotate( (orientation-1)*90 );
break;
}
case FLIP_HORI :
case FLIP_VERT :
{
image.Flip( orientation==FLIP_HORI );
break;
}
}
} }
int index = image_count%image_buffer_count; int index = image_count%image_buffer_count;