Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenDAS
vllm_cscc
Commits
be8ff88e
Unverified
Commit
be8ff88e
authored
May 07, 2025
by
Isotr0py
Committed by
GitHub
May 07, 2025
Browse files
[Bugfix] Fix Video IO error for short video (#17791)
Signed-off-by:
Isotr0py
<
2037008807@qq.com
>
parent
1a6af145
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
2 deletions
+21
-2
tests/multimodal/test_utils.py
tests/multimodal/test_utils.py
+17
-0
vllm/multimodal/video.py
vllm/multimodal/video.py
+4
-2
No files found.
tests/multimodal/test_utils.py
View file @
be8ff88e
...
...
@@ -26,6 +26,11 @@ TEST_IMAGE_URLS = [
"https://upload.wikimedia.org/wikipedia/commons/0/0b/RGBA_comp.png"
,
]
TEST_VIDEO_URLS
=
[
"https://www.bogotobogo.com/python/OpenCV_Python/images/mean_shift_tracking/slow_traffic_small.mp4"
,
"https://filesamples.com/samples/video/avi/sample_640x360.avi"
,
]
@
pytest
.
fixture
(
scope
=
"module"
)
def
url_images
()
->
dict
[
str
,
Image
.
Image
]:
...
...
@@ -134,6 +139,18 @@ async def test_fetch_image_local_files(image_url: str):
f
"file://
{
temp_dir
}
/../
{
os
.
path
.
basename
(
image_url
)
}
"
)
@
pytest
.
mark
.
asyncio
@
pytest
.
mark
.
parametrize
(
"video_url"
,
TEST_VIDEO_URLS
)
@
pytest
.
mark
.
parametrize
(
"num_frames"
,
[
-
1
,
32
,
1800
])
async
def
test_fetch_video_http
(
video_url
:
str
,
num_frames
:
int
):
connector
=
MediaConnector
()
video_sync
=
connector
.
fetch_video
(
video_url
,
num_frames
=
num_frames
)
video_async
=
await
connector
.
fetch_video_async
(
video_url
,
num_frames
=
num_frames
)
assert
np
.
array_equal
(
video_sync
,
video_async
)
# Used for the next two tests related to `merge_and_sort_multimodal_metadata`.
class
TestCase
(
NamedTuple
):
mm_positions
:
"MultiModalPlaceholderDict"
...
...
vllm/multimodal/video.py
View file @
be8ff88e
...
...
@@ -81,7 +81,8 @@ class OpenCVVideoBackend(VideoLoader):
total_frames_num
=
int
(
cap
.
get
(
cv2
.
CAP_PROP_FRAME_COUNT
))
full_read
=
num_frames
==
-
1
or
total_frames_num
<
num_frames
if
full_read
:
frame_idx
=
list
(
range
(
0
,
total_frames_num
))
num_frames
=
total_frames_num
frame_idx
=
list
(
range
(
0
,
num_frames
))
else
:
uniform_sampled_frames
=
np
.
linspace
(
0
,
total_frames_num
-
1
,
...
...
@@ -104,7 +105,8 @@ class OpenCVVideoBackend(VideoLoader):
frames
[
i
]
=
cv2
.
cvtColor
(
frame
,
cv2
.
COLOR_BGR2RGB
)
i
+=
1
# we expect all frames loaded
assert
i
==
num_frames
assert
i
==
num_frames
,
(
f
"Expected reading
{
num_frames
}
frames, "
f
"but only loaded
{
i
}
frames from video."
)
return
frames
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment