+ if( p_demux->info.i_update || mdate() >= next_update )
+ {
+ double newpos;
+ int64_t newlen, newtime;
+
+ if( demux_Control( p_demux, DEMUX_GET_POSITION, &newpos ) )
+ newpos = 0.;
+ if( demux_Control( p_demux, DEMUX_GET_LENGTH, &newlen ) )
+ newlen = 0;
+ if( demux_Control( p_demux, DEMUX_GET_TIME, &newtime ) )
+ newtime = 0;
+
+ vlc_mutex_lock( &p_sys->lock );
+ p_sys->stats.position = newpos;
+ p_sys->stats.length = newlen;
+ p_sys->stats.time = newtime;
+ vlc_mutex_unlock( &p_sys->lock );
+
+ p_demux->info.i_update = 0;
+ next_update = mdate() + (CLOCK_FREQ / 4);
+ }
+
+ if( demux_Demux( p_demux ) <= 0 )
+ break;