From 0c4ed9a95c702db3040f2015a170ece564b469ee Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Fri, 14 May 2010 10:45:29 +0200 Subject: [PATCH] Measure FPS just after reading input frame (not after de/encoding) Also make calculation more precise. --- streamer.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/streamer.c b/streamer.c index 06da889..ab74cb9 100644 --- a/streamer.c +++ b/streamer.c @@ -162,10 +162,18 @@ void* streamer_run(void* args) static unsigned max_size = 0, min_size = -1; static double avg_size = 0; clock_gettime(CLOCK_MONOTONIC, &start); + start.tv_sec--; /* Avoid division by zero */ done = 0; while (!(done = streamer_run_done_rq)) { AVPacket *pkt; pkt = read_input_packet(s); + + clock_gettime(CLOCK_MONOTONIC, &end); + timespec_subtract(&d, &end, &start); + start = end; + int fps_now = (1000<<16)/(d.tv_sec*1000+d.tv_nsec/1000000); + fps_avg += (fps_now - fps_avg) >> 4; + if (pkt == NULL) { done = 1; } else { @@ -180,20 +188,14 @@ void* streamer_run(void* args) if (opkt) { pkt_send(os, opkt); - clock_gettime(CLOCK_MONOTONIC, &end); - timespec_subtract(&d, &end, &start); - int fps_now = (1000<<8)/(d.tv_sec*1000+d.tv_nsec/1000000); - start = end; - fps_avg += (fps_now - fps_avg) >> 3; - if (opkt->size > max_size) max_size = opkt->size; if (opkt->size < min_size) min_size = opkt->size; avg_size = avg_size*frame/(frame+1) + (double)opkt->size/(frame+1); - printf("%5d: %2d fps opkt size: %5d b max=%5u b min=%5u b avg=%5.0f\n", + printf("%5d: %2d (%4.1f) fps opkt size: %5d b max=%5u b min=%5u b avg=%5.0f\n", frame, - fps_avg>>8, + fps_avg>>16, 1000.0/(d.tv_sec*1000+d.tv_nsec/1000000), opkt->size, max_size, min_size, avg_size); if (frame % 100 == 0) max_size=0; frame++;// = (frame + 1) % fps; -- 2.39.2