From af37eeeeed77d7a4ab494a995f51aa997d07e512 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Fri, 8 Dec 2017 15:17:45 -0500 Subject: [PATCH] fix int64 = int*int multiply --- src/zm_analysis_thread.cpp | 1 + src/zm_monitor.cpp | 2 ++ src/zm_videostore.cpp | 42 ++++++++++++++++---------------------- src/zm_videostore.h | 7 ++----- 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/zm_analysis_thread.cpp b/src/zm_analysis_thread.cpp index 1fe0cc4d1..400bc8612 100644 --- a/src/zm_analysis_thread.cpp +++ b/src/zm_analysis_thread.cpp @@ -24,6 +24,7 @@ int AnalysisThread::run() { Debug(2, "THREAD: Getting ref image"); monitor->get_ref_image(); + Debug(2, "THREAD: after Getting ref image"); while( !terminate ) { // Process the next image diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index f94f8a94e..1576eedeb 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -3260,5 +3260,7 @@ void Monitor::get_ref_image() { Warning( "Waiting for capture daemon" ); usleep( 100000 ); } + image_buffer[shared_data->last_write_index].mutex.lock(); ref_image.Assign( width, height, camera->Colours(), camera->SubpixelOrder(), image_buffer[shared_data->last_write_index].image->Buffer(), camera->ImageSize()); + image_buffer[shared_data->last_write_index].mutex.unlock(); } diff --git a/src/zm_videostore.cpp b/src/zm_videostore.cpp index d2d59b8d7..b6c7fdb09 100644 --- a/src/zm_videostore.cpp +++ b/src/zm_videostore.cpp @@ -60,12 +60,7 @@ monitor = p_monitor; #endif FFMPEGInit(); - video_last_pts = 0; - video_last_dts = 0; - audio_last_pts = 0; - audio_last_dts = 0; - video_next_pts = 0; - video_next_dts = 0; + video_start_pts = 0; audio_next_pts = 0; audio_next_dts = 0; @@ -272,10 +267,10 @@ Debug(2,"Using mjpeg"); /* video time_base can be set to whatever is handy and supported by encoder */ video_out_ctx->time_base = (AVRational){1, 1000000}; // microseconds as base frame rate video_out_ctx->gop_size = 12; - video_out_ctx->qmin = 2; - video_out_ctx->qmax = 31; + video_out_ctx->qmin = 10; + video_out_ctx->qmax = 51; video_out_ctx->qcompress = 0.6; - video_out_ctx->bit_rate = 400000; + video_out_ctx->bit_rate = 4000000; video_out_ctx->max_b_frames = 1; if ( video_out_ctx->codec_id == AV_CODEC_ID_H264 ) { if ( video_out_ctx->priv_data ) { @@ -1037,21 +1032,20 @@ int VideoStore::writeVideoFramePacket( ZMPacket * zm_packet ) { zm_packet->out_frame->sample_aspect_ratio = (AVRational){ 0, 1 }; zm_packet->out_frame->pkt_duration = 0; - if ( ! video_last_pts ) { - int64_t temp = zm_packet->timestamp->tv_sec*1000000; - int64_t temp2 = zm_packet->timestamp->tv_usec; - video_last_pts = zm_packet->timestamp->tv_sec*1000000 + zm_packet->timestamp->tv_usec; - Debug(2, "No video_lsat_pts, set to (%" PRId64 ") secs(%d=>%" PRId64 ") usecs(%d=>%" PRId64 ")", - video_last_pts, zm_packet->timestamp->tv_sec, temp, zm_packet->timestamp->tv_usec, temp2 ); + if ( ! video_start_pts ) { + uint64_t temp = zm_packet->timestamp->tv_sec*(uint64_t)1000000; + video_start_pts = temp + zm_packet->timestamp->tv_usec; + Debug(2, "No video_lsat_pts, set to (%" PRId64 ") secs(%d=>%" PRId64 ") usecs(%d)", + video_start_pts, zm_packet->timestamp->tv_sec, temp, zm_packet->timestamp->tv_usec ); Debug(2, "No video_lsat_pts, set to (%" PRId64 ") secs(%d) usecs(%d)", - video_last_pts, zm_packet->timestamp->tv_sec, zm_packet->timestamp->tv_usec ); + video_start_pts, zm_packet->timestamp->tv_sec, zm_packet->timestamp->tv_usec ); zm_packet->out_frame->pts = 0; } else { - //uint64_t seconds = zm_packet->timestamp->tv_sec*1000000; - zm_packet->out_frame->pts = ( zm_packet->timestamp->tv_sec*1000000 + zm_packet->timestamp->tv_usec ) - video_last_pts; - zm_packet->out_frame->pkt_duration = zm_packet->out_frame->pts - video_last_pts; - Debug(2, " Setting pts for frame(%d), set to (%" PRId64 ") from (%" PRId64 " - secs(%d) usecs(%d)", - frame_count, zm_packet->out_frame->pts, video_last_pts, zm_packet->timestamp->tv_sec, zm_packet->timestamp->tv_usec ); + uint64_t seconds = zm_packet->timestamp->tv_sec*(uint64_t)1000000; + zm_packet->out_frame->pts = ( seconds + zm_packet->timestamp->tv_usec ) - video_start_pts; + //zm_packet->out_frame->pkt_duration = zm_packet->out_frame->pts - video_start_pts; + Debug(2, " Setting pts for frame(%d), set to (%" PRId64 ") from (start %" PRIu64 " - %" PRIu64 " - secs(%d) usecs(%d)", + frame_count, zm_packet->out_frame->pts, video_start_pts, seconds, zm_packet->timestamp->tv_sec, zm_packet->timestamp->tv_usec ); } if ( zm_packet->keyframe ) { //Debug(2, "Setting keyframe was (%d)", zm_packet->out_frame->key_frame ); @@ -1111,11 +1105,11 @@ int VideoStore::writeVideoFramePacket( ZMPacket * zm_packet ) { opkt.data = ipkt->data; opkt.size = ipkt->size; opkt.flags = ipkt->flags; - if ( ! video_last_pts ) { - video_last_pts = zm_packet->timestamp->tv_sec*1000000 + zm_packet->timestamp->tv_usec; + if ( ! video_start_pts ) { + video_start_pts = zm_packet->timestamp->tv_sec*(uint64_t)1000000 + zm_packet->timestamp->tv_usec; opkt.dts = opkt.pts = 0; } else { - opkt.dts = opkt.pts = ( zm_packet->timestamp->tv_sec*1000000 + zm_packet->timestamp->tv_usec ) - video_last_pts; + opkt.dts = opkt.pts = ( zm_packet->timestamp->tv_sec*(uint64_t)1000000 + zm_packet->timestamp->tv_usec ) - video_start_pts; } } diff --git a/src/zm_videostore.h b/src/zm_videostore.h index 55a99e0ee..8c8178e14 100644 --- a/src/zm_videostore.h +++ b/src/zm_videostore.h @@ -61,15 +61,12 @@ AVAudioResampleContext* resample_ctx; const char *format; // These are for in - int64_t video_last_pts; - int64_t video_last_dts; - int64_t video_last_duration; + uint64_t video_start_pts; + int64_t audio_last_pts; int64_t audio_last_dts; // These are for out, should start at zero. We assume they do not wrap because we just aren't going to save files that big. - int64_t video_next_pts; - int64_t video_next_dts; ; int64_t audio_next_pts; int64_t audio_next_dts;