diff --git a/sexp_effects/primitive_libs/streaming_gpu.py b/sexp_effects/primitive_libs/streaming_gpu.py index 3e76b34..8760a6d 100644 --- a/sexp_effects/primitive_libs/streaming_gpu.py +++ b/sexp_effects/primitive_libs/streaming_gpu.py @@ -336,9 +336,16 @@ class GPUVideoSource: # This keeps the frame on GPU without any CPU transfer try: gpu_frame = cp.from_dlpack(frame_tensor) + # Log success once per source + if not getattr(self, '_dlpack_logged', False): + print(f"[GPUVideoSource] DLPack zero-copy SUCCESS - frames stay on GPU", file=sys.stderr) + self._dlpack_logged = True return GPUFrame(gpu_frame, on_gpu=True) - except Exception: + except Exception as dlpack_err: # Fallback: convert via numpy (involves CPU copy) + if not getattr(self, '_dlpack_fail_logged', False): + print(f"[GPUVideoSource] DLPack FAILED ({dlpack_err}), using CPU copy fallback", file=sys.stderr) + self._dlpack_fail_logged = True frame_np = frame_tensor.asnumpy() return GPUFrame(frame_np, on_gpu=True) else: