From 2c7164a1cb84aa8ec038d1ce15a2786b26d65a20 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Bannier Date: Fri, 11 Sep 2026 14:02:10 +0200 Subject: [PATCH] refactor: drop sam3_visual_track_params in favour of sam3_video_params sam3_visual_track_params duplicated 4 fields of sam3_video_params, and sam3_create_visual_tracker copied them one by one into a sam3_video_params anyway. Take sam3_video_params directly and clear text_prompt so the tracker never runs PCS detection. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01M2qLmQ9ag49hT61V6i9qAq --- examples/benchmark.cpp | 2 +- examples/main_video.cpp | 7 +------ sam3.cpp | 11 +++-------- sam3.h | 13 +++---------- 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/examples/benchmark.cpp b/examples/benchmark.cpp index b48a9c8..e127209 100644 --- a/examples/benchmark.cpp +++ b/examples/benchmark.cpp @@ -235,7 +235,7 @@ static BenchWire run_single_benchmark(const std::string & model_path, sam3_tracker_ptr tracker; if (visual_only) { - sam3_visual_track_params vtp; + sam3_video_params vtp; vtp.max_keep_alive = 100; vtp.recondition_every = 16; tracker = sam3_create_visual_tracker(*model, vtp); diff --git a/examples/main_video.cpp b/examples/main_video.cpp index b0efe00..441af13 100644 --- a/examples/main_video.cpp +++ b/examples/main_video.cpp @@ -148,7 +148,6 @@ struct vapp_state { // Model type bool visual_only = false; - sam3_visual_track_params visual_track_params; // Timeline: per-frame instance presence // timeline_instances[frame_index] = list of {instance_id, score} @@ -218,11 +217,7 @@ static bool screen_to_image(const vapp_state& app, float sx, float sy, static void create_tracker(vapp_state& app) { if (app.visual_only) { // SAM2 / visual-only: use visual tracker (no text detection) - app.visual_track_params.assoc_iou_threshold = app.track_params.assoc_iou_threshold; - app.visual_track_params.max_keep_alive = app.track_params.max_keep_alive; - app.visual_track_params.recondition_every = app.track_params.recondition_every; - app.visual_track_params.fill_hole_area = app.track_params.fill_hole_area; - app.tracker = sam3_create_visual_tracker(*app.model, app.visual_track_params); + app.tracker = sam3_create_visual_tracker(*app.model, app.track_params); } else { if (app.init_mode == VMODE_TEXT) app.track_params.text_prompt = app.text_prompt; diff --git a/sam3.cpp b/sam3.cpp index c7148a6..1997b52 100644 --- a/sam3.cpp +++ b/sam3.cpp @@ -10839,15 +10839,10 @@ void sam3_tracker_reset(sam3_tracker& tracker) { sam3_tracker_ptr sam3_create_visual_tracker( const sam3_model& model, - const sam3_visual_track_params& params) { - sam3_video_params vp; - vp.text_prompt = ""; // no PCS detection - vp.assoc_iou_threshold = params.assoc_iou_threshold; - vp.max_keep_alive = params.max_keep_alive; - vp.recondition_every = params.recondition_every; - vp.fill_hole_area = params.fill_hole_area; + const sam3_video_params& params) { sam3_tracker_ptr tracker(new sam3_tracker()); - tracker->params = vp; + tracker->params = params; + tracker->params.text_prompt.clear(); // no PCS detection fprintf(stderr, "%s: visual-only tracker created (max_keep_alive=%d)\n", __func__, params.max_keep_alive); return tracker; diff --git a/sam3.h b/sam3.h index 2f5c374..ec97551 100644 --- a/sam3.h +++ b/sam3.h @@ -241,20 +241,13 @@ void sam3_tracker_reset(sam3_tracker & tracker); ** ── Visual-Only Video Tracking ────────────────────────────────────────── */ -struct sam3_visual_track_params { - float assoc_iou_threshold = 0.1f; - int max_keep_alive = 30; - int recondition_every = 16; - int fill_hole_area = 16; -}; - /* ** Create a tracker for visual-only models. Instances are added manually -** via sam3_tracker_add_instance(). +** via sam3_tracker_add_instance(). params.text_prompt is ignored. */ sam3_tracker_ptr sam3_create_visual_tracker( - const sam3_model & model, - const sam3_visual_track_params & params); + const sam3_model & model, + const sam3_video_params & params); /* ** Propagate all tracked instances to the next frame (no detection step).