From f9d8ddca4c8db22b725b5d146989116323b6ffcd Mon Sep 17 00:00:00 2001 From: "Sue N. Cooper" Date: Sun, 3 Sep 2023 00:08:46 +0300 Subject: [PATCH] fix time statistics, fixes #804 --- .../src/main/cpp/fftools_ffmpeg.c | 22 +++++++++++++------ apple/src/fftools_ffmpeg.c | 22 +++++++++++++------ linux/src/fftools_ffmpeg.c | 22 +++++++++++++------ 3 files changed, 45 insertions(+), 21 deletions(-) diff --git a/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.c b/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.c index 19024cb..28aa83a 100644 --- a/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.c +++ b/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.c @@ -32,6 +32,10 @@ * * ffmpeg-kit changes by ARTHENICA LTD * + * 09.2023 + * -------------------------------------------------------- + * - forward_report method signature accepts pts to calculate the time + * * 07.2023 * -------------------------------------------------------- * - FFmpeg 6.0 changes migrated @@ -1725,11 +1729,19 @@ static void print_final_stats(int64_t total_size) } } -static void forward_report(uint64_t frame_number, float fps, float quality, int64_t total_size, int seconds, int microseconds, double bitrate, double speed) +static void forward_report(uint64_t frame_number, float fps, float quality, int64_t total_size, int64_t pts, double bitrate, double speed) { // FORWARD DATA if (report_callback != NULL) { - report_callback(frame_number, fps, quality, total_size, ((double)seconds*1000) + ((double)microseconds)/1000, bitrate, speed); + double milliseconds = 0; + if (pts != AV_NOPTS_VALUE) { + milliseconds = ((double)FFABS64U(pts)) / 1000; + } + if (pts < 0) { + report_callback(frame_number, fps, quality, total_size, 0 - milliseconds, bitrate, speed); + } else { + report_callback(frame_number, fps, quality, total_size, milliseconds, bitrate, speed); + } } } @@ -1864,11 +1876,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti speed = pts != AV_NOPTS_VALUE && t != 0.0 ? (double)pts / AV_TIME_BASE / t : -1; // FFmpegKit forward report - if (pts == AV_NOPTS_VALUE) { - forward_report(frame_number, fps, q, total_size, 0, 0, bitrate, speed); - } else { - forward_report(frame_number, fps, q, total_size, secs, us, bitrate, speed); - } + forward_report(frame_number, fps, q, total_size, pts, bitrate, speed); if (local_print_stats) { if (total_size < 0) av_bprintf(&buf, "size=N/A time="); diff --git a/apple/src/fftools_ffmpeg.c b/apple/src/fftools_ffmpeg.c index 19024cb..28aa83a 100644 --- a/apple/src/fftools_ffmpeg.c +++ b/apple/src/fftools_ffmpeg.c @@ -32,6 +32,10 @@ * * ffmpeg-kit changes by ARTHENICA LTD * + * 09.2023 + * -------------------------------------------------------- + * - forward_report method signature accepts pts to calculate the time + * * 07.2023 * -------------------------------------------------------- * - FFmpeg 6.0 changes migrated @@ -1725,11 +1729,19 @@ static void print_final_stats(int64_t total_size) } } -static void forward_report(uint64_t frame_number, float fps, float quality, int64_t total_size, int seconds, int microseconds, double bitrate, double speed) +static void forward_report(uint64_t frame_number, float fps, float quality, int64_t total_size, int64_t pts, double bitrate, double speed) { // FORWARD DATA if (report_callback != NULL) { - report_callback(frame_number, fps, quality, total_size, ((double)seconds*1000) + ((double)microseconds)/1000, bitrate, speed); + double milliseconds = 0; + if (pts != AV_NOPTS_VALUE) { + milliseconds = ((double)FFABS64U(pts)) / 1000; + } + if (pts < 0) { + report_callback(frame_number, fps, quality, total_size, 0 - milliseconds, bitrate, speed); + } else { + report_callback(frame_number, fps, quality, total_size, milliseconds, bitrate, speed); + } } } @@ -1864,11 +1876,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti speed = pts != AV_NOPTS_VALUE && t != 0.0 ? (double)pts / AV_TIME_BASE / t : -1; // FFmpegKit forward report - if (pts == AV_NOPTS_VALUE) { - forward_report(frame_number, fps, q, total_size, 0, 0, bitrate, speed); - } else { - forward_report(frame_number, fps, q, total_size, secs, us, bitrate, speed); - } + forward_report(frame_number, fps, q, total_size, pts, bitrate, speed); if (local_print_stats) { if (total_size < 0) av_bprintf(&buf, "size=N/A time="); diff --git a/linux/src/fftools_ffmpeg.c b/linux/src/fftools_ffmpeg.c index 19024cb..28aa83a 100644 --- a/linux/src/fftools_ffmpeg.c +++ b/linux/src/fftools_ffmpeg.c @@ -32,6 +32,10 @@ * * ffmpeg-kit changes by ARTHENICA LTD * + * 09.2023 + * -------------------------------------------------------- + * - forward_report method signature accepts pts to calculate the time + * * 07.2023 * -------------------------------------------------------- * - FFmpeg 6.0 changes migrated @@ -1725,11 +1729,19 @@ static void print_final_stats(int64_t total_size) } } -static void forward_report(uint64_t frame_number, float fps, float quality, int64_t total_size, int seconds, int microseconds, double bitrate, double speed) +static void forward_report(uint64_t frame_number, float fps, float quality, int64_t total_size, int64_t pts, double bitrate, double speed) { // FORWARD DATA if (report_callback != NULL) { - report_callback(frame_number, fps, quality, total_size, ((double)seconds*1000) + ((double)microseconds)/1000, bitrate, speed); + double milliseconds = 0; + if (pts != AV_NOPTS_VALUE) { + milliseconds = ((double)FFABS64U(pts)) / 1000; + } + if (pts < 0) { + report_callback(frame_number, fps, quality, total_size, 0 - milliseconds, bitrate, speed); + } else { + report_callback(frame_number, fps, quality, total_size, milliseconds, bitrate, speed); + } } } @@ -1864,11 +1876,7 @@ static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti speed = pts != AV_NOPTS_VALUE && t != 0.0 ? (double)pts / AV_TIME_BASE / t : -1; // FFmpegKit forward report - if (pts == AV_NOPTS_VALUE) { - forward_report(frame_number, fps, q, total_size, 0, 0, bitrate, speed); - } else { - forward_report(frame_number, fps, q, total_size, secs, us, bitrate, speed); - } + forward_report(frame_number, fps, q, total_size, pts, bitrate, speed); if (local_print_stats) { if (total_size < 0) av_bprintf(&buf, "size=N/A time=");