Added patch to allow zms to produce single images.

git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@1013 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
stan 2004-04-19 13:03:16 +00:00
parent 7a60820aa9
commit d7671a1daf
3 changed files with 35 additions and 1 deletions

View File

@ -1171,6 +1171,32 @@ void Monitor::StreamImages( int scale, int maxfps, time_t ttl )
} }
} }
void Monitor::SingleImage( int scale)
{
int last_read_index = shared_data->last_write_index;
int img_buffer_size = 0;
static JOCTET img_buffer[ZM_MAX_IMAGE_SIZE];
Image scaled_image;
int index = shared_data->last_write_index%image_buffer_count;
Snapshot *snap = &image_buffer[index];
Image *snap_image = snap->image;
if ( scale != 100 )
{
scaled_image.Assign( *snap_image );
scaled_image.Scale( scale );
snap_image = &scaled_image;
}
if ( !timestamp_on_capture )
{
TimestampImage( snap_image, snap->timestamp->tv_sec );
}
snap_image->EncodeJpeg( img_buffer, &img_buffer_size );
fprintf( stdout, "Content-Length: %d\r\n", img_buffer_size );
fprintf( stdout, "Content-Type: image/jpeg\r\n\r\n" );
fwrite( img_buffer, img_buffer_size, 1, stdout );
}
#if HAVE_LIBAVCODEC #if HAVE_LIBAVCODEC

View File

@ -288,6 +288,7 @@ public:
static int Load( const char *host, const char*port, const char*path, Monitor **&monitors, Purpose purpose=QUERY ); static int Load( const char *host, const char*port, const char*path, Monitor **&monitors, Purpose purpose=QUERY );
static Monitor *Load( int id, bool load_zones=false, Purpose purpose=QUERY ); static Monitor *Load( int id, bool load_zones=false, Purpose purpose=QUERY );
void StreamImages( int scale=100, int maxfps=10, time_t ttl=0 ); void StreamImages( int scale=100, int maxfps=10, time_t ttl=0 );
void SingleImage( int scale=100 );
#if HAVE_LIBAVCODEC #if HAVE_LIBAVCODEC
void StreamMpeg( const char *format, int scale=100, int maxfps=10, int bitrate=100000 ); void StreamMpeg( const char *format, int scale=100, int maxfps=10, int bitrate=100000 );
#endif // HAVE_LIBAVCODEC #endif // HAVE_LIBAVCODEC

View File

@ -23,7 +23,7 @@
int main( int argc, const char *argv[] ) int main( int argc, const char *argv[] )
{ {
enum { ZMS_JPEG, ZMS_MPEG } mode = ZMS_JPEG; enum { ZMS_JPEG, ZMS_MPEG, ZMS_SINGLE } mode = ZMS_JPEG;
char format[32] = ""; char format[32] = "";
int id = 1; int id = 1;
int event = 0; int event = 0;
@ -67,7 +67,10 @@ int main( int argc, const char *argv[] )
char *name = strtok( parms[p], "=" ); char *name = strtok( parms[p], "=" );
char *value = strtok( NULL, "=" ); char *value = strtok( NULL, "=" );
if ( !strcmp( name, "mode" ) ) if ( !strcmp( name, "mode" ) )
{
mode = !strcmp( value, "jpeg" )?ZMS_JPEG:ZMS_MPEG; mode = !strcmp( value, "jpeg" )?ZMS_JPEG:ZMS_MPEG;
mode = !strcmp( value, "single" )?ZMS_SINGLE:mode;
}
else if ( !strcmp( name, "monitor" ) ) else if ( !strcmp( name, "monitor" ) )
id = atoi( value ); id = atoi( value );
else if ( !strcmp( name, "event" ) ) else if ( !strcmp( name, "event" ) )
@ -121,6 +124,10 @@ int main( int argc, const char *argv[] )
{ {
monitor->StreamImages( scale, maxfps, ttl ); monitor->StreamImages( scale, maxfps, ttl );
} }
else if ( mode == ZMS_SINGLE )
{
monitor->SingleImage( scale );
}
else else
{ {
#if HAVE_LIBAVCODEC #if HAVE_LIBAVCODEC