]> git.sesse.net Git - vlc/commitdiff
stats: Add stream quality counters to Qt4 stastics by counting corrupted blocks and...
authorJean-Paul Saman <jean-paul.saman@m2x.nl>
Mon, 9 Mar 2009 12:46:09 +0000 (13:46 +0100)
committerJean-Paul Saman <jean-paul.saman@m2x.nl>
Mon, 9 Mar 2009 12:49:15 +0000 (13:49 +0100)
Note the quality counters are mere indications and not exact reporting of how much blocks/discontinuity really occured. It will only tell you how often it is noticed.

include/vlc_input_item.h
include/vlc_messages.h
modules/gui/qt4/components/info_panels.cpp
modules/gui/qt4/components/info_panels.hpp
src/input/es_out.c
src/input/input.c
src/input/input_internal.h
src/misc/stats.c

index 1abdc3b344ce6a6599b81b7826cbd7912dd61d54..4ef4e7c256a002c7350dfa8347d7550537542598 100644 (file)
@@ -228,6 +228,8 @@ struct input_stats_t
     int i_demux_read_bytes;
     float f_demux_bitrate;
     float f_average_demux_bitrate;
+    int i_demux_corrupted;
+    int i_demux_discontinuity;
 
     /* Decoders */
     int i_decoded_audio;
index 19cf3c927a391527f0fbdbc361d9373815d76ce2..a9f03d712a593c285574651b5419275172e8547a 100644 (file)
@@ -171,6 +171,8 @@ enum
     STATS_READ_PACKETS,
     STATS_DEMUX_READ,
     STATS_DEMUX_BITRATE,
+    STATS_DEMUX_CORRUPTED,
+    STATS_DEMUX_DISCONTINUITY,
     STATS_PLAYED_ABUFFERS,
     STATS_LOST_ABUFFERS,
     STATS_DECODED_AUDIO,
index 755b197b82a1cc2ec135bb9cc38bc66111f60ce6..4b82ed4e2e83916cc9222bbd2c5273000bb6ec27 100644 (file)
@@ -526,6 +526,10 @@ InputStatsPanel::InputStatsPanel( QWidget *parent,
     CREATE_AND_ADD_TO_CAT( demuxed_stat, qtr("Demuxed"), "0", input, "kB") ;
     CREATE_AND_ADD_TO_CAT( stream_bitrate_stat, qtr("Stream bitrate"),
                            "0", input, "kb/s" );
+    CREATE_AND_ADD_TO_CAT( corrupted_stat, qtr("Corrupted"),
+                           "0", input, "" );
+    CREATE_AND_ADD_TO_CAT( discontinuity_stat, qtr("Discontinuities"),
+                           "0", input, "" );
 
     CREATE_AND_ADD_TO_CAT( vdecoded_stat, qtr("Decoded blocks"),
                            "0", video, "" );
@@ -576,6 +580,8 @@ void InputStatsPanel::update( input_item_t *p_item )
                     (float)(p_item->p_stats->i_demux_read_bytes)/1000 );
     UPDATE( stream_bitrate_stat, "%6.0f",
                     (float)(p_item->p_stats->f_demux_bitrate * 8000 ));
+    UPDATE( corrupted_stat, "%5i", p_item->p_stats->i_demux_corrupted );
+    UPDATE( discontinuity_stat, "%5i", p_item->p_stats->i_demux_discontinuity );
 
     /* Video */
     UPDATE( vdecoded_stat, "%5i", p_item->p_stats->i_decoded_video );
index d1e50841e9a620849165400fb93be69751c84ed8..5f3be525ee062c4ab622abfd72163377b71ed3cf 100644 (file)
@@ -120,6 +120,8 @@ private:
     QTreeWidgetItem *input_bitrate_stat;
     QTreeWidgetItem *demuxed_stat;
     QTreeWidgetItem *stream_bitrate_stat;
+    QTreeWidgetItem *corrupted_stat;
+    QTreeWidgetItem *discontinuity_stat;
 
     QTreeWidgetItem *video;
     QTreeWidgetItem *vdecoded_stat;
index 1481ad18d3a866bb6ebd0a381ff1746822c47222..99544431c83ad638b2d11aa5aba7637aeee76080 100644 (file)
@@ -1863,6 +1863,19 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block )
                              p_block->i_buffer, &i_total );
         stats_UpdateFloat( p_input , p_input->p->counters.p_demux_bitrate,
                            (float)i_total, NULL );
+
+        /* Update number of corrupted data packats */
+        if( p_block->i_flags & BLOCK_FLAG_CORRUPTED )
+        {
+            stats_UpdateInteger( p_input, p_input->p->counters.p_demux_corrupted,
+                                 1, NULL );
+        }
+        /* Update number of discontinuities */
+        if( p_block->i_flags & BLOCK_FLAG_DISCONTINUITY )
+        {
+            stats_UpdateInteger( p_input, p_input->p->counters.p_demux_discontinuity,
+                                 1, NULL );
+        }
         vlc_mutex_unlock( &p_input->p->counters.counters_lock );
     }
 
index 073557323c5b221c00fb1ac160542ba9f1627548..bdf91af2bceadf26fbf01a36793504aaa64167a1 100644 (file)
@@ -801,6 +801,8 @@ static void InitStatistics( input_thread_t * p_input )
         INIT_COUNTER( demux_read, INTEGER, COUNTER );
         INIT_COUNTER( input_bitrate, FLOAT, DERIVATIVE );
         INIT_COUNTER( demux_bitrate, FLOAT, DERIVATIVE );
+        INIT_COUNTER( demux_corrupted, INTEGER, COUNTER );
+        INIT_COUNTER( demux_discontinuity, INTEGER, COUNTER );
         INIT_COUNTER( played_abuffers, INTEGER, COUNTER );
         INIT_COUNTER( lost_abuffers, INTEGER, COUNTER );
         INIT_COUNTER( displayed_pictures, INTEGER, COUNTER );
index e30e777fe25aa7fb1c6d982a748e6d3915e8e297..ee3dbd2d88db63a6d641506ae9d5d11aac737c24 100644 (file)
@@ -139,6 +139,8 @@ struct input_thread_private_t
         counter_t *p_input_bitrate;
         counter_t *p_demux_read;
         counter_t *p_demux_bitrate;
+        counter_t *p_demux_corrupted;
+        counter_t *p_demux_discontinuity;
         counter_t *p_decoded_audio;
         counter_t *p_decoded_video;
         counter_t *p_decoded_sub;
index da4e10ddbdbd7730fa61b848bc0e316925315362..048b61ba45ac171a220abb1284162c6a82e3eddf 100644 (file)
@@ -171,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,
@@ -212,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 =