diff --git a/web/src/components/camera/DebugCameraImage.tsx b/web/src/components/camera/DebugCameraImage.tsx
new file mode 100644
index 000000000..e7352c17a
--- /dev/null
+++ b/web/src/components/camera/DebugCameraImage.tsx
@@ -0,0 +1,150 @@
+import { Switch } from "../ui/switch";
+import { Label } from "../ui/label";
+import { CameraConfig } from "@/types/frigateConfig";
+import { Button } from "../ui/button";
+import { LuSettings } from "react-icons/lu";
+import { useCallback, useMemo, useState } from "react";
+import { Card, CardContent, CardHeader, CardTitle } from "../ui/card";
+import { usePersistence } from "@/hooks/use-persistence";
+import AutoUpdatingCameraImage from "./AutoUpdatingCameraImage";
+
+type Options = { [key: string]: boolean };
+
+const emptyObject = Object.freeze({});
+
+type DebugCameraImageProps = {
+ className?: string;
+ cameraConfig: CameraConfig;
+};
+
+export default function DebugCameraImage({
+ className,
+ cameraConfig,
+}: DebugCameraImageProps) {
+ const [showSettings, setShowSettings] = useState(false);
+ const [options, setOptions] = usePersistence(
+ `${cameraConfig?.name}-feed`,
+ emptyObject
+ );
+ const handleSetOption = useCallback(
+ (id: string, value: boolean) => {
+ const newOptions = { ...options, [id]: value };
+ setOptions(newOptions);
+ },
+ [options]
+ );
+ const searchParams = useMemo(
+ () =>
+ new URLSearchParams(
+ Object.keys(options).reduce((memo, key) => {
+ //@ts-ignore we know this is correct
+ memo.push([key, options[key] === true ? "1" : "0"]);
+ return memo;
+ }, [])
+ ),
+ [options]
+ );
+ const handleToggleSettings = useCallback(() => {
+ setShowSettings(!showSettings);
+ }, [showSettings]);
+
+ return (
+
+
+
+ {showSettings ? (
+
+
+ Options
+
+
+
+
+
+ ) : null}
+
+ );
+}
+
+type DebugSettingsProps = {
+ handleSetOption: (id: string, value: boolean) => void;
+ options: Options;
+};
+
+function DebugSettings({ handleSetOption, options }: DebugSettingsProps) {
+ return (
+
+
+ {
+ handleSetOption("bbox", isChecked);
+ }}
+ />
+
+
+
+ {
+ handleSetOption("timestamp", isChecked);
+ }}
+ />
+
+
+
+ {
+ handleSetOption("zones", isChecked);
+ }}
+ />
+
+
+
+ {
+ handleSetOption("mask", isChecked);
+ }}
+ />
+
+
+
+ {
+ handleSetOption("motion", isChecked);
+ }}
+ />
+
+
+
+ {
+ handleSetOption("regions", isChecked);
+ }}
+ />
+
+
+
+ );
+}
diff --git a/web/src/components/player/LivePlayer.tsx b/web/src/components/player/LivePlayer.tsx
index 5c5f648dd..f7c1ad9d9 100644
--- a/web/src/components/player/LivePlayer.tsx
+++ b/web/src/components/player/LivePlayer.tsx
@@ -2,13 +2,7 @@ import WebRtcPlayer from "./WebRTCPlayer";
import { CameraConfig } from "@/types/frigateConfig";
import AutoUpdatingCameraImage from "../camera/AutoUpdatingCameraImage";
import ActivityIndicator from "../ui/activity-indicator";
-import { Button } from "../ui/button";
-import { LuSettings } from "react-icons/lu";
-import { useCallback, useEffect, useMemo, useState } from "react";
-import { Card, CardContent, CardHeader, CardTitle } from "../ui/card";
-import { Switch } from "../ui/switch";
-import { Label } from "../ui/label";
-import { usePersistence } from "@/hooks/use-persistence";
+import { useEffect, useMemo, useState } from "react";
import MSEPlayer from "./MsePlayer";
import JSMpegPlayer from "./JSMpegPlayer";
import { MdCircle, MdLeakAdd } from "react-icons/md";
@@ -19,8 +13,6 @@ import { useRecordingsState } from "@/api/ws";
import { LivePlayerMode } from "@/types/live";
import useCameraLiveMode from "@/hooks/use-camera-live-mode";
-const emptyObject = Object.freeze({});
-
type LivePlayerProps = {
className?: string;
cameraConfig: CameraConfig;
@@ -29,8 +21,6 @@ type LivePlayerProps = {
windowVisible?: boolean;
};
-type Options = { [key: string]: boolean };
-
export default function LivePlayer({
className,
cameraConfig,
@@ -65,35 +55,6 @@ export default function LivePlayer({
const { payload: recording } = useRecordingsState(cameraConfig.name);
- // debug view settings
-
- const [showSettings, setShowSettings] = useState(false);
- const [options, setOptions] = usePersistence(
- `${cameraConfig?.name}-feed`,
- emptyObject
- );
- const handleSetOption = useCallback(
- (id: string, value: boolean) => {
- const newOptions = { ...options, [id]: value };
- setOptions(newOptions);
- },
- [options]
- );
- const searchParams = useMemo(
- () =>
- new URLSearchParams(
- Object.keys(options).reduce((memo, key) => {
- //@ts-ignore we know this is correct
- memo.push([key, options[key] === true ? "1" : "0"]);
- return memo;
- }, [])
- ),
- [options]
- );
- const handleToggleSettings = useCallback(() => {
- setShowSettings(!showSettings);
- }, [showSettings]);
-
if (!cameraConfig) {
return ;
}
@@ -133,34 +94,6 @@ export default function LivePlayer({
height={cameraConfig.detect.height}
/>
);
- } else if (liveMode == "debug") {
- player = (
- <>
-
-
- {showSettings ? (
-
-
- Options
-
-
-
-
-
- ) : null}
- >
- );
} else {
player = ;
}
@@ -222,75 +155,3 @@ export default function LivePlayer({
);
}
-
-type DebugSettingsProps = {
- handleSetOption: (id: string, value: boolean) => void;
- options: Options;
-};
-
-function DebugSettings({ handleSetOption, options }: DebugSettingsProps) {
- return (
-
-
- {
- handleSetOption("bbox", isChecked);
- }}
- />
-
-
-
- {
- handleSetOption("timestamp", isChecked);
- }}
- />
-
-
-
- {
- handleSetOption("zones", isChecked);
- }}
- />
-
-
-
- {
- handleSetOption("mask", isChecked);
- }}
- />
-
-
-
- {
- handleSetOption("motion", isChecked);
- }}
- />
-
-
-
- {
- handleSetOption("regions", isChecked);
- }}
- />
-
-
-
- );
-}