fix(security): classify DeepStream as GPU backend and enforce pixel limits (#50755)

Signed-off-by: jperezde <jperezde@redhat.com>
This commit is contained in:
Juan Pérez de Algaba
2026-08-03 08:23:09 +00:00
committed by GitHub
parent 4635cc3e8f
commit d83eb0b36b
3 changed files with 35 additions and 0 deletions
+28
View File
@@ -470,3 +470,31 @@ class TestMergeKwargsGpuBackendPolicy:
)
assert result.get("backend") != "pynvvideocodec"
assert result["video_backend"] == "pynvvideocodec"
def test_deepstream_requires_gpu(self):
assert VIDEO_LOADER_REGISTRY.backend_requires_gpu("deepstream")
def test_strips_backend_deepstream_when_not_static(self):
result = VideoMediaIO.merge_kwargs(
default_kwargs=None,
runtime_kwargs={"backend": "deepstream"},
)
assert result.get("backend") != "deepstream"
def test_preserves_backend_deepstream_when_static(self):
result = VideoMediaIO.merge_kwargs(
default_kwargs={"backend": "deepstream"},
runtime_kwargs={"backend": "deepstream", "num_frames": 8},
)
assert result["backend"] == "deepstream"
assert result["num_frames"] == 8
def test_strips_pool_size_from_runtime(self):
result = VideoMediaIO.merge_kwargs(
default_kwargs={"backend": "deepstream"},
runtime_kwargs={"backend": "deepstream", "pool_size": 4},
)
assert "pool_size" not in result
def test_unknown_backend_not_treated_as_gpu(self):
assert not VIDEO_LOADER_REGISTRY.backend_requires_gpu("totally_unknown")
+1
View File
@@ -35,6 +35,7 @@ class VideoMediaIO(MediaIO[MediaWithBytes[tuple[npt.NDArray, dict[str, Any]]]]):
# Decoder GPU memory is reserved from the startup value.
runtime_kwargs = dict(runtime_kwargs)
runtime_kwargs.pop("hw_decoders", None)
runtime_kwargs.pop("pool_size", None)
# Block request-level selection of GPU video backends that
# were not configured (and VRAM-reserved) at startup.
+6
View File
@@ -92,6 +92,10 @@ class VideoLoaderRegistry(ExtensionManager):
return self.processor2backend.get(video_processor)
def register_gpu_codec(self, name: str) -> None:
"""Mark a codec name as requiring GPU without registering a loader."""
self._requires_gpu[name] = True
def backend_requires_gpu(self, name: str) -> bool:
return self._requires_gpu.get(name, False)
@@ -208,6 +212,7 @@ class VideoLoader:
VIDEO_LOADER_REGISTRY = VideoLoaderRegistry()
VIDEO_LOADER_REGISTRY.register_gpu_codec("deepstream")
PYNVVIDEOCODEC_VIDEO_BACKEND: Literal["pynvvideocodec"] = "pynvvideocodec"
# Per-decoder upper bound reserved for persistent PyNvVideoCodec surfaces.
@@ -1136,6 +1141,7 @@ class VideoBackend(
from nvidia.deepstream_videodecode import probe_metadata
total_frames, original_fps, duration, _w, _h, codec = probe_metadata(data)
_check_frame_pixel_limit(_w, _h)
source = cls._prepare_source(
VideoSourceMetadata(
total_frames_num=total_frames,