Added rate control to event replay.

git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@649 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
stan 2003-10-10 10:38:30 +00:00
parent e498c91185
commit 3fe296d406
5 changed files with 38 additions and 13 deletions

View File

@ -265,7 +265,7 @@ void Event::AddFrame( struct timeval timestamp, const Image *image, const Image
}
}
void Event::StreamEvent( const char *path, int event_id, long refresh, FILE *fd )
void Event::StreamEvent( const char *path, int event_id, int rate, FILE *fd )
{
static char sql[BUFSIZ];
sprintf( sql, "select Id, EventId, ImagePath, Delta from Frames where EventId = %d order by Id", event_id );
@ -291,18 +291,23 @@ void Event::StreamEvent( const char *path, int event_id, long refresh, FILE *fd
fprintf( fd, "--ZoneMinderFrame\n" );
int n_frames = mysql_num_rows( result );
Info(( "Got %d frames", n_frames ));
Info(( "Got %d frames, at rate %d", n_frames, rate ));
FILE *fdj = NULL;
int n_bytes = 0;
static unsigned char buffer[400000];
double last_delta = 0;
for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ )
{
if ( refresh < 0 )
if ( rate )
{
if ( i )
{
usleep( (int)((1000000*(atof(dbrow[3])-last_delta))/abs(refresh)) );
int delay = 0;
if ( rate < 0 )
delay = (int)((1000000*(atof(dbrow[3])-last_delta))*abs(rate));
else
delay = (int)((1000000*(atof(dbrow[3])-last_delta))/rate);
usleep( delay );
}
last_delta = atof(dbrow[3]);
}
@ -322,10 +327,6 @@ void Event::StreamEvent( const char *path, int event_id, long refresh, FILE *fd
{
Error(( "Can't open %s: %s", filepath, strerror(errno) ));
}
if ( refresh > 0 )
{
usleep( refresh*1000 );
}
}
if ( mysql_errno( &dbconn ) )
{

View File

@ -83,7 +83,7 @@ public:
void AddFrames( int n_frames, struct timeval **timestamps, const Image **images );
void AddFrame( struct timeval timestamp, const Image *image, const Image *alarm_frame=NULL, unsigned int score=0 );
static void StreamEvent( const char *path, int event_id, long refresh=0, FILE *fd=stdout );
static void StreamEvent( const char *path, int event_id, int rate=1, FILE *fd=stdout );
};
#endif // ZM_EVENT_H

View File

@ -26,6 +26,7 @@ int main( int argc, const char *argv[] )
int id = 1;
unsigned long idle = 5000;
unsigned long refresh = 50;
unsigned int rate = 1;
int event = 0;
char *path = ".";
unsigned int ttl = 0;
@ -52,7 +53,9 @@ int main( int argc, const char *argv[] )
{
char *name = strtok( parms[p], "=" );
char *value = strtok( NULL, "=" );
if ( !strcmp( name, "refresh" ) )
if ( !strcmp( name, "rate" ) )
rate = atoi( value );
else if ( !strcmp( name, "refresh" ) )
refresh = atol( value );
else if ( !strcmp( name, "idle" ) )
idle = atol( value );
@ -84,7 +87,7 @@ int main( int argc, const char *argv[] )
}
else
{
Event::StreamEvent( path, event, refresh, stdout );
Event::StreamEvent( path, event, rate, stdout );
}
return( 0 );
}

View File

@ -42,6 +42,16 @@ define( "MAX_EVENTS", 10 ); // The maximum number of events to show in th
define( "EVENT_HEADER_LINES", 25 ); // How many events are listed in the event window before a new header is inserted
define( "LEARN_MODE", false ); // Currently unimplemented, do not change
$rates = array(
"0" => "Max",
"10" => "10x",
"4" => "4x",
"2" => "2x",
"1" => "Real",
"-2" => "1/2x",
"-4" => "1/4x",
);
require_once( 'zm_db.php' );
loadConfig();

View File

@ -27,6 +27,8 @@
die( mysql_error() );
$next_event = mysql_fetch_assoc( $result );
if ( !isset( $rate ) )
$rate = 1;
?>
<html>
<head>
@ -76,7 +78,7 @@ function newWindow(Url,Name,Width,Height)
<input type="hidden" name="eid" value="<?= $eid ?>">
<input type="text" size="16" name="event_name" value="<?= $event[Name] ?>" class="form">
<input type="submit" value="Rename" class="form"<?php if ( !canEdit( 'Events' ) ) { ?> disabled<?php } ?>></form></td>
<td colspan="3" align="right" class="text">
<td colspan="2" align="right" class="text">
<form name="learn_form" method="get" action="<?= $PHP_SELF ?>">
<input type="hidden" name="view" value="<?= $view ?>">
<input type="hidden" name="action" value="learn">
@ -87,6 +89,15 @@ function newWindow(Url,Name,Width,Height)
Learn Pref:&nbsp;<select name="learn_state" class="form" onChange="learn_form.submit();"><option value=""<?php if ( !$event[LearnState] ) echo " selected" ?>>Ignore</option><option value="-"<?php if ( $event[LearnState]=='-' ) echo " selected" ?>>Exclude</option><option value="+"<?php if ( $event[LearnState]=='+' ) echo " selected" ?>>Include</option></select>
<?php } ?>
</form></td>
<td colspan="1" align="right" class="text">
<form name="rate_form" method="get" action="<?= $PHP_SELF ?>">
<input type="hidden" name="view" value="<?= $view ?>">
<input type="hidden" name="action" value="rename">
<input type="hidden" name="mid" value="<?= $mid ?>">
<input type="hidden" name="eid" value="<?= $eid ?>">
<?php buildSelect( "rate", $rates, "document.rate_form.submit();" ); ?>
</form>
</td>
</tr>
<tr>
<td align="center" class="text"><a href="javascript: refreshWindow();">Refresh</a></td>
@ -113,7 +124,7 @@ Learn Pref:&nbsp;<select name="learn_state" class="form" onChange="learn_form.su
<?php
if ( $mode == "stream" )
{
$stream_src = ZM_PATH_ZMS."?path=".ZM_PATH_WEB."&event=$eid&refresh=".STREAM_EVENT_DELAY;
$stream_src = ZM_PATH_ZMS."?path=".ZM_PATH_WEB."&event=$eid&rate=$rate";
if ( isNetscape() )
{
?>