From fb73f9dda7a2a7afa475f743713983ea7af0b2e8 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Mon, 11 May 2020 13:18:04 +0200 Subject: [PATCH] compensate pause in fps calculation --- fftools/ffmpeg.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 392f0f1511..59527cfb98 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1664,7 +1664,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti double bitrate; double speed; int64_t pts = INT64_MIN + 1; - static int64_t last_time = -1; + static int64_t last_time = -1; //last time this rutine was called static int qp_histogram[52]; int hours, mins, secs, us; const char *hours_sign; @@ -1679,13 +1679,12 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti last_time = cur_time; return; } - if ((cur_time - last_time) < 500000) + if ((cur_time - last_time) < 500000) //only report every .5s return; last_time = cur_time; } - t = (cur_time-timer_start) / 1000000.0; - + t = (cur_time - timer_start) / 1000000.0; //time in seconds, the transcode process is running oc = output_files[0]->ctx; @@ -1712,7 +1711,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti float fps; frame_number = ost->frame_number; - fps = t > 1 ? frame_number / t : 0; + fps = t > 0 ? frame_number / t : 0; av_bprintf(&buf, "frame=%5d fps=%3.*f q=%3.1f ", frame_number, fps < 9.95, fps, q); av_bprintf(&buf_script, "frame=%d\n", frame_number); @@ -1830,7 +1829,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti //get fps float fps; - fps = t > 1 ? frame_number / t : -1; + fps = t > 0 ? frame_number / t : -1; if (fps > 0 && max_frames_hint > 0) { //get remaining frames int64_t remaining_frames = max_frames_hint - frame_number; @@ -1844,8 +1843,8 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti struct tm * timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); - time_t time = mktime(timeinfo); - time_t timef = time + secs; + time_t time = mktime(timeinfo); //current time + time_t timef = time + secs; //time finished timeinfo = localtime(&timef); secs %= 60; @@ -1855,7 +1854,9 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti else strftime(timebuf, 20, "%T", timeinfo); //time only + av_bprintf(&buf, "Remaining=%"PRId64" ETA=%02d:%02d:%02d finish=%s", remaining_frames, hours, mins, secs, timebuf); + } if (print_stats || is_last_report) { @@ -4716,7 +4717,7 @@ static int transcode(void) #endif while (!received_sigterm) { - int64_t cur_time= av_gettime_relative(); + int64_t cur_time = av_gettime_relative(); /* if 'q' pressed, exits */ if (stdin_interaction) { @@ -4724,12 +4725,17 @@ static int transcode(void) if (kbinteractionresult < 0) break; if(kbinteractionresult == 1) { //pause - fprintf(stderr, "Paused\r"); + fprintf(stderr, "\033[101mPaused\033[0m\r"); + //wait for key getchar(); + int64_t new_cur_time = av_gettime_relative(); + int64_t paused = new_cur_time - cur_time; + cur_time = new_cur_time; + timer_start += paused; // shift the transcode start by the time, that was paused -> fix calculation of remaining and fps - fprintf(stderr, "Unpaused\r"); + fprintf(stderr, "Unpaused Paused For: %lis \n", (paused / 1000000)); } }