|
|
@ -5,6 +5,7 @@ import { VIDEO_FPS } from "./constants.js"; |
|
|
|
|
|
|
|
|
// --- DOM Element References --- //
|
|
|
// --- DOM Element References --- //
|
|
|
|
|
|
|
|
|
|
|
|
export const themeToggleBtn = document.getElementById("theme-toggle"); |
|
|
export const canvasContainer = document.getElementById("canvas-container"); |
|
|
export const canvasContainer = document.getElementById("canvas-container"); |
|
|
export const canvasPlaceholder = document.getElementById("canvas-placeholder"); |
|
|
export const canvasPlaceholder = document.getElementById("canvas-placeholder"); |
|
|
export const videoPlayer = document.getElementById("video-player"); |
|
|
export const videoPlayer = document.getElementById("video-player"); |
|
|
@ -24,39 +25,25 @@ export const speedSlider = document.getElementById("speed-slider"); |
|
|
export const speedDisplay = document.getElementById("speed-display"); |
|
|
export const speedDisplay = document.getElementById("speed-display"); |
|
|
export const featureToggles = document.getElementById("feature-toggles"); |
|
|
export const featureToggles = document.getElementById("feature-toggles"); |
|
|
export const toggleSnrColor = document.getElementById("toggle-snr-color"); |
|
|
export const toggleSnrColor = document.getElementById("toggle-snr-color"); |
|
|
export const toggleClusterColor = document.getElementById( |
|
|
|
|
|
"toggle-cluster-color" |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
export const toggleClusterColor = document.getElementById("toggle-cluster-color"); |
|
|
export const toggleInlierColor = document.getElementById("toggle-inlier-color"); |
|
|
export const toggleInlierColor = document.getElementById("toggle-inlier-color"); |
|
|
export const toggleStationaryColor = document.getElementById( |
|
|
|
|
|
"toggle-stationary-color" |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
export const toggleStationaryColor = document.getElementById("toggle-stationary-color"); |
|
|
export const toggleVelocity = document.getElementById("toggle-velocity"); |
|
|
export const toggleVelocity = document.getElementById("toggle-velocity"); |
|
|
export const toggleTracks = document.getElementById("toggle-tracks"); |
|
|
export const toggleTracks = document.getElementById("toggle-tracks"); |
|
|
export const toggleEgoSpeed = document.getElementById("toggle-ego-speed"); |
|
|
export const toggleEgoSpeed = document.getElementById("toggle-ego-speed"); |
|
|
export const toggleFrameNorm = document.getElementById("toggle-frame-norm"); |
|
|
export const toggleFrameNorm = document.getElementById("toggle-frame-norm"); |
|
|
export const toggleDebugOverlay = document.getElementById( |
|
|
|
|
|
"toggle-debug-overlay" |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
export const toggleDebugOverlay = document.getElementById("toggle-debug-overlay"); |
|
|
export const egoSpeedDisplay = document.getElementById("ego-speed-display"); |
|
|
export const egoSpeedDisplay = document.getElementById("ego-speed-display"); |
|
|
export const canSpeedDisplay = document.getElementById("can-speed-display"); |
|
|
export const canSpeedDisplay = document.getElementById("can-speed-display"); |
|
|
export const debugOverlay = document.getElementById("debug-overlay"); |
|
|
export const debugOverlay = document.getElementById("debug-overlay"); |
|
|
export const toggleDebug2Overlay = document.getElementById( |
|
|
|
|
|
"toggle-debug2-overlay" |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
export const toggleDebug2Overlay = document.getElementById("toggle-debug2-overlay"); |
|
|
export const snrMinInput = document.getElementById("snr-min-input"); |
|
|
export const snrMinInput = document.getElementById("snr-min-input"); |
|
|
export const snrMaxInput = document.getElementById("snr-max-input"); |
|
|
export const snrMaxInput = document.getElementById("snr-max-input"); |
|
|
export const applySnrBtn = document.getElementById("apply-snr-btn"); |
|
|
export const applySnrBtn = document.getElementById("apply-snr-btn"); |
|
|
export const autoOffsetIndicator = document.getElementById( |
|
|
|
|
|
"auto-offset-indicator" |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
export const autoOffsetIndicator = document.getElementById("auto-offset-indicator"); |
|
|
export const clearCacheBtn = document.getElementById("clear-cache-btn"); |
|
|
export const clearCacheBtn = document.getElementById("clear-cache-btn"); |
|
|
export const speedGraphContainer = document.getElementById( |
|
|
|
|
|
"speed-graph-container" |
|
|
|
|
|
); |
|
|
|
|
|
export const speedGraphPlaceholder = document.getElementById( |
|
|
|
|
|
"speed-graph-placeholder" |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
export const speedGraphContainer = document.getElementById("speed-graph-container"); |
|
|
|
|
|
export const speedGraphPlaceholder = document.getElementById("speed-graph-placeholder"); |
|
|
export const modalContainer = document.getElementById("modal-container"); |
|
|
export const modalContainer = document.getElementById("modal-container"); |
|
|
export const modalOverlay = document.getElementById("modal-overlay"); |
|
|
export const modalOverlay = document.getElementById("modal-overlay"); |
|
|
export const modalContent = document.getElementById("modal-content"); |
|
|
export const modalContent = document.getElementById("modal-content"); |
|
|
@ -64,13 +51,9 @@ export const modalText = document.getElementById("modal-text"); |
|
|
export const modalOkBtn = document.getElementById("modal-ok-btn"); |
|
|
export const modalOkBtn = document.getElementById("modal-ok-btn"); |
|
|
export const modalCancelBtn = document.getElementById("modal-cancel-btn"); |
|
|
export const modalCancelBtn = document.getElementById("modal-cancel-btn"); |
|
|
export const toggleCloseUp = document.getElementById("toggle-close-up"); |
|
|
export const toggleCloseUp = document.getElementById("toggle-close-up"); |
|
|
export const togglePredictedPos = document.getElementById( |
|
|
|
|
|
"toggle-predicted-pos" |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
export const togglePredictedPos = document.getElementById("toggle-predicted-pos"); |
|
|
export const toggleCovariance = document.getElementById("toggle-covariance"); |
|
|
export const toggleCovariance = document.getElementById("toggle-covariance"); |
|
|
export const modalProgressContainer = document.getElementById( |
|
|
|
|
|
"modal-progress-container" |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
export const modalProgressContainer = document.getElementById("modal-progress-container"); |
|
|
export const modalProgressBar = document.getElementById("modal-progress-bar"); |
|
|
export const modalProgressBar = document.getElementById("modal-progress-bar"); |
|
|
export const modalProgressText = document.getElementById("modal-progress-text"); |
|
|
export const modalProgressText = document.getElementById("modal-progress-text"); |
|
|
export const timelineTooltip = document.getElementById("timeline-tooltip"); |
|
|
export const timelineTooltip = document.getElementById("timeline-tooltip"); |
|
|
@ -98,7 +81,6 @@ export const fullscreenEnterIcon = document.getElementById("fullscreen-enter-ico |
|
|
export const fullscreenExitIcon = document.getElementById("fullscreen-exit-icon"); |
|
|
export const fullscreenExitIcon = document.getElementById("fullscreen-exit-icon"); |
|
|
export const menuScrim = document.getElementById("menu-scrim"); |
|
|
export const menuScrim = document.getElementById("menu-scrim"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//----------------------UPDATE FRAME Function----------------------//
|
|
|
//----------------------UPDATE FRAME Function----------------------//
|
|
|
// Updates the UI to reflect the current radar frame and synchronizes video playback.
|
|
|
// Updates the UI to reflect the current radar frame and synchronizes video playback.
|
|
|
export function updateFrame(frame, forceVideoSeek) { |
|
|
export function updateFrame(frame, forceVideoSeek) { |
|
|
@ -292,7 +274,7 @@ export function updatePersistentOverlays(currentMediaTime) { |
|
|
// If we don't have the necessary data, hide the overlays and exit.
|
|
|
// If we don't have the necessary data, hide the overlays and exit.
|
|
|
const isDebug1Visible = toggleDebugOverlay.checked; |
|
|
const isDebug1Visible = toggleDebugOverlay.checked; |
|
|
const isDebug2Visible = toggleDebug2Overlay.checked; |
|
|
const isDebug2Visible = toggleDebug2Overlay.checked; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!appState.vizData || !appState.videoStartDate) { |
|
|
if (!appState.vizData || !appState.videoStartDate) { |
|
|
radarInfoOverlay.classList.add("hidden"); |
|
|
radarInfoOverlay.classList.add("hidden"); |
|
|
videoInfoOverlay.classList.add("hidden"); |
|
|
videoInfoOverlay.classList.add("hidden"); |
|
|
@ -303,6 +285,10 @@ export function updatePersistentOverlays(currentMediaTime) { |
|
|
videoInfoOverlay.classList.add("hidden"); |
|
|
videoInfoOverlay.classList.add("hidden"); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
if(isDebug1Visible || isDebug2Visible){ |
|
|
|
|
|
videoInfoOverlay.classList.add("hidden"); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
// Otherwise, make sure they are visible.
|
|
|
// Otherwise, make sure they are visible.
|
|
|
radarInfoOverlay.classList.remove("hidden"); |
|
|
radarInfoOverlay.classList.remove("hidden"); |
|
|
videoInfoOverlay.classList.remove("hidden"); |
|
|
videoInfoOverlay.classList.remove("hidden"); |
|
|
@ -310,7 +296,9 @@ export function updatePersistentOverlays(currentMediaTime) { |
|
|
// --- Update Radar Overlay ---
|
|
|
// --- Update Radar Overlay ---
|
|
|
const currentRadarFrame = appState.vizData.radarFrames[appState.currentFrame]; |
|
|
const currentRadarFrame = appState.vizData.radarFrames[appState.currentFrame]; |
|
|
if (currentRadarFrame) { |
|
|
if (currentRadarFrame) { |
|
|
const absRadarTime = new Date(appState.videoStartDate.getTime() + currentRadarFrame.timestampMs); |
|
|
|
|
|
|
|
|
const absRadarTime = new Date( |
|
|
|
|
|
appState.videoStartDate.getTime() + currentRadarFrame.timestampMs |
|
|
|
|
|
); |
|
|
const targetRadarTimeMs = currentRadarFrame.timestampMs; |
|
|
const targetRadarTimeMs = currentRadarFrame.timestampMs; |
|
|
const offsetMs = parseFloat(offsetInput.value) || 0; |
|
|
const offsetMs = parseFloat(offsetInput.value) || 0; |
|
|
const driftMs = currentMediaTime * 1000 + offsetMs - targetRadarTimeMs; |
|
|
const driftMs = currentMediaTime * 1000 + offsetMs - targetRadarTimeMs; |
|
|
@ -321,7 +309,9 @@ export function updatePersistentOverlays(currentMediaTime) { |
|
|
Frame: ${appState.currentFrame + 1} |
|
|
Frame: ${appState.currentFrame + 1} |
|
|
| Abs Time: ${formatUTCTime(absRadarTime)} |
|
|
| Abs Time: ${formatUTCTime(absRadarTime)} |
|
|
| Color Mode: <b>${colorMode}</b> |
|
|
| Color Mode: <b>${colorMode}</b> |
|
|
| Drift: <b style="color: ${driftColor};">${driftMs.toFixed(0)}ms </b> |
|
|
|
|
|
|
|
|
| Drift: <b style="color: ${driftColor};">${driftMs.toFixed( |
|
|
|
|
|
0 |
|
|
|
|
|
)}ms </b> |
|
|
`;
|
|
|
`;
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|