From 3a06ba7a65f3976c3ddf6d7163cd88bda4a39f70 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Fri, 9 Sep 2016 09:15:04 -0400 Subject: [PATCH] Turn off instantiating a default zone before even loading the zones. Implement the use of Camera->setMonitor so that the camera object doesn't have to load it later. --- src/zm_camera.cpp | 5 +++++ src/zm_camera.h | 1 + src/zm_monitor.cpp | 11 +++++++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/zm_camera.cpp b/src/zm_camera.cpp index 55a58ffca..e339d7c30 100644 --- a/src/zm_camera.cpp +++ b/src/zm_camera.cpp @@ -55,3 +55,8 @@ Monitor *Camera::getMonitor() { monitor = Monitor::Load( monitor_id, false, Monitor::QUERY ); return monitor; } + +void Camera::setMonitor( Monitor *p_monitor ) { + monitor = p_monitor; + monitor_id = monitor->Id(); +} diff --git a/src/zm_camera.h b/src/zm_camera.h index c86a3fcee..e6827f413 100644 --- a/src/zm_camera.h +++ b/src/zm_camera.h @@ -60,6 +60,7 @@ public: unsigned int getId() const { return( monitor_id ); } Monitor *getMonitor(); + void setMonitor( Monitor *p_monitor ); SourceType Type() const { return( type ); } bool IsLocal() const { return( type == LOCAL_SRC ); } bool IsRemote() const { return( type == REMOTE_SRC ); } diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index 59cc5083d..867b8e75f 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -435,7 +435,7 @@ Monitor::Monitor( // Will this not happen every time a monitor is instantiated? Seems like all the calls to the Monitor constructor pass a zero for n_zones, then load zones after.. // In my storage areas branch, I took this out.. and didn't notice any problems. - if ( !n_zones ) { + if ( false && !n_zones ) { Debug( 1, "Monitor %s has no zones, adding one.", name ); n_zones = 1; zones = new Zone *[1]; @@ -1996,10 +1996,11 @@ int Monitor::LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose track_motion, signal_check_colour, embed_exif, - purpose, + purpose, 0, 0 ); + camera->setMonitor( monitors[i] ); Zone **zones = 0; int n_zones = Zone::Load( monitors[i], zones ); monitors[i]->AddZones( n_zones, zones ); @@ -2185,6 +2186,7 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c 0, 0 ); + camera->setMonitor( monitors[i] ); Zone **zones = 0; int n_zones = Zone::Load( monitors[i], zones ); monitors[i]->AddZones( n_zones, zones ); @@ -2334,6 +2336,7 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu 0, 0 ); + camera->setMonitor( monitors[i] ); Zone **zones = 0; int n_zones = Zone::Load( monitors[i], zones ); monitors[i]->AddZones( n_zones, zones ); @@ -2490,6 +2493,8 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose 0, 0 ); + + camera->setMonitor( monitors[i] ); Zone **zones = 0; int n_zones = Zone::Load( monitors[i], zones ); monitors[i]->AddZones( n_zones, zones ); @@ -2802,6 +2807,8 @@ Monitor *Monitor::Load( unsigned int p_id, bool load_zones, Purpose purpose ) { ); + camera->setMonitor( monitor ); + int n_zones = 0; if ( load_zones ) { Zone **zones = 0;