Bug 431 - Removed default args for monitor constructors and now can stream events without active monitor.

git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@2274 e3e1d417-86f3-4887-817a-d78f3d33393f
pull/27/merge
stan 2007-12-29 18:50:53 +00:00
parent 93c2ec048c
commit 9d291c0ba1
5 changed files with 20 additions and 11 deletions

View File

@ -317,8 +317,15 @@ Monitor::Monitor(
if ( !shared_data->valid )
{
Error(( "Shared memory not initialised by capture daemon" ));
exit( -1 );
if ( purpose != QUERY )
{
Error(( "Shared memory not initialised by capture daemon" ));
exit( -1 );
}
else
{
Warning(( "Shared memory not initialised by capture daemon, some query functions may not be available or produce invalid results" ));
}
}
image_buffer = new Snapshot[image_buffer_count];
@ -1792,6 +1799,7 @@ int Monitor::LoadRemoteMonitors( const char *host, const char*port, const char *
fps_report_interval,
ref_blend_perc,
track_motion,
RGB_WHITE,
purpose
);
Zone **zones = 0;
@ -1917,6 +1925,7 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu
fps_report_interval,
ref_blend_perc,
track_motion,
RGB_WHITE,
purpose
);
Zone **zones = 0;

View File

@ -232,7 +232,7 @@ protected:
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, 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=QUERY, int p_n_zones=0, Zone *p_zones[]=0 );
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, 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[] );
@ -330,10 +330,10 @@ public:
bool DumpSettings( char *output, bool verbose );
void DumpZoneImage( const char *zone_string=0 );
static int LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose purpose=QUERY );
static int LoadRemoteMonitors( const char *host, const char*port, const char*path, Monitor **&monitors, Purpose purpose=QUERY );
static int LoadFileMonitors( const char *file, Monitor **&monitors, Purpose purpose=QUERY );
static Monitor *Load( int id, bool load_zones=false, Purpose purpose=QUERY );
static int LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose purpose );
static int LoadRemoteMonitors( const char *host, const char*port, const char*path, Monitor **&monitors, Purpose purpose );
static int LoadFileMonitors( const char *file, Monitor **&monitors, Purpose purpose );
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 );

View File

@ -32,7 +32,7 @@ StreamBase::~StreamBase()
bool StreamBase::loadMonitor( int monitor_id )
{
if ( !(monitor = Monitor::Load( monitor_id )) )
if ( !(monitor = Monitor::Load( monitor_id, false, Monitor::QUERY )) )
{
Fatal(( "Unable to load monitor id %d for streaming", monitor_id ));
return( false );

View File

@ -160,7 +160,7 @@ int main( int argc, char *argv[] )
zmLoadConfig();
Monitor *monitor = Monitor::Load( id, false );
Monitor *monitor = Monitor::Load( id, false, Monitor::QUERY );
if ( !monitor )
{

View File

@ -413,7 +413,7 @@ int main( int argc, char *argv[] )
}
else if ( mon_id > 0 )
{
Monitor *monitor = Monitor::Load( mon_id, function&(ZMU_QUERY|ZMU_ZONES) );
Monitor *monitor = Monitor::Load( mon_id, function&(ZMU_QUERY|ZMU_ZONES), Monitor::QUERY );
if ( monitor )
{
if ( verbose )
@ -700,7 +700,7 @@ int main( int argc, char *argv[] )
{
if ( function > 1 )
{
Monitor *monitor = Monitor::Load( mon_id );
Monitor *monitor = Monitor::Load( mon_id, false, Monitor::QUERY );
if ( monitor )
{
struct timeval tv = monitor->GetTimestamp();