redo rotation fix. cameras have to be given the width and height that the camera will be sending. The monitor will report rotated dimensions.

This commit is contained in:
Isaac Connor 2016-04-25 16:00:34 -04:00
parent 85798932ee
commit 8c53925fdc
2 changed files with 26 additions and 45 deletions

View File

@ -306,12 +306,8 @@ Monitor::Monitor(
server_id( p_server_id ), server_id( p_server_id ),
function( (Function)p_function ), function( (Function)p_function ),
enabled( p_enabled ), enabled( p_enabled ),
// When we instantiate the camera, the dimensions are rotated. So if we rotate them again here, we undo the rotation.
// With this change, calls to Monitor->Width and Height will give the rotated dimesions.So this will trickle down
width( p_camera->Width() ), width( p_camera->Width() ),
height( p_camera->Height() ), height( p_camera->Height() ),
//width( (p_orientation==ROTATE_90||p_orientation==ROTATE_270)?p_camera->Height():p_camera->Width() ),
//height( (p_orientation==ROTATE_90||p_orientation==ROTATE_270)?p_camera->Width():p_camera->Height() ),
orientation( (Orientation)p_orientation ), orientation( (Orientation)p_orientation ),
deinterlacing( p_deinterlacing ), deinterlacing( p_deinterlacing ),
label_coord( p_label_coord ), label_coord( p_label_coord ),
@ -2150,9 +2146,6 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
col++; col++;
bool embed_exif = (*dbrow[col] != '0'); col++; bool embed_exif = (*dbrow[col] != '0'); col++;
int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width);
int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height);
int extras = (deinterlacing>>24)&0xff; int extras = (deinterlacing>>24)&0xff;
Camera *camera = new LocalCamera( Camera *camera = new LocalCamera(
@ -2163,8 +2156,8 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
v4l_multi_buffer, v4l_multi_buffer,
v4l_captures_per_frame, v4l_captures_per_frame,
method, method,
cam_width, width,
cam_height, height,
colours, colours,
palette, palette,
brightness, brightness,
@ -2306,9 +2299,6 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c
int track_motion = atoi(dbrow[col]); col++; int track_motion = atoi(dbrow[col]); col++;
bool embed_exif = (*dbrow[col] != '0'); col++; bool embed_exif = (*dbrow[col] != '0'); col++;
int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width);
int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height);
Camera *camera = 0; Camera *camera = 0;
if ( protocol == "http" ) if ( protocol == "http" )
{ {
@ -2318,8 +2308,8 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c
host, // Host host, // Host
port, // Port port, // Port
path, // Path path, // Path
cam_width, width,
cam_height, height,
colours, colours,
brightness, brightness,
contrast, contrast,
@ -2337,8 +2327,8 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c
host, // Host host, // Host
port, // Port port, // Port
path, // Path path, // Path
cam_width, width,
cam_height, height,
rtsp_describe, rtsp_describe,
colours, colours,
brightness, brightness,
@ -2481,14 +2471,11 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu
int track_motion = atoi(dbrow[col]); col++; int track_motion = atoi(dbrow[col]); col++;
bool embed_exif = (*dbrow[col] != '0'); col++; bool embed_exif = (*dbrow[col] != '0'); col++;
int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width);
int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height);
Camera *camera = new FileCamera( Camera *camera = new FileCamera(
id, id,
path, // File path, // File
cam_width, width,
cam_height, height,
colours, colours,
brightness, brightness,
contrast, contrast,
@ -2626,16 +2613,13 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose
int track_motion = atoi(dbrow[col]); col++; int track_motion = atoi(dbrow[col]); col++;
bool embed_exif = (*dbrow[col] != '0'); col++; bool embed_exif = (*dbrow[col] != '0'); col++;
int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width);
int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height);
Camera *camera = new FfmpegCamera( Camera *camera = new FfmpegCamera(
id, id,
path, // File path, // File
method, method,
options, options,
cam_width, width,
cam_height, height,
colours, colours,
brightness, brightness,
contrast, contrast,
@ -2796,9 +2780,6 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
col++; col++;
bool embed_exif = (*dbrow[col] != '0'); col++; bool embed_exif = (*dbrow[col] != '0'); col++;
int cam_width = ((orientation==ROTATE_90||orientation==ROTATE_270)?height:width);
int cam_height = ((orientation==ROTATE_90||orientation==ROTATE_270)?width:height);
int extras = (deinterlacing>>24)&0xff; int extras = (deinterlacing>>24)&0xff;
Camera *camera = 0; Camera *camera = 0;
@ -2813,8 +2794,8 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
v4l_multi_buffer, v4l_multi_buffer,
v4l_captures_per_frame, v4l_captures_per_frame,
method, method,
cam_width, width,
cam_height, height,
colours, colours,
palette, palette,
brightness, brightness,
@ -2838,8 +2819,8 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
host.c_str(), host.c_str(),
port.c_str(), port.c_str(),
path.c_str(), path.c_str(),
cam_width, width,
cam_height, height,
colours, colours,
brightness, brightness,
contrast, contrast,
@ -2857,8 +2838,8 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
host.c_str(), host.c_str(),
port.c_str(), port.c_str(),
path.c_str(), path.c_str(),
cam_width, width,
cam_height, height,
rtsp_describe, rtsp_describe,
colours, colours,
brightness, brightness,
@ -2881,8 +2862,8 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
camera = new FileCamera( camera = new FileCamera(
id, id,
path.c_str(), path.c_str(),
cam_width, width,
cam_height, height,
colours, colours,
brightness, brightness,
contrast, contrast,
@ -2899,8 +2880,8 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
path.c_str(), path.c_str(),
method, method,
options, options,
cam_width, width,
cam_height, height,
colours, colours,
brightness, brightness,
contrast, contrast,
@ -2920,8 +2901,8 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
path.c_str(), path.c_str(),
method, method,
options, options,
cam_width, width,
cam_height, height,
colours, colours,
brightness, brightness,
contrast, contrast,
@ -2941,8 +2922,8 @@ Debug( 1, "Got %d for v4l_captures_per_frame", v4l_captures_per_frame );
path.c_str(), path.c_str(),
user.c_str(), user.c_str(),
pass.c_str(), pass.c_str(),
cam_width, width,
cam_height, height,
colours, colours,
brightness, brightness,
contrast, contrast,

View File

@ -358,8 +358,8 @@ public:
return( embed_exif ); return( embed_exif );
} }
unsigned int Width() const { return( width ); } unsigned int Width() const { return( (p_orientation==ROTATE_90||p_orientation==ROTATE_270)?p_camera->Height():p_camera->Width() ); }
unsigned int Height() const { return( height ); } unsigned int Height() const { return( (p_orientation==ROTATE_90||p_orientation==ROTATE_270)?p_camera->Width():p_camera->Height() ); }
unsigned int Colours() const { return( camera->Colours() ); } unsigned int Colours() const { return( camera->Colours() ); }
unsigned int SubpixelOrder() const { return( camera->SubpixelOrder() ); } unsigned int SubpixelOrder() const { return( camera->SubpixelOrder() ); }