Ensure Normal mode before AI tracking test step and skip redundant SetVideoMode(0)

This commit is contained in:
Lucas Oskorep committed 2026-10-20 23:28:19 -04:00
1 parent 60935c34ad
commit fd757f2d78
1 file changed
+8 -3
+8 -3
View File
@@ -254,15 +254,17 @@ impl Insta360App {
if mode_to_set == VideoMode::AutoTracking { if mode_to_set == VideoMode::AutoTracking {
// `Webcam::CameraInsta::autoTrackClicked` (`0x10006c400`) -> // `Webcam::CameraInsta::autoTrackClicked` (`0x10006c400`) ->
// `onHandleVideoModeChangeEvent` (`0x10005a4cc`) -> `readyAutoTrack` (`0x10006c8c8`): // `onHandleVideoModeChangeEvent` (`0x10005a400`..`0x10005a4cc`) -> `readyAutoTrack` (`0x10006c8c8`):
// 1. Always ensure the camera is in `VideoMode::Normal` (`0`) so the firmware's person // 1. If the camera was in a non-Normal mode (`>= 2`: Whiteboard, Overhead, DeskView),
// detector (`GetTrackObjLists`, `XU1 0x14`) runs on the live video stream. // first exit to `VideoMode::Normal` (`0`) so `GetTrackObjLists` (`XU1 0x14`) runs.
// 2. Do NOT send `SetTrackObj(0.5, 0.5)` or `SetVideoMode(AutoTracking)` before // 2. Do NOT send `SetTrackObj(0.5, 0.5)` or `SetVideoMode(AutoTracking)` before
// `GetTrackObjLists` detects a person — doing so aborts firmware person detection! // `GetTrackObjLists` detects a person — doing so aborts firmware person detection!
// 3. Start the 200ms `ready_auto_track` polling loop (`SetCheckTrack(true)`). // 3. Start the 200ms `ready_auto_track` polling loop (`SetCheckTrack(true)`).
if prev_mode != VideoMode::Normal && prev_mode != VideoMode::AutoTracking {
let _ = self let _ = self
.controller .controller
.set_video_mode_raw(VideoMode::Normal, &VideoModeAuxData::default()); .set_video_mode_raw(VideoMode::Normal, &VideoModeAuxData::default());
}
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 = None;
@@ -2116,6 +2118,9 @@ impl eframe::App for Insta360App {
let elapsed = start.elapsed().as_secs_f32(); let elapsed = start.elapsed().as_secs_f32();
if self.self_test_step == 0 && elapsed >= 3.2 { if self.self_test_step == 0 && elapsed >= 3.2 {
self.self_test_step = 1; self.self_test_step = 1;
if self.state.video_mode != VideoMode::Normal {
self.set_video_mode(VideoMode::Normal);
}
if let Ok((p, t)) = self.controller.get_pantilt_absolute() { if let Ok((p, t)) = self.controller.get_pantilt_absolute() {
self.state.pan_deg = p as f32 / 3600.0; self.state.pan_deg = p as f32 / 3600.0;
self.state.tilt_deg = t as f32 / 3600.0; self.state.tilt_deg = t as f32 / 3600.0;