# include  "tools/cabana/streams/replaystream.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "tools/cabana/dbcmanager.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								ReplayStream : : ReplayStream ( QObject  * parent )  :  AbstractStream ( parent ,  false )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QObject : : connect ( & settings ,  & Settings : : changed ,  [ this ] ( )  { 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( replay )  replay - > setSegmentCacheLimit ( settings . max_cached_minutes ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								ReplayStream : : ~ ReplayStream ( )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( replay )  replay - > stop ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  bool  event_filter ( const  Event  * e ,  void  * opaque )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  ( ( ReplayStream  * ) opaque ) - > eventFilter ( e ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bool  ReplayStream : : loadRoute ( const  QString  & route ,  const  QString  & data_dir ,  uint32_t  replay_flags )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  replay  =  new  Replay ( route ,  { " can " ,  " roadEncodeIdx " ,  " wideRoadEncodeIdx " ,  " carParams " } ,  { } ,  nullptr ,  replay_flags ,  data_dir ,  this ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  replay - > setSegmentCacheLimit ( settings . max_cached_minutes ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  replay - > installEventFilter ( event_filter ,  this ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QObject : : connect ( replay ,  & Replay : : seekedTo ,  this ,  & AbstractStream : : seekedTo ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QObject : : connect ( replay ,  & Replay : : segmentsMerged ,  this ,  & AbstractStream : : eventsMerged ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QObject : : connect ( replay ,  & Replay : : streamStarted ,  this ,  & AbstractStream : : streamStarted ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( replay - > load ( ) )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  auto  & segments  =  replay - > route ( ) - > segments ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( std : : none_of ( segments . begin ( ) ,  segments . end ( ) ,  [ ] ( auto  & s )  {  return  s . second . rlog . length ( )  >  0 ;  } ) )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      qWarning ( )  < <  " no rlogs in route "  < <  route ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    replay - > start ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  true ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bool  ReplayStream : : eventFilter ( const  Event  * event )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( event - > which  = =  cereal : : Event : : Which : : CAN )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    updateEvent ( event ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  true ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  ReplayStream : : seekTo ( double  ts )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  replay - > seekTo ( std : : max ( double ( 0 ) ,  ts ) ,  false ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  counters_begin_sec  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  emit  updated ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								void  ReplayStream : : pause ( bool  pause )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  replay - > pause ( pause ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  emit ( pause  ?  paused ( )  :  resume ( ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}