From c51d6f6f2d54452d4f730c05ccf32f5d050e3f97 Mon Sep 17 00:00:00 2001 From: Accusys Date: Thu, 14 May 2026 15:07:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20trace=20debug=20mode=20=E2=80=94=20text?= =?UTF-8?q?=20overlay=20only,=20no=20bounding=20boxes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Debug overlay now shows: File UUID: {uuid} Trace {id}: start_frame={n} Identity: {name} Cut: {id} Frame: {n} Time: {t}s --- src/api/media_api.rs | 51 +++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 32 deletions(-) diff --git a/src/api/media_api.rs b/src/api/media_api.rs index 34c12d3..6d930de 100644 --- a/src/api/media_api.rs +++ b/src/api/media_api.rs @@ -319,10 +319,7 @@ async fn trace_video( .unwrap()); } - // === DEBUG MODE: with overlays === - let total_frames = (duration * fps).round() as i32; - let pad_frames = (padding * fps) as i32; - + // === DEBUG MODE: text overlay without bounding boxes === // Query identity info for this trace let identities_table = schema::table_name("identities"); let identity_name: String = sqlx::query_scalar(&format!( @@ -344,38 +341,28 @@ async fn trace_video( .unwrap_or(None) .unwrap_or(0); - let mut parts: Vec = Vec::new(); - - // Top-left info block let frame_offset = first_frame as i64 - (padding * fps) as i64; - let info_lines = format!( - "drawtext=text='Trace: {} Cut: {} {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=12", - trace_id, cut_id, identity_name + let trace_start = rows[0].0; + let fps_str = &fps.to_string(); + + // Static trace info (shown throughout) + let info_block = format!( + "drawtext=text='File UUID: {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=12", file_uuid + ); + let trace_block = format!( + "drawtext=text='Trace {}: start_frame={} Identity: {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=34", trace_id, trace_start, identity_name + ); + let cut_block = format!( + "drawtext=text='Cut: {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=56", cut_id ); - parts.push(info_lines); - parts.push(format!( - "drawtext=text='Frame: %{{eif:n+{}:d}} UUID: {}':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=34", - frame_offset, file_uuid - )); - for (i, (frame, x, y, w, h)) in rows.iter().enumerate() { - let start_off = frame - first_frame + pad_frames; - let end_off = if i + 1 < rows.len() { - rows[i + 1].0 - first_frame + pad_frames - } else { - total_frames - }; - parts.push(format!( - "drawbox=x={}:y={}:w={}:h={}:color=red@0.8:thickness=8:enable='between(n,{},{})'", - x, y, w, h, start_off, end_off - 1 - )); - parts.push(format!( - "drawtext=text='{}':x={}:y={}:fontsize=20:fontcolor=white:box=1:boxcolor=red@0.8:enable='between(n,{},{})'", - trace_id, x + 4, y + 4, start_off, end_off - 1 - )); - } + // Per-frame info (frame number, time) + let frame_info = format!( + "drawtext=text='Frame: %{{eif:n+{}:d}} Time: %{{eif:(n+{})*100/{}:d}}s':fontsize=14:fontcolor=white:box=1:boxcolor=black@0.6:x=10:y=78", + frame_offset, frame_offset, fps_str + ); - let filter_text = parts.join(","); + let filter_text = format!("{}, {}, {}, {}", info_block, trace_block, cut_block, frame_info); let filter_file = std::env::temp_dir().join(format!("vf_{}.txt", uuid::Uuid::new_v4())); let _ = std::fs::write(&filter_file, &filter_text); let filter_path = filter_file.to_str().unwrap_or("");