- vlc_mutex_lock( &p_input->counters.counters_lock );
- CL_CO( read_bytes );
- CL_CO( read_packets );
- CL_CO( demux_read );
- CL_CO( input_bitrate );
- CL_CO( demux_bitrate );
- CL_CO( played_abuffers );
- CL_CO( lost_abuffers );
- CL_CO( displayed_pictures );
- CL_CO( lost_pictures );
- CL_CO( decoded_audio) ;
- CL_CO( decoded_video );
- CL_CO( decoded_sub) ;
- vlc_mutex_unlock( &p_input->counters.counters_lock );
+#define CL_CO( c ) stats_CounterClean( p_input->p->counters.p_##c ); p_input->p->counters.p_##c = NULL;
+ if( p_input->p_libvlc->b_stats )
+ {
+ /* make sure we are up to date */
+ stats_ComputeInputStats( p_input, p_input->p->input.p_item->p_stats );
+ if( p_input->p_libvlc->p_playlist->p_stats_computer == p_input )
+ {
+ stats_ComputeGlobalStats( p_input->p_libvlc->p_playlist,
+ p_input->p_libvlc->p_playlist->p_stats );
+ p_input->p_libvlc->p_playlist->p_stats_computer = NULL;
+ }
+ CL_CO( read_bytes );
+ CL_CO( read_packets );
+ CL_CO( demux_read );
+ CL_CO( input_bitrate );
+ CL_CO( demux_bitrate );
+ CL_CO( played_abuffers );
+ CL_CO( lost_abuffers );
+ CL_CO( displayed_pictures );
+ CL_CO( lost_pictures );
+ CL_CO( decoded_audio) ;
+ CL_CO( decoded_video );
+ CL_CO( decoded_sub) ;
+ }
+
+ /* Close optional stream output instance */
+ if( p_input->p->p_sout )
+ {
+ CL_CO( sout_sent_packets );
+ CL_CO( sout_sent_bytes );
+ CL_CO( sout_send_bitrate );
+
+ vlc_object_detach( p_input->p->p_sout );
+ }
+#undef CL_CO