2003-03-26 19:57:29 +08:00
|
|
|
//
|
|
|
|
// ZoneMinder Camera Class Implementation, $Date$, $Revision$
|
2008-07-25 17:33:23 +08:00
|
|
|
// Copyright (C) 2001-2008 Philip Coombes
|
2003-03-26 19:57:29 +08:00
|
|
|
//
|
|
|
|
// 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
|
2016-12-26 23:23:16 +08:00
|
|
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
2003-03-26 19:57:29 +08:00
|
|
|
//
|
|
|
|
|
|
|
|
#include "zm.h"
|
|
|
|
#include "zm_camera.h"
|
|
|
|
|
2017-04-13 01:32:22 +08:00
|
|
|
Camera::Camera( unsigned int p_monitor_id, SourceType p_type, unsigned int p_width, unsigned int p_height, int p_colours, int p_subpixelorder, int p_brightness, int p_contrast, int p_hue, int p_colour, bool p_capture, bool p_record_audio ) :
|
2016-08-11 00:19:53 +08:00
|
|
|
monitor_id( p_monitor_id ),
|
2008-03-13 21:36:12 +08:00
|
|
|
type( p_type ),
|
|
|
|
width( p_width),
|
|
|
|
height( p_height ),
|
2008-07-21 23:20:52 +08:00
|
|
|
colours( p_colours ),
|
2011-04-29 22:26:50 +08:00
|
|
|
subpixelorder( p_subpixelorder ),
|
2008-03-13 21:36:12 +08:00
|
|
|
brightness( p_brightness ),
|
|
|
|
hue( p_hue ),
|
|
|
|
colour( p_colour ),
|
|
|
|
contrast( p_contrast ),
|
2016-04-01 00:16:50 +08:00
|
|
|
capture( p_capture ),
|
2017-11-21 00:48:56 +08:00
|
|
|
record_audio( p_record_audio ),
|
|
|
|
mVideoStreamId(-1),
|
|
|
|
mAudioStreamId(-1),
|
|
|
|
mVideoCodecContext(NULL),
|
2017-12-03 02:55:26 +08:00
|
|
|
mAudioCodecContext(NULL),
|
2017-11-21 00:48:56 +08:00
|
|
|
video_stream(NULL)
|
2003-03-26 19:57:29 +08:00
|
|
|
{
|
2016-06-22 00:21:18 +08:00
|
|
|
pixels = width * height;
|
|
|
|
imagesize = pixels * colours;
|
|
|
|
|
2016-08-11 00:19:53 +08:00
|
|
|
Debug(2,"New camera id: %d width: %d height: %d colours: %d subpixelorder: %d capture: %d",monitor_id,width,height,colours,subpixelorder,capture);
|
2016-06-22 00:21:18 +08:00
|
|
|
|
|
|
|
/* Because many loops are unrolled and work on 16 colours/time or 4 pixels/time, we have to meet requirements */
|
2017-04-16 15:57:37 +08:00
|
|
|
if((colours == ZM_COLOUR_GRAY8 || colours == ZM_COLOUR_RGB32) && (imagesize % 64) != 0) {
|
|
|
|
Fatal("Image size is not multiples of 64");
|
|
|
|
} else if(colours == ZM_COLOUR_RGB24 && ((imagesize % 64) != 0 || (imagesize % 12) != 0)) {
|
|
|
|
Fatal("Image size is not multiples of 12 and 64");
|
2016-06-22 00:21:18 +08:00
|
|
|
}
|
2017-12-03 02:55:26 +08:00
|
|
|
monitor = NULL;
|
2003-03-26 19:57:29 +08:00
|
|
|
}
|
|
|
|
|
2016-06-22 01:48:32 +08:00
|
|
|
Camera::~Camera() {
|
2003-03-26 19:57:29 +08:00
|
|
|
}
|
|
|
|
|
2016-05-14 02:51:26 +08:00
|
|
|
Monitor *Camera::getMonitor() {
|
2017-12-03 02:55:26 +08:00
|
|
|
if ( ! monitor ) {
|
|
|
|
Warning("Loading monitor");
|
2016-08-11 00:19:53 +08:00
|
|
|
monitor = Monitor::Load( monitor_id, false, Monitor::QUERY );
|
2017-12-03 02:55:26 +08:00
|
|
|
}
|
2016-05-14 02:51:26 +08:00
|
|
|
return monitor;
|
|
|
|
}
|
2016-09-09 21:15:04 +08:00
|
|
|
|
|
|
|
void Camera::setMonitor( Monitor *p_monitor ) {
|
|
|
|
monitor = p_monitor;
|
|
|
|
monitor_id = monitor->Id();
|
|
|
|
}
|