]> git.sesse.net Git - vlc/blobdiff - src/misc/stats.c
stats: Add stream quality counters to Qt4 stastics by counting corrupted blocks and...
[vlc] / src / misc / stats.c
index 1b05c11b24cbb4f8aa3c679097fbafa99fa13309..048b61ba45ac171a220abb1284162c6a82e3eddf 100644 (file)
@@ -29,7 +29,7 @@
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
 #include <stdio.h>                                               /* required */
 
 #include "input/input_internal.h"
@@ -143,12 +143,10 @@ int __stats_Get( vlc_object_t *p_this, counter_t *p_counter, vlc_value_t *val )
 input_stats_t *stats_NewInputStats( input_thread_t *p_input )
 {
     (void)p_input;
-    input_stats_t *p_stats = malloc( sizeof(input_stats_t) );
-
+    input_stats_t *p_stats = calloc( 1, sizeof(input_stats_t) );
     if( !p_stats )
         return NULL;
 
-    memset( p_stats, 0, sizeof(*p_stats) );
     vlc_mutex_init( &p_stats->lock );
     stats_ReinitInputStats( p_stats );
 
@@ -173,6 +171,10 @@ void stats_ComputeInputStats( input_thread_t *p_input, input_stats_t *p_stats )
                       &p_stats->i_demux_read_bytes );
     stats_GetFloat( p_input, p_input->p->counters.p_demux_bitrate,
                     &p_stats->f_demux_bitrate );
+    stats_GetInteger( p_input, p_input->p->counters.p_demux_corrupted,
+                      &p_stats->i_demux_corrupted );
+    stats_GetInteger( p_input, p_input->p->counters.p_demux_discontinuity,
+                      &p_stats->i_demux_discontinuity );
 
     /* Decoders */
     stats_GetInteger( p_input, p_input->p->counters.p_decoded_video,
@@ -214,6 +216,7 @@ void stats_ReinitInputStats( input_stats_t *p_stats )
     p_stats->f_input_bitrate = p_stats->f_average_input_bitrate =
     p_stats->i_demux_read_packets = p_stats->i_demux_read_bytes =
     p_stats->f_demux_bitrate = p_stats->f_average_demux_bitrate =
+    p_stats->i_demux_corrupted = p_stats->i_demux_discontinuity =
     p_stats->i_displayed_pictures = p_stats->i_lost_pictures =
     p_stats->i_played_abuffers = p_stats->i_lost_abuffers =
     p_stats->i_decoded_video = p_stats->i_decoded_audio =
@@ -240,43 +243,6 @@ void stats_DumpInputStats( input_stats_t *p_stats  )
     vlc_mutex_unlock( &p_stats->lock );
 }
 
-void __stats_ComputeGlobalStats( vlc_object_t *p_obj, global_stats_t *p_stats )
-{
-    vlc_list_t *p_list;
-    int i_index;
-
-    if( !libvlc_stats (p_obj) ) return;
-
-    vlc_mutex_lock( &p_stats->lock );
-
-    p_list = vlc_list_find( p_obj, VLC_OBJECT_INPUT, FIND_ANYWHERE );
-    if( p_list )
-    {
-        float f_total_in = 0, f_total_out = 0,f_total_demux = 0;
-        for( i_index = 0; i_index < p_list->i_count ; i_index ++ )
-        {
-            float f_in = 0, f_out = 0, f_demux = 0;
-            input_thread_t *p_input = (input_thread_t *)
-                             p_list->p_values[i_index].p_object;
-            vlc_mutex_lock( &p_input->p->counters.counters_lock );
-            stats_GetFloat( p_obj, p_input->p->counters.p_input_bitrate, &f_in );
-            if( p_input->p->counters.p_sout_send_bitrate )
-                stats_GetFloat( p_obj, p_input->p->counters.p_sout_send_bitrate,
-                                    &f_out );
-            stats_GetFloat( p_obj, p_input->p->counters.p_demux_bitrate,
-                                &f_demux );
-            vlc_mutex_unlock( &p_input->p->counters.counters_lock );
-            f_total_in += f_in; f_total_out += f_out;f_total_demux += f_demux;
-        }
-        p_stats->f_input_bitrate = f_total_in;
-        p_stats->f_output_bitrate = f_total_out;
-        p_stats->f_demux_bitrate = f_total_demux;
-        vlc_list_release( p_list );
-    }
-
-    vlc_mutex_unlock( &p_stats->lock );
-}
-
 void __stats_TimerStart( vlc_object_t *p_obj, const char *psz_name,
                          unsigned int i_id )
 {
@@ -513,11 +479,12 @@ static int CounterUpdate( vlc_object_t *p_handler,
     case STATS_DERIVATIVE:
     {
         counter_sample_t *p_new, *p_old;
-        if( mdate() - p_counter->last_update < p_counter->update_interval )
+        mtime_t now = mdate();
+        if( now - p_counter->last_update < p_counter->update_interval )
         {
             return VLC_EGENERIC;
         }
-        p_counter->last_update = mdate();
+        p_counter->last_update = now;
         if( p_counter->i_type != VLC_VAR_FLOAT &&
             p_counter->i_type != VLC_VAR_INTEGER )
         {