]> git.sesse.net Git - vlc/blobdiff - src/input/es_out.c
Partial rewrite of stats to avoid lookups (Closes:#693)
[vlc] / src / input / es_out.c
index a919a309157ae2a0527a237ca452dadcb5162ba6..a76883f11ab6b3332218612802945b251a4da468 100644 (file)
@@ -179,7 +179,7 @@ es_out_t *input_EsOutNew( input_thread_t *p_input )
     if( p_sys->ppsz_audio_language )
     {
         for( i = 0; p_sys->ppsz_audio_language[i]; i++ )
-            msg_Dbg( p_input, "select audio in language[%d] %s",
+            msg_Dbg( p_input, "selected audio language[%d] %s",
                      i, p_sys->ppsz_audio_language[i] );
     }
     if( val.psz_string ) free( val.psz_string );
@@ -189,7 +189,7 @@ es_out_t *input_EsOutNew( input_thread_t *p_input )
     if( p_sys->ppsz_sub_language )
     {
         for( i = 0; p_sys->ppsz_sub_language[i]; i++ )
-            msg_Dbg( p_input, "select subtitle in language[%d] %s",
+            msg_Dbg( p_input, "selected subtitle language[%d] %s",
                      i, p_sys->ppsz_sub_language[i] );
     }
     if( val.psz_string ) free( val.psz_string );
@@ -287,7 +287,7 @@ void input_EsOutDiscontinuity( es_out_t *out, vlc_bool_t b_audio )
     {
         es_out_id_t *es = p_sys->es[i];
         es->b_discontinuity = VLC_TRUE; /* signal discontinuity */
-        
+
         /* Send a dummy block to let decoder know that
          * there is a discontinuity */
         if( es->p_dec && ( !b_audio || es->fmt.i_cat == AUDIO_ES ) )
@@ -368,8 +368,10 @@ static void EsOutESVarUpdate( es_out_t *out, es_out_id_t *es,
     {
         if( es->psz_language && *es->psz_language )
         {
-            text.psz_string = malloc( strlen( es->fmt.psz_description) + strlen( es->psz_language ) + 10 );
-            sprintf( text.psz_string, "%s - [%s]", es->fmt.psz_description, es->psz_language );
+            text.psz_string = malloc( strlen( es->fmt.psz_description) +
+                                      strlen( es->psz_language ) + 10 );
+            sprintf( text.psz_string, "%s - [%s]", es->fmt.psz_description,
+                                                   es->psz_language );
         }
         else text.psz_string = strdup( es->fmt.psz_description );
     }
@@ -378,7 +380,8 @@ static void EsOutESVarUpdate( es_out_t *out, es_out_id_t *es,
         if( es->psz_language && *es->psz_language )
         {
             char *temp;
-            text.psz_string = malloc( strlen( _("Track %i") )+ strlen( es->psz_language ) + 30 );
+            text.psz_string = malloc( strlen( _("Track %i") )+
+                                      strlen( es->psz_language ) + 30 );
             asprintf( &temp,  _("Track %i"), val.i_int );
             sprintf( text.psz_string, "%s - [%s]", temp, es->psz_language );
             free( temp );
@@ -462,8 +465,8 @@ static void EsOutProgramSelect( es_out_t *out, es_out_pgrm_t *p_pgrm )
         char *psz_cat = malloc( strlen(_("Program")) + 10 );
 
         sprintf( psz_cat, "%s %d", _("Program"), p_pgrm->i_id );
-        input_Control( p_input, INPUT_ADD_INFO, _("Meta-information"),
-                       VLC_META_NOW_PLAYING, "%s", p_pgrm->psz_now_playing );
+        input_Control( p_input, INPUT_ADD_INFO, _(VLC_META_INFO_CAT),
+                       _(VLC_META_NOW_PLAYING), "%s", p_pgrm->psz_now_playing );
         free( psz_cat );
     }
 
@@ -570,19 +573,8 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, vlc_meta_t *p_meta )
     msg_Dbg( p_input, "EsOutProgramMeta: number=%d", i_group );
     sprintf( psz_cat, "%s %d", _("Program"), i_group );
 
-    for( i = 0; i < p_meta->i_meta; i++ )
-    {
-        msg_Dbg( p_input, "  - %s = %s", p_meta->name[i], p_meta->value[i] );
-
-        input_Control( p_input, INPUT_ADD_INFO, psz_cat,
-                      _(p_meta->name[i]), "%s", p_meta->value[i] );
-        if( !strcasecmp( p_meta->name[i], "Name" ) )
-            psz_name = p_meta->value[i];
-        else if( !strcasecmp( p_meta->name[i], "Provider" ) )
-            psz_provider = p_meta->value[i];
-        else if( !strcasecmp( p_meta->name[i], VLC_META_NOW_PLAYING ) )
-            psz_now_playing = p_meta->value[i];
-    }
+//    if( p_meta->psz_provider) psz_provider = p_meta->psz_provider;
+    if( p_meta->psz_nowplaying ) psz_now_playing = p_meta->psz_nowplaying;
 
     if( !psz_name && !psz_now_playing )
     {
@@ -631,8 +623,8 @@ static void EsOutProgramMeta( es_out_t *out, int i_group, vlc_meta_t *p_meta )
 
         if( p_sys->p_pgrm == p_pgrm )
         {
-            input_Control( p_input, INPUT_ADD_INFO, _("Meta-information"),
-                           VLC_META_NOW_PLAYING, "%s", psz_now_playing );
+            input_Control( p_input, INPUT_ADD_INFO, _(VLC_META_INFO_CAT),
+                           _(VLC_META_NOW_PLAYING), "%s", psz_now_playing );
         }
     }
     free( psz_cat );
@@ -780,7 +772,7 @@ static void EsSelect( es_out_t *out, es_out_id_t *es )
             msg_Dbg( p_input, "spu is disabled, not selecting ES 0x%x",
                      es->i_id );
             return;
-       }
+        }
     }
 
     es->i_preroll_end = -1;
@@ -1033,9 +1025,12 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block )
 
     if( p_input->p_libvlc->b_stats )
     {
-        stats_UpdateInteger( p_input, "demux_read", p_block->i_buffer,
-                             &i_total );
-        stats_UpdateFloat( p_input , "demux_bitrate", (float)i_total, NULL );
+        vlc_mutex_lock( &p_input->counters.counters_lock );
+        stats_UpdateInteger( p_input, p_input->counters.p_demux_read,
+                             p_block->i_buffer, &i_total );
+        stats_UpdateFloat( p_input , p_input->counters.p_demux_bitrate,
+                           (float)i_total, NULL );
+        vlc_mutex_unlock( &p_input->counters.counters_lock );
     }
 
     /* Mark preroll blocks */
@@ -1570,6 +1565,7 @@ static void EsOutAddInfo( es_out_t *out, es_out_id_t *es )
     input_thread_t *p_input = p_sys->p_input;
     es_format_t    *fmt = &es->fmt;
     char           *psz_cat;
+    lldiv_t         div;
 
     /* Add stream info */
     asprintf( &psz_cat, _("Stream %d"), out->p_sys->i_id - 1 );
@@ -1592,8 +1588,11 @@ static void EsOutAddInfo( es_out_t *out, es_out_id_t *es )
                            "%d", fmt->audio.i_channels );
 
         if( fmt->audio.i_rate > 0 )
