@ -89,7 +89,7 @@ void Replay::interruptStream(const std::function<bool()> &update_fn) { 
			
		
	
		
			
				
					    interrupt_requested_  =  true ;   
			
		
	
		
			
				
					    std : : unique_lock  lock ( stream_lock_ ) ;   
			
		
	
		
			
				
					    events_ready_  =  update_fn ( ) ;   
			
		
	
		
			
				
					    interrupt_requested_  =  user_paused_ ;   
			
		
	
		
			
				
					    interrupt_requested_  =  user_paused_  & &  ! pause_after_next_frame_  ;   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					  stream_cv_ . notify_one ( ) ;   
			
		
	
		
			
				
					}  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -116,6 +116,9 @@ void Replay::seekTo(double seconds, bool relative) { 
			
		
	
		
			
				
					      seeked_to_sec  =  * seeking_to_ ;   
			
		
	
		
			
				
					      seeking_to_ . reset ( ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // if paused, resume for exactly one frame to update
   
			
		
	
		
			
				
					    pause_after_next_frame_  =  user_paused_ ;   
			
		
	
		
			
				
					    return  false ;   
			
		
	
		
			
				
					  } ) ;   
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -144,6 +147,7 @@ void Replay::pause(bool pause) { 
			
		
	
		
			
				
					    interruptStream ( [ = ] ( )  {   
			
		
	
		
			
				
					      rWarning ( " %s at %.2f s " ,  pause  ?  " paused... "  :  " resuming " ,  currentSeconds ( ) ) ;   
			
		
	
		
			
				
					      user_paused_  =  pause ;   
			
		
	
		
			
				
					      pause_after_next_frame_  =  false ;   
			
		
	
		
			
				
					      return  ! pause ;   
			
		
	
		
			
				
					    } ) ;   
			
		
	
		
			
				
					  }   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -305,6 +309,7 @@ std::vector<Event>::const_iterator Replay::publishEvents(std::vector<Event>::con 
			
		
	
		
			
				
					  uint64_t  evt_start_ts  =  cur_mono_time_ ;   
			
		
	
		
			
				
					  uint64_t  loop_start_ts  =  nanos_since_boot ( ) ;   
			
		
	
		
			
				
					  double  prev_replay_speed  =  speed_ ;   
			
		
	
		
			
				
					  uint64_t  first_mono_time  =  first - > mono_time ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  for  ( ;  ! interrupt_requested_  & &  first  ! =  last ;  + + first )  {   
			
		
	
		
			
				
					    const  Event  & evt  =  * first ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -343,6 +348,12 @@ std::vector<Event>::const_iterator Replay::publishEvents(std::vector<Event>::con 
			
		
	
		
			
				
					      }   
			
		
	
		
			
				
					      publishFrame ( & evt ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    const  auto  T_ONE_FRAME  =  0.050 ;   
			
		
	
		
			
				
					    if  ( pause_after_next_frame_  & &  abs ( toSeconds ( evt . mono_time )  -  toSeconds ( first_mono_time ) )  >  T_ONE_FRAME )  {   
			
		
	
		
			
				
					      pause_after_next_frame_  =  false ;   
			
		
	
		
			
				
					      interrupt_requested_  =  true ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  return  first ;