@@ -365,14 +365,19 @@ void process_panda_state(std::vector<Panda *> &pandas, PubMaster *pm, bool engag
365365}
366366
367367void process_peripheral_state (Panda *panda, PubMaster *pm, bool no_fan_control) {
368+ static Params params;
368369 static SubMaster sm ({" deviceState" , " driverCameraState" });
369370
370371 static uint64_t last_driver_camera_t = 0 ;
371372 static uint16_t prev_fan_speed = 999 ;
372373 static int ir_pwr = 0 ;
373374 static int prev_ir_pwr = 999 ;
375+ static uint32_t prev_frame_id = UINT32_MAX;
376+ static bool driver_view = false ;
374377
378+ // TODO: can we merge these?
375379 static FirstOrderFilter integ_lines_filter (0 , 30.0 , 0.05 );
380+ static FirstOrderFilter integ_lines_filter_driver_view (0 , 5.0 , 0.05 );
376381
377382 {
378383 sm.update (0 );
@@ -389,7 +394,15 @@ void process_peripheral_state(Panda *panda, PubMaster *pm, bool no_fan_control)
389394 auto event = sm[" driverCameraState" ];
390395 int cur_integ_lines = event.getDriverCameraState ().getIntegLines ();
391396
392- cur_integ_lines = integ_lines_filter.update (cur_integ_lines);
397+ // reset the filter when camerad restarts
398+ if (event.getDriverCameraState ().getFrameId () < prev_frame_id) {
399+ integ_lines_filter.reset (0 );
400+ integ_lines_filter_driver_view.reset (0 );
401+ driver_view = params.getBool (" IsDriverViewEnabled" );
402+ }
403+ prev_frame_id = event.getDriverCameraState ().getFrameId ();
404+
405+ cur_integ_lines = (driver_view ? integ_lines_filter_driver_view : integ_lines_filter).update (cur_integ_lines);
393406 last_driver_camera_t = event.getLogMonoTime ();
394407
395408 if (cur_integ_lines <= CUTOFF_IL) {
0 commit comments