+        {
             input_Control( p_input, INPUT_ADD_INFO, psz_cat, _("Sample rate"),
                            _("%d Hz"), fmt->audio.i_rate );
+            var_SetInteger( p_input, "sample-rate", fmt->audio.i_rate );
+        }
 
         if( fmt->audio.i_bitspersample > 0 )
             input_Control( p_input, INPUT_ADD_INFO, psz_cat,
@@ -1601,8 +1600,11 @@ static void EsOutAddInfo( es_out_t *out, es_out_id_t *es )
                            fmt->audio.i_bitspersample );
 
         if( fmt->i_bitrate > 0 )
+        {
             input_Control( p_input, INPUT_ADD_INFO, psz_cat, _("Bitrate"),
                            _("%d kb/s"), fmt->i_bitrate / 1000 );
+            var_SetInteger( p_input, "bit-rate", fmt->i_bitrate );
+        }
         break;
 
     case VIDEO_ES:
@@ -1622,11 +1624,15 @@ static void EsOutAddInfo( es_out_t *out, es_out_id_t *es )
                            fmt->video.i_visible_height);
        if( fmt->video.i_frame_rate > 0 &&
            fmt->video.i_frame_rate_base > 0 )
+       {
+           div = lldiv( (float)fmt->video.i_frame_rate /
+                               fmt->video.i_frame_rate_base * 1000000,
+                               1000000 );
            input_Control( p_input, INPUT_ADD_INFO, psz_cat,
-                          _("Frame rate"), "%f",
-                          (float)fmt->video.i_frame_rate / 
-                          fmt->video.i_frame_rate_base );
-        break;
+                          _("Frame rate"), I64Fd".%06u",
+                          div.quot, (unsigned int )div.rem );
+       }
+       break;
 
     case SPU_ES:
         input_Control( p_input, INPUT_ADD_INFO, psz_cat,