More accurate seeking, remove debug and duplicated code. Correct type of curr_frame_id to match frame_count.
This commit is contained in:
parent
9cc7f0d360
commit
4afae7b738
|
@ -527,7 +527,21 @@ void EventStream::processCommand(const CmdMsg *msg) {
|
||||||
Warning("Invalid offset, not seeking");
|
Warning("Invalid offset, not seeking");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// This should get us close, but not all frames will have the same duration
|
||||||
curr_frame_id = (int)(event_data->frame_count*offset/event_data->duration)+1;
|
curr_frame_id = (int)(event_data->frame_count*offset/event_data->duration)+1;
|
||||||
|
if ( event_data->frames[curr_frame_id-1].offset > offset ) {
|
||||||
|
while ( (curr_frame_id --) && ( event_data->frames[curr_frame_id-1].offset > offset ) ) {
|
||||||
|
}
|
||||||
|
} else if ( event_data->frames[curr_frame_id-1].offset < offset ) {
|
||||||
|
while ( (curr_frame_id ++) && ( event_data->frames[curr_frame_id-1].offset > offset ) ) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( curr_frame_id < 1 ) {
|
||||||
|
curr_frame_id = 1;
|
||||||
|
} else if ( curr_frame_id > event_data->last_frame_id ) {
|
||||||
|
curr_frame_id = event_data->last_frame_id;
|
||||||
|
}
|
||||||
|
|
||||||
curr_stream_time = event_data->frames[curr_frame_id-1].timestamp;
|
curr_stream_time = event_data->frames[curr_frame_id-1].timestamp;
|
||||||
Debug(1, "Got SEEK command, to %f (new current frame id: %d offset %f)",
|
Debug(1, "Got SEEK command, to %f (new current frame id: %d offset %f)",
|
||||||
offset, curr_frame_id, event_data->frames[curr_frame_id-1].offset);
|
offset, curr_frame_id, event_data->frames[curr_frame_id-1].offset);
|
||||||
|
@ -837,7 +851,6 @@ void EventStream::runStream() {
|
||||||
uint64_t start_usec = start.tv_sec * 1000000 + start.tv_usec;
|
uint64_t start_usec = start.tv_sec * 1000000 + start.tv_usec;
|
||||||
uint64_t last_frame_offset = 0;
|
uint64_t last_frame_offset = 0;
|
||||||
|
|
||||||
bool in_event = true;
|
|
||||||
double time_to_event = 0;
|
double time_to_event = 0;
|
||||||
|
|
||||||
while ( !zm_terminate ) {
|
while ( !zm_terminate ) {
|
||||||
|
@ -893,7 +906,6 @@ void EventStream::runStream() {
|
||||||
Debug(1, "Time since last send = %f = %f - %f", time_since_last_send, TV_2_FLOAT(now), last_frame_sent);
|
Debug(1, "Time since last send = %f = %f - %f", time_since_last_send, TV_2_FLOAT(now), last_frame_sent);
|
||||||
// > 1 second
|
// > 1 second
|
||||||
if ( time_since_last_send > 1 ) {
|
if ( time_since_last_send > 1 ) {
|
||||||
Debug(1, "Sending time to next event frame");
|
|
||||||
static char frame_text[64];
|
static char frame_text[64];
|
||||||
|
|
||||||
snprintf(frame_text, sizeof(frame_text), "Time to %s event = %d seconds",
|
snprintf(frame_text, sizeof(frame_text), "Time to %s event = %d seconds",
|
||||||
|
@ -901,11 +913,8 @@ void EventStream::runStream() {
|
||||||
if ( !sendTextFrame(frame_text) )
|
if ( !sendTextFrame(frame_text) )
|
||||||
zm_terminate = true;
|
zm_terminate = true;
|
||||||
send_frame = false; // In case keepalive was set
|
send_frame = false; // In case keepalive was set
|
||||||
} else {
|
|
||||||
Debug(1, "Not Sending time to next event frame because actual delta time is %f", actual_delta_time);
|
|
||||||
}
|
}
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// FIXME ICON But we are not paused. We are somehow still in the event?
|
// FIXME ICON But we are not paused. We are somehow still in the event?
|
||||||
double sleep_time = (replay_rate>0?1:-1) * ((1.0L * replay_rate * STREAM_PAUSE_WAIT)/(ZM_RATE_BASE * 1000000));
|
double sleep_time = (replay_rate>0?1:-1) * ((1.0L * replay_rate * STREAM_PAUSE_WAIT)/(ZM_RATE_BASE * 1000000));
|
||||||
//double sleep_time = (replay_rate * STREAM_PAUSE_WAIT)/(ZM_RATE_BASE * 1000000);
|
//double sleep_time = (replay_rate * STREAM_PAUSE_WAIT)/(ZM_RATE_BASE * 1000000);
|
||||||
|
@ -1095,11 +1104,11 @@ bool EventStream::send_file(const char * filepath) {
|
||||||
} // end bool EventStream::send_file(const char * filepath)
|
} // end bool EventStream::send_file(const char * filepath)
|
||||||
|
|
||||||
bool EventStream::send_buffer(uint8_t* buffer, int size) {
|
bool EventStream::send_buffer(uint8_t* buffer, int size) {
|
||||||
if ( 0 > fprintf(stdout, "Content-Length: %d\r\n\r\n", img_buffer_size) ) {
|
if ( 0 > fprintf(stdout, "Content-Length: %d\r\n\r\n", size) ) {
|
||||||
Info("Unable to send raw frame %u: %s", curr_frame_id, strerror(errno));
|
Info("Unable to send raw frame %u: %s", curr_frame_id, strerror(errno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
rc = fwrite(img_buffer, img_buffer_size, 1, stdout);
|
int rc = fwrite(buffer, size, 1, stdout);
|
||||||
|
|
||||||
if ( 1 != rc ) {
|
if ( 1 != rc ) {
|
||||||
Error("Unable to send raw frame %u: %s %d", curr_frame_id, strerror(errno), rc);
|
Error("Unable to send raw frame %u: %s %d", curr_frame_id, strerror(errno), rc);
|
||||||
|
|
|
@ -76,7 +76,7 @@ class EventStream : public StreamBase {
|
||||||
StreamMode mode;
|
StreamMode mode;
|
||||||
bool forceEventChange;
|
bool forceEventChange;
|
||||||
|
|
||||||
int curr_frame_id;
|
unsigned long curr_frame_id;
|
||||||
double curr_stream_time;
|
double curr_stream_time;
|
||||||
bool send_frame;
|
bool send_frame;
|
||||||
struct timeval start; // clock time when started the event
|
struct timeval start; // clock time when started the event
|
||||||
|
|
Loading…
Reference in New Issue