@ -27,7 +27,8 @@ void AbstractStream::updateMessages(QHash<MessageId, CanData> *messages) { 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  AbstractStream : : updateEvent ( const  MessageId  & id ,  double  sec ,  const  uint8_t  * data ,  uint8_t  size )  {  
			
		
	
		
			
				
					  all_msgs [ id ] . compute ( ( const  char  * ) data ,  size ,  sec ,  getSpeed ( ) ) ;   
			
		
	
		
			
				
					  QList < uint8_t >  mask  =  settings . suppress_defined_signals  ?  dbc ( ) - > mask ( id )  :  QList < uint8_t > ( ) ;   
			
		
	
		
			
				
					  all_msgs [ id ] . compute ( ( const  char  * ) data ,  size ,  sec ,  getSpeed ( ) ,  mask ) ;   
			
		
	
		
			
				
					  if  ( ! new_msgs - > contains ( id ) )  {   
			
		
	
		
			
				
					    new_msgs - > insert ( id ,  { } ) ;   
			
		
	
		
			
				
					  }   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -67,10 +68,11 @@ void AbstractStream::updateLastMsgsTo(double sec) { 
			
		
	
		
			
				
					    auto  it  =  std : : lower_bound ( ev . crbegin ( ) ,  ev . crend ( ) ,  last_ts ,  [ ] ( auto  e ,  uint64_t  ts )  {   
			
		
	
		
			
				
					      return  e - > mono_time  >  ts ;   
			
		
	
		
			
				
					    } ) ;   
			
		
	
		
			
				
					    QList < uint8_t >  mask  =  settings . suppress_defined_signals  ?  dbc ( ) - > mask ( id )  :  QList < uint8_t > ( ) ;   
			
		
	
		
			
				
					    if  ( it  ! =  ev . crend ( ) )  {   
			
		
	
		
			
				
					      double  ts  =  ( * it ) - > mono_time  /  1e9  -  routeStartTime ( ) ;   
			
		
	
		
			
				
					      auto  & m  =  all_msgs [ id ] ;   
			
		
	
		
			
				
					      m . compute ( ( const  char  * ) ( * it ) - > dat ,  ( * it ) - > size ,  ts ,  getSpeed ( ) ) ;   
			
		
	
		
			
				
					      m . compute ( ( const  char  * ) ( * it ) - > dat ,  ( * it ) - > size ,  ts ,  getSpeed ( ) ,  mask ) ;   
			
		
	
		
			
				
					      m . count  =  std : : distance ( it ,  ev . crend ( ) ) ;   
			
		
	
		
			
				
					      m . freq  =  m . count  /  std : : max ( 1.0 ,  ts ) ;   
			
		
	
		
			
				
					    }   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -153,7 +155,7 @@ static inline QColor blend(const QColor &a, const QColor &b) { 
			
		
	
		
			
				
					  return  QColor ( ( a . red ( )  +  b . red ( ) )  /  2 ,  ( a . green ( )  +  b . green ( ) )  /  2 ,  ( a . blue ( )  +  b . blue ( ) )  /  2 ,  ( a . alpha ( )  +  b . alpha ( ) )  /  2 ) ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  CanData : : compute ( const  char  * can_data ,  const  int  size ,  double  current_sec ,  double  playback_speed ,  uint32_t  in_freq )  {  
			
		
	
		
			
				
					void  CanData : : compute ( const  char  * can_data ,  const  int  size ,  double  current_sec ,  double  playback_speed ,  const  QList < uint8_t >  & mask ,  uint32_t  in_freq )  {  
			
		
	
		
			
				
					  ts  =  current_sec ;   
			
		
	
		
			
				
					  + + count ;   
			
		
	
		
			
				
					  freq  =  in_freq  = =  0  ?  count  /  std : : max ( 1.0 ,  current_sec )  :  in_freq ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -171,8 +173,9 @@ void CanData::compute(const char *can_data, const int size, double current_sec, 
			
		
	
		
			
				
					    const  QColor  & greyish_blue  =  ! lighter  ?  GREYISH_BLUE  :  GREYISH_BLUE_LIGHTER ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    for  ( int  i  =  0 ;  i  <  size ;  + + i )  {   
			
		
	
		
			
				
					      const  uint8_t  last  =  dat [ i ] ;   
			
		
	
		
			
				
					      const  uint8_t  cur  =  can_data [ i ] ;   
			
		
	
		
			
				
					      const  uint8_t  mask_byte  =  ( i  <  mask . size ( ) )  ?  ( ~ mask [ i ] )  :  0xff ;   
			
		
	
		
			
				
					      const  uint8_t  last  =  dat [ i ]  &  mask_byte ;   
			
		
	
		
			
				
					      const  uint8_t  cur  =  can_data [ i ]  &  mask_byte ;   
			
		
	
		
			
				
					      const  int  delta  =  cur  -  last ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					      if  ( last  ! =  cur )  {