Retry AI tracking target lock if firmware reports 0xff after initial lock

This commit is contained in:
Lucas Oskorep committed 2026-10-20 23:31:17 -04:00
1 parent 73d4661743
commit a093688e9b
1 file changed
+19 -6
+19 -6
View File
@@ -267,7 +267,7 @@ impl Insta360App {
} }
self.state.video_mode = VideoMode::AutoTracking; self.state.video_mode = VideoMode::AutoTracking;
self.state.ready_auto_track = true; self.state.ready_auto_track = true;
self.state.last_track_poll = None; self.state.last_track_poll = Some(Instant::now());
self.state.show_toast( self.state.show_toast(
"AI Tracking ready — looking for person (or click on video to lock target)", "AI Tracking ready — looking for person (or click on video to lock target)",
false, false,
@@ -2066,6 +2066,7 @@ impl eframe::App for Insta360App {
); );
} }
let _ = self.controller.select_track_object_norm(cx, cy, 0.0_f32, 0.0_f32); let _ = self.controller.select_track_object_norm(cx, cy, 0.0_f32, 0.0_f32);
std::thread::sleep(Duration::from_millis(30));
self.state.ready_auto_track = false; self.state.ready_auto_track = false;
self.state.tracked_targets.clear(); self.state.tracked_targets.clear();
let _ = self.controller.set_video_mode_raw( let _ = self.controller.set_video_mode_raw(
@@ -2098,13 +2099,25 @@ impl eframe::App for Insta360App {
if should_sync { if should_sync {
self.state.last_hw_sync = Some(Instant::now()); self.state.last_hw_sync = Some(Instant::now());
if !self.state.ready_auto_track { if !self.state.ready_auto_track {
if let Ok((hw_mode, _)) = self.controller.get_video_mode() { match self.controller.get_video_mode() {
if hw_mode != self.state.video_mode { Ok((hw_mode, _)) => {
self.state.video_mode = hw_mode; if hw_mode != self.state.video_mode {
if hw_mode == VideoMode::Normal { self.state.video_mode = hw_mode;
self.state.tracked_targets.clear(); if hw_mode == VideoMode::Normal {
self.state.tracked_targets.clear();
}
} }
} }
Err(_) if self.state.video_mode == VideoMode::AutoTracking => {
// Firmware reported 0xff (target lock incomplete); re-enable 200ms target lock loop
let _ = self.controller.set_video_mode_raw(
VideoMode::Normal,
&VideoModeAuxData::default(),
);
self.state.ready_auto_track = true;
self.state.last_track_poll = Some(Instant::now());
}
Err(_) => {}
} }
} }
if self.state.video_mode == VideoMode::Normal && !self.state.ready_auto_track { if self.state.video_mode == VideoMode::Normal && !self.state.ready_auto_track {