mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-03-18 22:28:23 +03:00
Merge pull request #24 from ibs0d/codex/fix-mse-video-sizing-in-draggable-grid
Fix rotated MSE sizing in draggable live grid
This commit is contained in:
commit
2d9508bbd8
@ -79,6 +79,9 @@ function MSEPlayer({
|
|||||||
);
|
);
|
||||||
|
|
||||||
const videoRef = useRef<HTMLVideoElement>(null);
|
const videoRef = useRef<HTMLVideoElement>(null);
|
||||||
|
const playerContainerRef = useRef<HTMLDivElement>(null);
|
||||||
|
const [containerSize, setContainerSize] = useState({ width: 0, height: 0 });
|
||||||
|
const [isRotatedGrid, setIsRotatedGrid] = useState(false);
|
||||||
const wsRef = useRef<WebSocket | null>(null);
|
const wsRef = useRef<WebSocket | null>(null);
|
||||||
const reconnectTIDRef = useRef<number | null>(null);
|
const reconnectTIDRef = useRef<number | null>(null);
|
||||||
const intentionalDisconnectRef = useRef<boolean>(false);
|
const intentionalDisconnectRef = useRef<boolean>(false);
|
||||||
@ -796,7 +799,51 @@ function MSEPlayer({
|
|||||||
};
|
};
|
||||||
}, [setStats, getStats]);
|
}, [setStats, getStats]);
|
||||||
|
|
||||||
return (
|
useEffect(() => {
|
||||||
|
const video = videoRef.current;
|
||||||
|
|
||||||
|
if (!video) {
|
||||||
|
setIsRotatedGrid(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const rotatedMarker = window
|
||||||
|
.getComputedStyle(video)
|
||||||
|
.getPropertyValue("--frigate-mse-grid-rotated")
|
||||||
|
.trim();
|
||||||
|
|
||||||
|
setIsRotatedGrid(rotatedMarker === "1");
|
||||||
|
}, [className]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isRotatedGrid) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const container = playerContainerRef.current;
|
||||||
|
|
||||||
|
if (!container) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const updateSize = () => {
|
||||||
|
setContainerSize({
|
||||||
|
width: container.clientWidth,
|
||||||
|
height: container.clientHeight,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
updateSize();
|
||||||
|
|
||||||
|
const resizeObserver = new ResizeObserver(updateSize);
|
||||||
|
resizeObserver.observe(container);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
resizeObserver.disconnect();
|
||||||
|
};
|
||||||
|
}, [isRotatedGrid]);
|
||||||
|
|
||||||
|
const videoElement = (
|
||||||
<video
|
<video
|
||||||
ref={videoRef}
|
ref={videoRef}
|
||||||
className={className}
|
className={className}
|
||||||
@ -807,6 +854,8 @@ function MSEPlayer({
|
|||||||
"var(--frigate-mse-grid-rotation, none)" as CSSProperties["transform"],
|
"var(--frigate-mse-grid-rotation, none)" as CSSProperties["transform"],
|
||||||
transformOrigin:
|
transformOrigin:
|
||||||
"var(--frigate-mse-grid-rotation-origin, center center)" as CSSProperties["transformOrigin"],
|
"var(--frigate-mse-grid-rotation-origin, center center)" as CSSProperties["transformOrigin"],
|
||||||
|
width: isRotatedGrid ? "100%" : undefined,
|
||||||
|
height: isRotatedGrid ? "100%" : undefined,
|
||||||
}}
|
}}
|
||||||
playsInline
|
playsInline
|
||||||
preload="auto"
|
preload="auto"
|
||||||
@ -855,6 +904,35 @@ function MSEPlayer({
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
ref={playerContainerRef}
|
||||||
|
className="size-full"
|
||||||
|
style={
|
||||||
|
isRotatedGrid
|
||||||
|
? ({ position: "relative", overflow: "hidden" } as CSSProperties)
|
||||||
|
: undefined
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={
|
||||||
|
isRotatedGrid
|
||||||
|
? ({
|
||||||
|
position: "absolute",
|
||||||
|
top: "50%",
|
||||||
|
left: "50%",
|
||||||
|
width: containerSize.height || "100%",
|
||||||
|
height: containerSize.width || "100%",
|
||||||
|
transform: "translate(-50%, -50%)",
|
||||||
|
} as CSSProperties)
|
||||||
|
: ({ width: "100%", height: "100%" } as CSSProperties)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{videoElement}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default MSEPlayer;
|
export default MSEPlayer;
|
||||||
|
|||||||
@ -671,7 +671,7 @@ export default function DraggableGridLayout({
|
|||||||
className={cn(
|
className={cn(
|
||||||
"draggable-live-grid-mse-cover size-full rounded-lg bg-black md:rounded-2xl",
|
"draggable-live-grid-mse-cover size-full rounded-lg bg-black md:rounded-2xl",
|
||||||
camera.ui?.rotate &&
|
camera.ui?.rotate &&
|
||||||
"draggable-live-grid-rotated [--frigate-mse-grid-rotation:rotate(90deg)]",
|
"draggable-live-grid-rotated [--frigate-mse-grid-rotated:1] [--frigate-mse-grid-rotation:rotate(90deg)]",
|
||||||
isEditMode &&
|
isEditMode &&
|
||||||
showCircles &&
|
showCircles &&
|
||||||
"outline-2 outline-muted-foreground hover:cursor-grab hover:outline-4 active:cursor-grabbing",
|
"outline-2 outline-muted-foreground hover:cursor-grab hover:outline-4 active:cursor-grabbing",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user