]> rtime.felk.cvut.cz Git - frescor/streamer.git/commitdiff
Measure FPS just after reading input frame (not after de/encoding)
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 14 May 2010 08:45:29 +0000 (10:45 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 14 May 2010 08:45:29 +0000 (10:45 +0200)
Also make calculation more precise.

streamer.c

index 06da889112d95a696a3d96253e9069025dcdd1c1..ab74cb9ba31aea73f08ea1b760a4155ff2b11ad0 100644 (file)
@@ -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;