Buckets:
| # Copyright (c) Meta Platforms, Inc. and affiliates. All Rights Reserved | |
| """Tests for io_utils extensionless video file handling (D99228861).""" | |
| import tempfile | |
| import unittest | |
| from unittest.mock import MagicMock, patch | |
| from sam3.model.io_utils import load_video_frames | |
| class TestLoadVideoFramesRouting(unittest.TestCase): | |
| """Test that load_video_frames routes paths correctly based on extension.""" | |
| def test_mp4_extension_routes_to_video_loader( | |
| self, mock_load_video: MagicMock | |
| ) -> None: | |
| """Paths with .mp4 extension should route to load_video_frames_from_video_file.""" | |
| mock_load_video.return_value = ("frames", 480, 640) | |
| result = load_video_frames( | |
| video_path="/tmp/test_video.mp4", | |
| image_size=256, | |
| offload_video_to_cpu=True, | |
| ) | |
| mock_load_video.assert_called_once() | |
| self.assertEqual(result, ("frames", 480, 640)) | |
| def test_mov_extension_routes_to_video_loader( | |
| self, mock_load_video: MagicMock | |
| ) -> None: | |
| """Paths with .mov extension should route to load_video_frames_from_video_file.""" | |
| mock_load_video.return_value = ("frames", 480, 640) | |
| load_video_frames( | |
| video_path="/tmp/test_video.mov", | |
| image_size=256, | |
| offload_video_to_cpu=True, | |
| ) | |
| mock_load_video.assert_called_once() | |
| def test_extensionless_oil_path_routes_to_video_loader( | |
| self, mock_load_video: MagicMock | |
| ) -> None: | |
| """Extensionless OIL paths should attempt video loading (D99228861 fix).""" | |
| mock_load_video.return_value = ("frames", 480, 640) | |
| result = load_video_frames( | |
| video_path="oil://fb_permanent/abc123def456", | |
| image_size=256, | |
| offload_video_to_cpu=True, | |
| ) | |
| mock_load_video.assert_called_once() | |
| self.assertEqual(result, ("frames", 480, 640)) | |
| def test_extensionless_bare_hash_routes_to_video_loader( | |
| self, mock_load_video: MagicMock | |
| ) -> None: | |
| """Bare hash paths without extension should attempt video loading.""" | |
| mock_load_video.return_value = ("frames", 480, 640) | |
| result = load_video_frames( | |
| video_path="/data/videos/abc123def456", | |
| image_size=256, | |
| offload_video_to_cpu=True, | |
| ) | |
| mock_load_video.assert_called_once() | |
| self.assertEqual(result, ("frames", 480, 640)) | |
| def test_extensionless_path_raises_on_decode_failure( | |
| self, mock_load_video: MagicMock | |
| ) -> None: | |
| """Extensionless path that fails to decode should raise NotImplementedError.""" | |
| mock_load_video.side_effect = RuntimeError("Could not decode video") | |
| with self.assertRaises(NotImplementedError) as ctx: | |
| load_video_frames( | |
| video_path="oil://fb_permanent/corrupted_file", | |
| image_size=256, | |
| offload_video_to_cpu=True, | |
| ) | |
| self.assertIn("failed to load", str(ctx.exception)) | |
| self.assertIn("oil://fb_permanent/corrupted_file", str(ctx.exception)) | |
| def test_directory_routes_to_image_folder_loader( | |
| self, mock_load_folder: MagicMock | |
| ) -> None: | |
| """Directory paths should route to load_video_frames_from_image_folder.""" | |
| mock_load_folder.return_value = ("frames", 480, 640) | |
| with tempfile.TemporaryDirectory() as tmpdir: | |
| load_video_frames( | |
| video_path=tmpdir, | |
| image_size=256, | |
| offload_video_to_cpu=True, | |
| ) | |
| mock_load_folder.assert_called_once() | |
| def test_dummy_video_pattern(self) -> None: | |
| """<load-dummy-video-N> pattern should return dummy frames.""" | |
| frames, h, w = load_video_frames( | |
| video_path="<load-dummy-video-5>", | |
| image_size=64, | |
| offload_video_to_cpu=True, | |
| ) | |
| self.assertEqual(frames.shape[0], 5) # 5 frames | |
| self.assertEqual(h, 480) | |
| self.assertEqual(w, 640) | |
| def test_unknown_extension_routes_to_video_loader( | |
| self, mock_load_video: MagicMock | |
| ) -> None: | |
| """Paths with unrecognized extensions should attempt video loading.""" | |
| mock_load_video.return_value = ("frames", 480, 640) | |
| result = load_video_frames( | |
| video_path="/tmp/video.xyz", | |
| image_size=256, | |
| offload_video_to_cpu=True, | |
| ) | |
| mock_load_video.assert_called_once() | |
| self.assertEqual(result, ("frames", 480, 640)) | |
Xet Storage Details
- Size:
- 5 kB
- Xet hash:
- 7e7077dae724b965c92cf245fefaac7e5fe425804571692149085a026be0ada6
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.