Changed colours to palettes and now supports YUV420P.
git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@471 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
parent
f54ec2c7ec
commit
d1fd5c0828
|
@ -0,0 +1,13 @@
|
||||||
|
--
|
||||||
|
-- This updates a 0.9.10 database to 0.9.11
|
||||||
|
--
|
||||||
|
alter table Monitors change column Colours Palette tinyint(3) unsigned NOT NULL default '1';
|
||||||
|
update Monitors set Palette = 1 where Palette = 8;
|
||||||
|
update Monitors set Palette = 4 where Palette = 24;
|
||||||
|
-- These are optional, it just seemed a good time...
|
||||||
|
optimize table Frames;
|
||||||
|
optimize table Events;
|
||||||
|
optimize table Filters;
|
||||||
|
optimize table Zones;
|
||||||
|
optimize table Monitors;
|
||||||
|
optimize table Stats;
|
|
@ -20,8 +20,9 @@
|
||||||
#include "zm.h"
|
#include "zm.h"
|
||||||
#include "zm_camera.h"
|
#include "zm_camera.h"
|
||||||
|
|
||||||
Camera::Camera( SourceType p_type, int p_width, int p_height, int p_colours, bool p_capture ) : type( p_type ), width( p_width), height( p_height ), colours( p_colours ), capture( p_capture )
|
Camera::Camera( SourceType p_type, int p_width, int p_height, int p_palette, bool p_capture ) : type( p_type ), width( p_width), height( p_height ), palette( p_palette ), capture( p_capture )
|
||||||
{
|
{
|
||||||
|
colours = (palette==VIDEO_PALETTE_GREY?1:3);
|
||||||
}
|
}
|
||||||
|
|
||||||
Camera::~Camera()
|
Camera::~Camera()
|
||||||
|
|
|
@ -20,6 +20,10 @@
|
||||||
#ifndef ZM_CAMERA_H
|
#ifndef ZM_CAMERA_H
|
||||||
#define ZM_CAMERA_H
|
#define ZM_CAMERA_H
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <linux/videodev.h>
|
||||||
|
|
||||||
#include "zm_image.h"
|
#include "zm_image.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -34,11 +38,12 @@ protected:
|
||||||
SourceType type;
|
SourceType type;
|
||||||
unsigned int width;
|
unsigned int width;
|
||||||
unsigned int height;
|
unsigned int height;
|
||||||
|
unsigned int palette;
|
||||||
unsigned int colours;
|
unsigned int colours;
|
||||||
bool capture;
|
bool capture;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Camera( SourceType p_type, int p_width, int p_height, int p_colours, bool p_capture=true );
|
Camera( SourceType p_type, int p_width, int p_height, int p_palette, bool p_capture=true );
|
||||||
virtual ~Camera();
|
virtual ~Camera();
|
||||||
|
|
||||||
SourceType Type() const { return( type ); }
|
SourceType Type() const { return( type ); }
|
||||||
|
@ -46,6 +51,7 @@ public:
|
||||||
bool IsRemote() const { return( type == REMOTE ); }
|
bool IsRemote() const { return( type == REMOTE ); }
|
||||||
unsigned int Width() const { return( width ); }
|
unsigned int Width() const { return( width ); }
|
||||||
unsigned int Height() const { return( height ); }
|
unsigned int Height() const { return( height ); }
|
||||||
|
unsigned int Palette() const { return( palette ); }
|
||||||
unsigned int Colours() const { return( colours ); }
|
unsigned int Colours() const { return( colours ); }
|
||||||
unsigned int ImageSize() const { return( colours*width*height ); }
|
unsigned int ImageSize() const { return( colours*width*height ); }
|
||||||
|
|
||||||
|
|
|
@ -119,19 +119,7 @@ public:
|
||||||
buffer = new JSAMPLE[size];
|
buffer = new JSAMPLE[size];
|
||||||
memset( buffer, 0, size );
|
memset( buffer, 0, size );
|
||||||
}
|
}
|
||||||
if ( colours == 1 || !ZM_LOCAL_BGR_INVERT )
|
memcpy( buffer, new_buffer, size );
|
||||||
{
|
|
||||||
memcpy( buffer, new_buffer, size );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for ( int i = 0; i < size; i += 3 )
|
|
||||||
{
|
|
||||||
buffer[i] = new_buffer[i+2];
|
|
||||||
buffer[i+1] = new_buffer[i+1];
|
|
||||||
buffer[i+2] = new_buffer[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void CopyBuffer( const Image &image )
|
inline void CopyBuffer( const Image &image )
|
||||||
|
|
|
@ -34,7 +34,7 @@ video_mmap *LocalCamera::m_vmm;
|
||||||
int LocalCamera::m_videohandle;
|
int LocalCamera::m_videohandle;
|
||||||
unsigned char *LocalCamera::m_buffer=0;
|
unsigned char *LocalCamera::m_buffer=0;
|
||||||
|
|
||||||
LocalCamera::LocalCamera( int p_device, int p_channel, int p_format, int p_width, int p_height, int p_colours, bool p_capture ) : Camera( LOCAL, p_width, p_height, p_colours, p_capture ), device( p_device ), channel( p_channel ), format( p_format )
|
LocalCamera::LocalCamera( int p_device, int p_channel, int p_format, int p_width, int p_height, int p_palette, bool p_capture ) : Camera( LOCAL, p_width, p_height, p_palette, p_capture ), device( p_device ), channel( p_channel ), format( p_format )
|
||||||
{
|
{
|
||||||
if ( !camera_count++ && capture )
|
if ( !camera_count++ && capture )
|
||||||
{
|
{
|
||||||
|
@ -101,14 +101,12 @@ void LocalCamera::Initialise()
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( colours == 1 )
|
if ( (vid_pic.palette = palette) == VIDEO_PALETTE_GREY )
|
||||||
{
|
{
|
||||||
vid_pic.palette = VIDEO_PALETTE_GREY;
|
|
||||||
vid_pic.depth = 8;
|
vid_pic.depth = 8;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vid_pic.palette = VIDEO_PALETTE_RGB24;
|
|
||||||
vid_pic.depth = 24;
|
vid_pic.depth = 24;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +132,7 @@ void LocalCamera::Initialise()
|
||||||
m_vmm[loop].frame = loop;
|
m_vmm[loop].frame = loop;
|
||||||
m_vmm[loop].width = width;
|
m_vmm[loop].width = width;
|
||||||
m_vmm[loop].height = height;
|
m_vmm[loop].height = height;
|
||||||
m_vmm[loop].format = (colours==1?VIDEO_PALETTE_GREY:VIDEO_PALETTE_RGB24);
|
m_vmm[loop].format = palette;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_buffer = (unsigned char *)mmap(0, m_vmb.size, PROT_READ, MAP_SHARED, m_videohandle,0);
|
m_buffer = (unsigned char *)mmap(0, m_vmb.size, PROT_READ, MAP_SHARED, m_videohandle,0);
|
||||||
|
@ -406,3 +404,187 @@ bool LocalCamera::GetCurrentSettings( int device, char *output, bool verbose )
|
||||||
}
|
}
|
||||||
return( true );
|
return( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LocalCamera::PreCapture()
|
||||||
|
{
|
||||||
|
//Info(( "%s: Capturing image\n", id ));
|
||||||
|
|
||||||
|
if ( camera_count > 1 )
|
||||||
|
{
|
||||||
|
//Info(( "Switching\n" ));
|
||||||
|
struct video_channel vs;
|
||||||
|
|
||||||
|
vs.channel = channel;
|
||||||
|
//vs.norm = VIDEO_MODE_AUTO;
|
||||||
|
vs.norm = format;
|
||||||
|
vs.flags = 0;
|
||||||
|
vs.type = VIDEO_TYPE_CAMERA;
|
||||||
|
if(ioctl(m_videohandle, VIDIOCSCHAN, &vs))
|
||||||
|
{
|
||||||
|
Error(( "Failed to set camera source %d: %s\n", channel, strerror(errno) ));
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Info(( "MC:%d\n", m_videohandle ));
|
||||||
|
if ( ioctl(m_videohandle, VIDIOCMCAPTURE, &m_vmm[m_cap_frame]) )
|
||||||
|
{
|
||||||
|
Error(( "Capture failure for frame %d: %s\n", m_cap_frame, strerror(errno)));
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
m_cap_frame = (m_cap_frame+1)%m_vmb.frames;
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char *LocalCamera::PostCapture()
|
||||||
|
{
|
||||||
|
//Info(( "%s: Capturing image\n", id ));
|
||||||
|
|
||||||
|
if ( ioctl(m_videohandle, VIDIOCSYNC, &m_sync_frame) )
|
||||||
|
{
|
||||||
|
Error(( "Sync failure for frame %d: %s\n", m_sync_frame, strerror(errno)));
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char *buffer = m_buffer+(m_sync_frame*m_vmb.size/m_vmb.frames);
|
||||||
|
m_sync_frame = (m_sync_frame+1)%m_vmb.frames;
|
||||||
|
|
||||||
|
return( buffer );
|
||||||
|
}
|
||||||
|
|
||||||
|
int LocalCamera::PostCapture( Image &image )
|
||||||
|
{
|
||||||
|
//Info(( "%s: Capturing image\n", id ));
|
||||||
|
|
||||||
|
if ( ioctl(m_videohandle, VIDIOCSYNC, &m_sync_frame) )
|
||||||
|
{
|
||||||
|
Error(( "Sync failure for frame %d: %s\n", m_sync_frame, strerror(errno)));
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char *buffer = m_buffer+(m_sync_frame*m_vmb.size/m_vmb.frames);
|
||||||
|
m_sync_frame = (m_sync_frame+1)%m_vmb.frames;
|
||||||
|
|
||||||
|
static unsigned char temp_buffer[2048*1536];
|
||||||
|
switch( palette )
|
||||||
|
{
|
||||||
|
case VIDEO_PALETTE_YUV420P :
|
||||||
|
{
|
||||||
|
static unsigned char y_plane[2048*1536];
|
||||||
|
static char u_plane[2048*1536];
|
||||||
|
static char v_plane[2048*1536];
|
||||||
|
|
||||||
|
unsigned char *rgb_ptr = temp_buffer;
|
||||||
|
unsigned char *y_ptr = y_plane;
|
||||||
|
char *u1_ptr = u_plane;
|
||||||
|
char *u2_ptr = u_plane+width;
|
||||||
|
char *v1_ptr = v_plane;
|
||||||
|
char *v2_ptr = v_plane+width;
|
||||||
|
|
||||||
|
int Y_size = width*height;
|
||||||
|
int C_size = Y_size/4;
|
||||||
|
unsigned char *Y_ptr = buffer;
|
||||||
|
unsigned char *Cb_ptr = buffer + Y_size;
|
||||||
|
unsigned char *Cr_ptr = Cb_ptr + C_size;
|
||||||
|
|
||||||
|
int y,u,v;
|
||||||
|
for ( int i = 0; i < Y_size; i++ )
|
||||||
|
{
|
||||||
|
if ( *Y_ptr <= 16 )
|
||||||
|
*y_ptr = 0;
|
||||||
|
else if ( *Y_ptr >= 235 )
|
||||||
|
*y_ptr = 255;
|
||||||
|
else
|
||||||
|
*y_ptr = (255*((*Y_ptr)-16))/219;
|
||||||
|
y_ptr++;
|
||||||
|
Y_ptr++;
|
||||||
|
//y = (255*((*Y_ptr++)-16))/219;
|
||||||
|
//*y_ptr++ = y<0?0:(y>255?255:y);
|
||||||
|
}
|
||||||
|
int half_width = width/2;
|
||||||
|
for ( int i = 0, j = 0; i < C_size; i++, j++ )
|
||||||
|
{
|
||||||
|
if ( j == half_width )
|
||||||
|
{
|
||||||
|
j = 0;
|
||||||
|
u1_ptr += width;
|
||||||
|
u2_ptr += width;
|
||||||
|
v1_ptr += width;
|
||||||
|
v2_ptr += width;
|
||||||
|
}
|
||||||
|
if ( *Cb_ptr <= 16 )
|
||||||
|
u = 0;
|
||||||
|
else if ( *Cb_ptr >= 240 )
|
||||||
|
u = 255;
|
||||||
|
else
|
||||||
|
u = (127*((*Cb_ptr)-128))/112;
|
||||||
|
Cb_ptr++;
|
||||||
|
//u = (127*((*Cb_ptr++)-128))/112;
|
||||||
|
//u = u<0?0:(u>255?255:u);
|
||||||
|
|
||||||
|
*u1_ptr++ = u;
|
||||||
|
*u1_ptr++ = u;
|
||||||
|
*u2_ptr++ = u;
|
||||||
|
*u2_ptr++ = u;
|
||||||
|
|
||||||
|
if ( *Cr_ptr <= 16 )
|
||||||
|
v = 0;
|
||||||
|
else if ( *Cr_ptr >= 240 )
|
||||||
|
v = 255;
|
||||||
|
else
|
||||||
|
v = (127*((*Cr_ptr)-128))/112;
|
||||||
|
Cr_ptr++;
|
||||||
|
//v = (127*((*Cr_ptr++)-128))/112;
|
||||||
|
//v = v<0?0:(v>255?255:v);
|
||||||
|
|
||||||
|
*v1_ptr++ = v;
|
||||||
|
*v1_ptr++ = v;
|
||||||
|
*v2_ptr++ = v;
|
||||||
|
*v2_ptr++ = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
y_ptr = y_plane;
|
||||||
|
u1_ptr = u_plane;
|
||||||
|
v1_ptr = v_plane;
|
||||||
|
int size = Y_size*3;
|
||||||
|
int r,g,b;
|
||||||
|
for ( int i = 0; i < size; i++ )
|
||||||
|
{
|
||||||
|
y = *y_ptr++;
|
||||||
|
u = *u1_ptr++;
|
||||||
|
v = *v1_ptr++;
|
||||||
|
|
||||||
|
r = y + ((1402*v)/1000);
|
||||||
|
g = y - (((344*u)/1000)+((714*v)/1000));
|
||||||
|
b = y + ((1772*u)/1000);
|
||||||
|
|
||||||
|
*rgb_ptr++ = r<0?0:(r>255?255:r);
|
||||||
|
*rgb_ptr++ = g<0?0:(g>255?255:g);
|
||||||
|
*rgb_ptr++ = b<0?0:(b>255?255:b);
|
||||||
|
}
|
||||||
|
buffer = temp_buffer;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case VIDEO_PALETTE_RGB24 :
|
||||||
|
{
|
||||||
|
if ( ZM_LOCAL_BGR_INVERT )
|
||||||
|
{
|
||||||
|
int size = width*height*3;
|
||||||
|
for ( int i = 0; i < size; i += 3 )
|
||||||
|
{
|
||||||
|
temp_buffer[i] = buffer[i+2];
|
||||||
|
temp_buffer[i+1] = buffer[i+1];
|
||||||
|
temp_buffer[i+2] = buffer[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buffer = temp_buffer;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default : // Everything else is straightforward, for now.
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
image.Assign( width, height, colours, buffer );
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <linux/videodev.h>
|
|
||||||
|
|
||||||
#include "zm_camera.h"
|
#include "zm_camera.h"
|
||||||
|
|
||||||
|
@ -48,7 +47,7 @@ protected:
|
||||||
static int camera_count;
|
static int camera_count;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LocalCamera( int p_device, int p_channel, int p_format, int p_width, int p_height, int p_colours, bool p_capture=true );
|
LocalCamera( int p_device, int p_channel, int p_format, int p_width, int p_height, int p_palette, bool p_capture=true );
|
||||||
~LocalCamera();
|
~LocalCamera();
|
||||||
|
|
||||||
void Initialise();
|
void Initialise();
|
||||||
|
@ -58,67 +57,9 @@ public:
|
||||||
unsigned int Channel() const { return( channel ); }
|
unsigned int Channel() const { return( channel ); }
|
||||||
unsigned int Format() const { return( format ); }
|
unsigned int Format() const { return( format ); }
|
||||||
|
|
||||||
int PreCapture()
|
int PreCapture();
|
||||||
{
|
unsigned char *PostCapture();
|
||||||
//Info(( "%s: Capturing image\n", id ));
|
int PostCapture( Image &image );
|
||||||
|
|
||||||
if ( camera_count > 1 )
|
|
||||||
{
|
|
||||||
//Info(( "Switching\n" ));
|
|
||||||
struct video_channel vs;
|
|
||||||
|
|
||||||
vs.channel = channel;
|
|
||||||
//vs.norm = VIDEO_MODE_AUTO;
|
|
||||||
vs.norm = format;
|
|
||||||
vs.flags = 0;
|
|
||||||
vs.type = VIDEO_TYPE_CAMERA;
|
|
||||||
if(ioctl(m_videohandle, VIDIOCSCHAN, &vs))
|
|
||||||
{
|
|
||||||
Error(( "Failed to set camera source %d: %s\n", channel, strerror(errno) ));
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//Info(( "MC:%d\n", m_videohandle ));
|
|
||||||
if ( ioctl(m_videohandle, VIDIOCMCAPTURE, &m_vmm[m_cap_frame]) )
|
|
||||||
{
|
|
||||||
Error(( "Capture failure for frame %d: %s\n", m_cap_frame, strerror(errno)));
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
m_cap_frame = (m_cap_frame+1)%m_vmb.frames;
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
unsigned char *PostCapture()
|
|
||||||
{
|
|
||||||
//Info(( "%s: Capturing image\n", id ));
|
|
||||||
|
|
||||||
if ( ioctl(m_videohandle, VIDIOCSYNC, &m_sync_frame) )
|
|
||||||
{
|
|
||||||
Error(( "Sync failure for frame %d: %s\n", m_sync_frame, strerror(errno)));
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char *buffer = m_buffer+(m_sync_frame*m_vmb.size/m_vmb.frames);
|
|
||||||
m_sync_frame = (m_sync_frame+1)%m_vmb.frames;
|
|
||||||
|
|
||||||
return( buffer );
|
|
||||||
}
|
|
||||||
int PostCapture( Image &image )
|
|
||||||
{
|
|
||||||
//Info(( "%s: Capturing image\n", id ));
|
|
||||||
|
|
||||||
if ( ioctl(m_videohandle, VIDIOCSYNC, &m_sync_frame) )
|
|
||||||
{
|
|
||||||
Error(( "Sync failure for frame %d: %s\n", m_sync_frame, strerror(errno)));
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char *buffer = m_buffer+(m_sync_frame*m_vmb.size/m_vmb.frames);
|
|
||||||
m_sync_frame = (m_sync_frame+1)%m_vmb.frames;
|
|
||||||
|
|
||||||
image.Assign( width, height, colours, buffer );
|
|
||||||
|
|
||||||
return( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool GetCurrentSettings( int device, char *output, bool verbose );
|
static bool GetCurrentSettings( int device, char *output, bool verbose );
|
||||||
};
|
};
|
||||||
|
|
|
@ -530,11 +530,11 @@ int Monitor::Load( int device, Monitor **&monitors, bool capture )
|
||||||
static char sql[256];
|
static char sql[256];
|
||||||
if ( device == -1 )
|
if ( device == -1 )
|
||||||
{
|
{
|
||||||
strcpy( sql, "select Id, Name, Function+0, Device, Channel, Format, Width, Height, Colours, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Function != 'None'" );
|
strcpy( sql, "select Id, Name, Function+0, Device, Channel, Format, Width, Height, Palette, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Function != 'None'" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf( sql, "select Id, Name, Function+0, Device, Channel, Format, Width, Height, Colours, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Function != 'None' and Device = %d", device );
|
sprintf( sql, "select Id, Name, Function+0, Device, Channel, Format, Width, Height, Palette, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Function != 'None' and Device = %d", device );
|
||||||
}
|
}
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
|
@ -554,7 +554,7 @@ int Monitor::Load( int device, Monitor **&monitors, bool capture )
|
||||||
monitors = new Monitor *[n_monitors];
|
monitors = new Monitor *[n_monitors];
|
||||||
for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ )
|
for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ )
|
||||||
{
|
{
|
||||||
monitors[i] = new Monitor( atoi(dbrow[0]), dbrow[1], atoi(dbrow[2]), atoi(dbrow[3]), atoi(dbrow[4]), atoi(dbrow[5]), atoi(dbrow[6]), atoi(dbrow[7]), atoi(dbrow[8])/8, capture, dbrow[9], Coord( atoi(dbrow[10]), atoi(dbrow[11]) ), atoi(dbrow[12]), atoi(dbrow[13]), atoi(dbrow[14]), atoi(dbrow[15]), atof(dbrow[16])>0.0?int(1000.0/atof(dbrow[16])):0, atoi(dbrow[17]), atoi(dbrow[18]) );
|
monitors[i] = new Monitor( atoi(dbrow[0]), dbrow[1], atoi(dbrow[2]), atoi(dbrow[3]), atoi(dbrow[4]), atoi(dbrow[5]), atoi(dbrow[6]), atoi(dbrow[7]), atoi(dbrow[8]), capture, dbrow[9], Coord( atoi(dbrow[10]), atoi(dbrow[11]) ), atoi(dbrow[12]), atoi(dbrow[13]), atoi(dbrow[14]), atoi(dbrow[15]), atof(dbrow[16])>0.0?int(1000.0/atof(dbrow[16])):0, atoi(dbrow[17]), atoi(dbrow[18]) );
|
||||||
Zone **zones = 0;
|
Zone **zones = 0;
|
||||||
int n_zones = Zone::Load( monitors[i], zones );
|
int n_zones = Zone::Load( monitors[i], zones );
|
||||||
monitors[i]->AddZones( n_zones, zones );
|
monitors[i]->AddZones( n_zones, zones );
|
||||||
|
@ -576,11 +576,11 @@ int Monitor::Load( const char *host, const char*port, const char *path, Monitor
|
||||||
static char sql[256];
|
static char sql[256];
|
||||||
if ( !host )
|
if ( !host )
|
||||||
{
|
{
|
||||||
strcpy( sql, "select Id, Name, Function+0, Host, Port, Path, Width, Height, Colours, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Function != 'None'" );
|
strcpy( sql, "select Id, Name, Function+0, Host, Port, Path, Width, Height, Palette, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Function != 'None'" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf( sql, "select Id, Name, Function+0, Host, Port, Path, Width, Height, Colours, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Function != 'None' and Host = '%s' and Port = '%s' and Path = '%s'", host, port, path );
|
sprintf( sql, "select Id, Name, Function+0, Host, Port, Path, Width, Height, Palette, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Function != 'None' and Host = '%s' and Port = '%s' and Path = '%s'", host, port, path );
|
||||||
}
|
}
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
|
@ -600,7 +600,7 @@ int Monitor::Load( const char *host, const char*port, const char *path, Monitor
|
||||||
monitors = new Monitor *[n_monitors];
|
monitors = new Monitor *[n_monitors];
|
||||||
for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ )
|
for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ )
|
||||||
{
|
{
|
||||||
monitors[i] = new Monitor( atoi(dbrow[0]), dbrow[1], atoi(dbrow[2]), dbrow[3], dbrow[4], dbrow[5], atoi(dbrow[6]), atoi(dbrow[7]), atoi(dbrow[8])/8, capture, dbrow[9], Coord( atoi(dbrow[10]), atoi(dbrow[11]) ), atoi(dbrow[12]), atoi(dbrow[13]), atoi(dbrow[14]), atoi(dbrow[15]), atof(dbrow[16])>0.0?int(1000.0/atof(dbrow[16])):0, atoi(dbrow[17]), atoi(dbrow[18]) );
|
monitors[i] = new Monitor( atoi(dbrow[0]), dbrow[1], atoi(dbrow[2]), dbrow[3], dbrow[4], dbrow[5], atoi(dbrow[6]), atoi(dbrow[7]), atoi(dbrow[8]), capture, dbrow[9], Coord( atoi(dbrow[10]), atoi(dbrow[11]) ), atoi(dbrow[12]), atoi(dbrow[13]), atoi(dbrow[14]), atoi(dbrow[15]), atof(dbrow[16])>0.0?int(1000.0/atof(dbrow[16])):0, atoi(dbrow[17]), atoi(dbrow[18]) );
|
||||||
Zone **zones = 0;
|
Zone **zones = 0;
|
||||||
int n_zones = Zone::Load( monitors[i], zones );
|
int n_zones = Zone::Load( monitors[i], zones );
|
||||||
monitors[i]->AddZones( n_zones, zones );
|
monitors[i]->AddZones( n_zones, zones );
|
||||||
|
@ -620,7 +620,7 @@ int Monitor::Load( const char *host, const char*port, const char *path, Monitor
|
||||||
Monitor *Monitor::Load( int id, bool load_zones )
|
Monitor *Monitor::Load( int id, bool load_zones )
|
||||||
{
|
{
|
||||||
static char sql[256];
|
static char sql[256];
|
||||||
sprintf( sql, "select Id, Name, Type, Function+0, Device, Channel, Format, Host, Port, Path, Width, Height, Colours, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Id = %d", id );
|
sprintf( sql, "select Id, Name, Type, Function+0, Device, Channel, Format, Host, Port, Path, Width, Height, Palette, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, MaxFPS, FPSReportInterval, RefBlendPerc from Monitors where Id = %d", id );
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
Error(( "Can't run query: %s", mysql_error( &dbconn ) ));
|
Error(( "Can't run query: %s", mysql_error( &dbconn ) ));
|
||||||
|
@ -640,11 +640,11 @@ Monitor *Monitor::Load( int id, bool load_zones )
|
||||||
{
|
{
|
||||||
if ( !strcmp( dbrow[2], "Local" ) )
|
if ( !strcmp( dbrow[2], "Local" ) )
|
||||||
{
|
{
|
||||||
monitor = new Monitor( atoi(dbrow[0]), dbrow[1], atoi(dbrow[3]), atoi(dbrow[4]), atoi(dbrow[5]), atoi(dbrow[6]), atoi(dbrow[10]), atoi(dbrow[11]), atoi(dbrow[12])/8, false, dbrow[13], Coord( atoi(dbrow[14]), atoi(dbrow[15]) ), atoi(dbrow[16]), atoi(dbrow[17]), atoi(dbrow[18]), atoi(dbrow[19]), atof(dbrow[20])>0.0?int(1000.0/atof(dbrow[20])):0, atoi(dbrow[21]), atoi(dbrow[22]) );
|
monitor = new Monitor( atoi(dbrow[0]), dbrow[1], atoi(dbrow[3]), atoi(dbrow[4]), atoi(dbrow[5]), atoi(dbrow[6]), atoi(dbrow[10]), atoi(dbrow[11]), atoi(dbrow[12]), false, dbrow[13], Coord( atoi(dbrow[14]), atoi(dbrow[15]) ), atoi(dbrow[16]), atoi(dbrow[17]), atoi(dbrow[18]), atoi(dbrow[19]), atof(dbrow[20])>0.0?int(1000.0/atof(dbrow[20])):0, atoi(dbrow[21]), atoi(dbrow[22]) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
monitor = new Monitor( atoi(dbrow[0]), dbrow[1], atoi(dbrow[3]), dbrow[7], dbrow[8], dbrow[9], atoi(dbrow[10]), atoi(dbrow[11]), atoi(dbrow[12])/8, false, dbrow[13], Coord( atoi(dbrow[14]), atoi(dbrow[15]) ), atoi(dbrow[16]), atoi(dbrow[17]), atoi(dbrow[18]), atoi(dbrow[19]), atof(dbrow[20])>0.0?int(1000.0/atof(dbrow[20])):0, atoi(dbrow[21]), atoi(dbrow[22]) );
|
monitor = new Monitor( atoi(dbrow[0]), dbrow[1], atoi(dbrow[3]), dbrow[7], dbrow[8], dbrow[9], atoi(dbrow[10]), atoi(dbrow[11]), atoi(dbrow[12]), false, dbrow[13], Coord( atoi(dbrow[14]), atoi(dbrow[15]) ), atoi(dbrow[16]), atoi(dbrow[17]), atoi(dbrow[18]), atoi(dbrow[19]), atof(dbrow[20])>0.0?int(1000.0/atof(dbrow[20])):0, atoi(dbrow[21]), atoi(dbrow[22]) );
|
||||||
}
|
}
|
||||||
int n_zones = 0;
|
int n_zones = 0;
|
||||||
if ( load_zones )
|
if ( load_zones )
|
||||||
|
@ -739,7 +739,8 @@ bool Monitor::DumpSettings( char *output, bool verbose )
|
||||||
}
|
}
|
||||||
sprintf( output+strlen(output), "Width : %d\n", ((LocalCamera *)camera)->Width() );
|
sprintf( output+strlen(output), "Width : %d\n", ((LocalCamera *)camera)->Width() );
|
||||||
sprintf( output+strlen(output), "Height : %d\n", camera->Height() );
|
sprintf( output+strlen(output), "Height : %d\n", camera->Height() );
|
||||||
sprintf( output+strlen(output), "Colour Depth : %d\n", 8*camera->Colours() );
|
sprintf( output+strlen(output), "Palette : %d\n", camera->Palette() );
|
||||||
|
sprintf( output+strlen(output), "Colours : %d\n", camera->Colours() );
|
||||||
sprintf( output+strlen(output), "Label Format : %s\n", label_format );
|
sprintf( output+strlen(output), "Label Format : %s\n", label_format );
|
||||||
sprintf( output+strlen(output), "Label Coord : %d,%d\n", label_coord.X(), label_coord.Y() );
|
sprintf( output+strlen(output), "Label Coord : %d,%d\n", label_coord.X(), label_coord.Y() );
|
||||||
sprintf( output+strlen(output), "Image Buffer Count : %d\n", image_buffer_count );
|
sprintf( output+strlen(output), "Image Buffer Count : %d\n", image_buffer_count );
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
#include "zm_remote_camera.h"
|
#include "zm_remote_camera.h"
|
||||||
|
|
||||||
RemoteCamera::RemoteCamera( const char *p_host, const char *p_port, const char *p_path, int p_width, int p_height, int p_colours, bool p_capture ) : Camera( REMOTE, p_width, p_height, p_colours, p_capture ), host( p_host ), port( p_port ), path( p_path )
|
RemoteCamera::RemoteCamera( const char *p_host, const char *p_port, const char *p_path, int p_width, int p_height, int p_palette, bool p_capture ) : Camera( REMOTE, p_width, p_height, p_palette, p_capture ), host( p_host ), port( p_port ), path( p_path )
|
||||||
{
|
{
|
||||||
sd = -1;
|
sd = -1;
|
||||||
hp = 0;
|
hp = 0;
|
||||||
|
|
|
@ -58,7 +58,7 @@ protected:
|
||||||
int sd;
|
int sd;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RemoteCamera( const char *p_host, const char *p_port, const char *p_path, int p_width, int p_height, int p_colours, bool p_capture=true );
|
RemoteCamera( const char *p_host, const char *p_port, const char *p_path, int p_width, int p_height, int p_palette, bool p_capture=true );
|
||||||
~RemoteCamera();
|
~RemoteCamera();
|
||||||
|
|
||||||
const char *Host() const { return( host ); }
|
const char *Host() const { return( host ); }
|
||||||
|
|
|
@ -246,7 +246,7 @@ if ( $action )
|
||||||
}
|
}
|
||||||
if ( $new_width != $monitor['Width'] ) $changes[] = "Width = '$new_width'";
|
if ( $new_width != $monitor['Width'] ) $changes[] = "Width = '$new_width'";
|
||||||
if ( $new_height != $monitor['Height'] ) $changes[] = "Height = '$new_height'";
|
if ( $new_height != $monitor['Height'] ) $changes[] = "Height = '$new_height'";
|
||||||
if ( $new_colours != $monitor['Colours'] ) $changes[] = "Colours = '$new_colours'";
|
if ( $new_colours != $monitor['Palette'] ) $changes[] = "Palette = '$new_palette'";
|
||||||
if ( $new_label_format != $monitor['LabelFormat'] ) $changes[] = "LabelFormat = '$new_label_format'";
|
if ( $new_label_format != $monitor['LabelFormat'] ) $changes[] = "LabelFormat = '$new_label_format'";
|
||||||
if ( $new_label_x != $monitor['LabelX'] ) $changes[] = "LabelX = '$new_label_x'";
|
if ( $new_label_x != $monitor['LabelX'] ) $changes[] = "LabelX = '$new_label_x'";
|
||||||
if ( $new_label_y != $monitor['LabelY'] ) $changes[] = "LabelY = '$new_label_y'";
|
if ( $new_label_y != $monitor['LabelY'] ) $changes[] = "LabelY = '$new_label_y'";
|
||||||
|
@ -271,7 +271,7 @@ if ( $action )
|
||||||
die( mysql_error() );
|
die( mysql_error() );
|
||||||
if ( $new_name != $monitor[Name] )
|
if ( $new_name != $monitor[Name] )
|
||||||
{
|
{
|
||||||
exec( escape_shell_command( "mv ".EVENTS_PATH."/$monitor[Name] ".EVENTS_PATH."/$new_name" ) );
|
exec( escapeshellcommand( "mv ".EVENTS_PATH."/$monitor[Name] ".EVENTS_PATH."/$new_name" ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -243,7 +243,6 @@ function confirmStatus( new_status )
|
||||||
<?php } else { ?>
|
<?php } else { ?>
|
||||||
<td align="left" class="text"><a href="javascript: newWindow( '<?= $PHP_SELF ?>?view=monitor&mid=<?= $monitor[Id] ?>', 'zmMonitor', <?= $jws['monitor']['w'] ?>, <?= $jws['monitor']['h'] ?> );"><span class="<?= $dclass ?>"><?= $monitor[Host] ?></span></a></td>
|
<td align="left" class="text"><a href="javascript: newWindow( '<?= $PHP_SELF ?>?view=monitor&mid=<?= $monitor[Id] ?>', 'zmMonitor', <?= $jws['monitor']['w'] ?>, <?= $jws['monitor']['h'] ?> );"><span class="<?= $dclass ?>"><?= $monitor[Host] ?></span></a></td>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
<!--<td align="left" class="text"><?= $monitor[Width] ?>x<?= $monitor[Height] ?>x<?= $monitor[Colours]*8 ?></td>-->
|
|
||||||
<td align="right" class="text"><a href="javascript: newWindow( '<?= $PHP_SELF ?>?view=events&mid=<?= $monitor[Id] ?>&filter=1', 'zmEvents<?= $monitor[Name] ?>', <?= $jws['events']['w'] ?>, <?= $jws['events']['h'] ?> );"><?= $monitor[EventCount] ?></a></td>
|
<td align="right" class="text"><a href="javascript: newWindow( '<?= $PHP_SELF ?>?view=events&mid=<?= $monitor[Id] ?>&filter=1', 'zmEvents<?= $monitor[Name] ?>', <?= $jws['events']['w'] ?>, <?= $jws['events']['h'] ?> );"><?= $monitor[EventCount] ?></a></td>
|
||||||
<td align="right" class="text"><a href="javascript: newWindow( '<?= $PHP_SELF ?>?view=events&mid=<?= $monitor[Id] ?>&filter=1&trms=2&attr1=Archived&val1=0&cnj2=and&attr2=DateTime&op2=%3e%3d&val2=last+hour', 'zmEvents<?= $monitor[Name] ?>', <?= $jws['events']['w'] ?>, <?= $jws['events']['h'] ?> );"><?= $monitor[HourEventCount] ?></a></td>
|
<td align="right" class="text"><a href="javascript: newWindow( '<?= $PHP_SELF ?>?view=events&mid=<?= $monitor[Id] ?>&filter=1&trms=2&attr1=Archived&val1=0&cnj2=and&attr2=DateTime&op2=%3e%3d&val2=last+hour', 'zmEvents<?= $monitor[Name] ?>', <?= $jws['events']['w'] ?>, <?= $jws['events']['h'] ?> );"><?= $monitor[HourEventCount] ?></a></td>
|
||||||
<td align="right" class="text"><a href="javascript: newWindow( '<?= $PHP_SELF ?>?view=events&mid=<?= $monitor[Id] ?>&filter=1&trms=2&attr1=Archived&val1=0&cnj2=and&attr2=DateTime&op2=%3e%3d&val2=last+day', 'zmEvents<?= $monitor[Name] ?>', <?= $jws['events']['w'] ?>, <?= $jws['events']['h'] ?> );"><?= $monitor[DayEventCount] ?></a></td>
|
<td align="right" class="text"><a href="javascript: newWindow( '<?= $PHP_SELF ?>?view=events&mid=<?= $monitor[Id] ?>&filter=1&trms=2&attr1=Archived&val1=0&cnj2=and&attr2=DateTime&op2=%3e%3d&val2=last+day', 'zmEvents<?= $monitor[Name] ?>', <?= $jws['events']['w'] ?>, <?= $jws['events']['h'] ?> );"><?= $monitor[DayEventCount] ?></a></td>
|
||||||
|
@ -2064,6 +2063,8 @@ function configureButton(form,name)
|
||||||
$monitor[FPSReportInterval] = 1000;
|
$monitor[FPSReportInterval] = 1000;
|
||||||
$monitor[RefBlendPerc] = 10;
|
$monitor[RefBlendPerc] = 10;
|
||||||
}
|
}
|
||||||
|
$local_palettes = array( "Greyscale"=>1, "RGB24"=>4, "YUV420P"=>15 );
|
||||||
|
$remote_palettes = array( "8 bit greyscale"=>1, "24 bit colour"=>4 );
|
||||||
?>
|
?>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
@ -2128,6 +2129,7 @@ $source_types = array( "Local"=>"Local", "Remote"=>"Remote" );
|
||||||
<tr><td align="left" class="text">Device Number (/dev/video?)</td><td align="left" class="text"><input type="text" name="new_device" value="<?= $monitor[Device] ?>" size="4" class="form"></td></tr>
|
<tr><td align="left" class="text">Device Number (/dev/video?)</td><td align="left" class="text"><input type="text" name="new_device" value="<?= $monitor[Device] ?>" size="4" class="form"></td></tr>
|
||||||
<tr><td align="left" class="text">Device Channel</td><td align="left" class="text"><input type="text" name="new_channel" value="<?= $monitor[Channel] ?>" size="4" class="form"></td></tr>
|
<tr><td align="left" class="text">Device Channel</td><td align="left" class="text"><input type="text" name="new_channel" value="<?= $monitor[Channel] ?>" size="4" class="form"></td></tr>
|
||||||
<tr><td align="left" class="text">Device Format (0=PAL,1=NTSC etc)</td><td align="left" class="text"><input type="text" name="new_format" value="<?= $monitor[Format] ?>" size="4" class="form"></td></tr>
|
<tr><td align="left" class="text">Device Format (0=PAL,1=NTSC etc)</td><td align="left" class="text"><input type="text" name="new_format" value="<?= $monitor[Format] ?>" size="4" class="form"></td></tr>
|
||||||
|
<tr><td align="left" class="text">Capture Palette</td><td align="left" class="text"><select name="new_palette" class="form"><?php foreach ( $local_palettes as $name => $value ) { ?><option value="<?= $value ?>"<?php if ( $value == $monitor[Palette] ) { ?> selected<?php } ?>><?= $name ?></option><?php } ?></select></td></tr>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2136,13 +2138,12 @@ $source_types = array( "Local"=>"Local", "Remote"=>"Remote" );
|
||||||
<tr><td align="left" class="text">Remote Host Name</td><td align="left" class="text"><input type="text" name="new_host" value="<?= $monitor[Host] ?>" size="16" class="form"></td></tr>
|
<tr><td align="left" class="text">Remote Host Name</td><td align="left" class="text"><input type="text" name="new_host" value="<?= $monitor[Host] ?>" size="16" class="form"></td></tr>
|
||||||
<tr><td align="left" class="text">Remote Host Port</td><td align="left" class="text"><input type="text" name="new_port" value="<?= $monitor[Port] ?>" size="6" class="form"></td></tr>
|
<tr><td align="left" class="text">Remote Host Port</td><td align="left" class="text"><input type="text" name="new_port" value="<?= $monitor[Port] ?>" size="6" class="form"></td></tr>
|
||||||
<tr><td align="left" class="text">Remote Host Path</td><td align="left" class="text"><input type="text" name="new_path" value="<?= $monitor[Path] ?>" size="36" class="form"></td></tr>
|
<tr><td align="left" class="text">Remote Host Path</td><td align="left" class="text"><input type="text" name="new_path" value="<?= $monitor[Path] ?>" size="36" class="form"></td></tr>
|
||||||
|
<tr><td align="left" class="text">Remote Image Colours</td><td align="left" class="text"><select name="new_palette" class="form"><?php foreach ( $remote_palettes as $name => $value ) { ?><option value= <?= $value ?>"<?php if ( $value == $monitor[Palette] ) { ?> selected<?php } ?>><?= $name ?></option><?php } ?></select></td></tr>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<tr><td align="left" class="text">Capture Width (pixels)</td><td align="left" class="text"><input type="text" name="new_width" value="<?= $monitor[Width] ?>" size="4" class="form"></td></tr>
|
<tr><td align="left" class="text">Capture Width (pixels)</td><td align="left" class="text"><input type="text" name="new_width" value="<?= $monitor[Width] ?>" size="4" class="form"></td></tr>
|
||||||
<tr><td align="left" class="text">Capture Height (pixels)</td><td align="left" class="text"><input type="text" name="new_height" value="<?= $monitor[Height] ?>" size="4" class="form"></td></tr>
|
<tr><td align="left" class="text">Capture Height (pixels)</td><td align="left" class="text"><input type="text" name="new_height" value="<?= $monitor[Height] ?>" size="4" class="form"></td></tr>
|
||||||
<?php $depths = array( 8, 24 ); ?>
|
|
||||||
<tr><td align="left" class="text">Capture Colour Depth (bits)</td><td align="left" class="text"><select name="new_colours" class="form"><?php foreach ( $depths as $depth ) { ?><option<?php if ( $depth == $monitor[Colours] ) { ?> selected<?php } ?>><?= $depth ?></option><?php } ?></select></td></tr>
|
|
||||||
<tr><td align="left" class="text">Timestamp Label Format</td><td align="left" class="text"><input type="text" name="new_label_format" value="<?= $monitor[LabelFormat] ?>" size="20" class="form"></td></tr>
|
<tr><td align="left" class="text">Timestamp Label Format</td><td align="left" class="text"><input type="text" name="new_label_format" value="<?= $monitor[LabelFormat] ?>" size="20" class="form"></td></tr>
|
||||||
<tr><td align="left" class="text">Timestamp Label X</td><td align="left" class="text"><input type="text" name="new_label_x" value="<?= $monitor[LabelX] ?>" size="4" class="form"></td></tr>
|
<tr><td align="left" class="text">Timestamp Label X</td><td align="left" class="text"><input type="text" name="new_label_x" value="<?= $monitor[LabelX] ?>" size="4" class="form"></td></tr>
|
||||||
<tr><td align="left" class="text">Timestamp Label Y</td><td align="left" class="text"><input type="text" name="new_label_y" value="<?= $monitor[LabelY] ?>" size="4" class="form"></td></tr>
|
<tr><td align="left" class="text">Timestamp Label Y</td><td align="left" class="text"><input type="text" name="new_label_y" value="<?= $monitor[LabelY] ?>" size="4" class="form"></td></tr>
|
||||||
|
@ -2427,7 +2428,7 @@ function closeWindow()
|
||||||
}
|
}
|
||||||
case "video" :
|
case "video" :
|
||||||
{
|
{
|
||||||
$result = mysql_query( "select E.*,M.Name as MonitorName, M.Colours from Events as E, Monitors as M where E.Id = '$eid' and E.MonitorId = M.Id" );
|
$result = mysql_query( "select E.*,M.Name as MonitorName, M.Palette from Events as E, Monitors as M where E.Id = '$eid' and E.MonitorId = M.Id" );
|
||||||
if ( !$result )
|
if ( !$result )
|
||||||
die( mysql_error() );
|
die( mysql_error() );
|
||||||
$event = mysql_fetch_assoc( $result );
|
$event = mysql_fetch_assoc( $result );
|
||||||
|
@ -2459,7 +2460,7 @@ function closeWindow()
|
||||||
fputs( $fp, "REFERENCE_FRAME ORIGINAL\n" );
|
fputs( $fp, "REFERENCE_FRAME ORIGINAL\n" );
|
||||||
fputs( $fp, "FRAME_RATE 24\n" );
|
fputs( $fp, "FRAME_RATE 24\n" );
|
||||||
|
|
||||||
if ( $event[Colours] == 1 )
|
if ( $event[Palette] == 1 )
|
||||||
fputs( $fp, "INPUT_CONVERT ".ZM_PATH_NETPBM."/jpegtopnm * | ".ZM_PATH_NETPBM."/pgmtoppm white | ".ZM_PATH_NETPBM."/ppmtojpeg\n" );
|
fputs( $fp, "INPUT_CONVERT ".ZM_PATH_NETPBM."/jpegtopnm * | ".ZM_PATH_NETPBM."/pgmtoppm white | ".ZM_PATH_NETPBM."/ppmtojpeg\n" );
|
||||||
else
|
else
|
||||||
fputs( $fp, "INPUT_CONVERT *\n" );
|
fputs( $fp, "INPUT_CONVERT *\n" );
|
||||||
|
|
Loading…
Reference in New Issue