Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
vision
Commits
e3f1a822
"src/array/vscode:/vscode.git/clone" did not exist on "7b3a7b14381acf7d5d8213e3e36a94fdf69c827b"
Unverified
Commit
e3f1a822
authored
Mar 01, 2022
by
Prabhat Roy
Committed by
GitHub
Mar 01, 2022
Browse files
Improve test_videoapi (#5497)
parent
c29a20ab
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
144 additions
and
152 deletions
+144
-152
test/test_videoapi.py
test/test_videoapi.py
+144
-152
No files found.
test/test_videoapi.py
View file @
e3f1a822
...
@@ -52,14 +52,11 @@ test_videos = {
...
@@ -52,14 +52,11 @@ test_videos = {
@
pytest
.
mark
.
skipif
(
_HAS_VIDEO_OPT
is
False
,
reason
=
"Didn't compile with ffmpeg"
)
@
pytest
.
mark
.
skipif
(
_HAS_VIDEO_OPT
is
False
,
reason
=
"Didn't compile with ffmpeg"
)
class
TestVideoApi
:
class
TestVideoApi
:
@
pytest
.
mark
.
skipif
(
av
is
None
,
reason
=
"PyAV unavailable"
)
@
pytest
.
mark
.
skipif
(
av
is
None
,
reason
=
"PyAV unavailable"
)
def
test_frame_reading
(
self
):
@
pytest
.
mark
.
parametrize
(
"test_video"
,
test_videos
.
keys
())
for
test_video
,
config
in
test_video
s
.
items
(
):
def
test_frame_reading
(
self
,
test_video
):
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
with
av
.
open
(
full_path
)
as
av_reader
:
with
av
.
open
(
full_path
)
as
av_reader
:
is_video
=
True
if
av_reader
.
streams
.
video
else
False
if
av_reader
.
streams
.
video
:
if
is_video
:
av_frames
,
vr_frames
=
[],
[]
av_frames
,
vr_frames
=
[],
[]
av_pts
,
vr_pts
=
[],
[]
av_pts
,
vr_pts
=
[],
[]
# get av frames
# get av frames
...
@@ -91,9 +88,7 @@ class TestVideoApi:
...
@@ -91,9 +88,7 @@ class TestVideoApi:
# test audio reading compared to PYAV
# test audio reading compared to PYAV
with
av
.
open
(
full_path
)
as
av_reader
:
with
av
.
open
(
full_path
)
as
av_reader
:
is_audio
=
True
if
av_reader
.
streams
.
audio
else
False
if
av_reader
.
streams
.
audio
:
if
is_audio
:
av_frames
,
vr_frames
=
[],
[]
av_frames
,
vr_frames
=
[],
[]
av_pts
,
vr_pts
=
[],
[]
av_pts
,
vr_pts
=
[],
[]
# get av frames
# get av frames
...
@@ -119,25 +114,24 @@ class TestVideoApi:
...
@@ -119,25 +114,24 @@ class TestVideoApi:
# we assure that there is never more than 1% difference in signal
# we assure that there is never more than 1% difference in signal
assert
max_delta
.
item
()
<
0.001
assert
max_delta
.
item
()
<
0.001
def
test_metadata
(
self
):
@
pytest
.
mark
.
parametrize
(
"test_video,config"
,
test_videos
.
items
())
def
test_metadata
(
self
,
test_video
,
config
):
"""
"""
Test that the metadata returned via pyav corresponds to the one returned
Test that the metadata returned via pyav corresponds to the one returned
by the new video decoder API
by the new video decoder API
"""
"""
for
test_video
,
config
in
test_videos
.
items
():
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
reader
=
VideoReader
(
full_path
,
"video"
)
reader
=
VideoReader
(
full_path
,
"video"
)
reader_md
=
reader
.
get_metadata
()
reader_md
=
reader
.
get_metadata
()
assert
config
.
video_fps
==
approx
(
reader_md
[
"video"
][
"fps"
][
0
],
abs
=
0.0001
)
assert
config
.
video_fps
==
approx
(
reader_md
[
"video"
][
"fps"
][
0
],
abs
=
0.0001
)
assert
config
.
duration
==
approx
(
reader_md
[
"video"
][
"duration"
][
0
],
abs
=
0.5
)
assert
config
.
duration
==
approx
(
reader_md
[
"video"
][
"duration"
][
0
],
abs
=
0.5
)
def
test_seek_start
(
self
):
@
pytest
.
mark
.
parametrize
(
"test_video"
,
test_videos
.
keys
())
for
test_video
,
config
in
test_video
s
.
items
(
):
def
test_seek_start
(
self
,
test_video
):
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
video_reader
=
VideoReader
(
full_path
,
"video"
)
video_reader
=
VideoReader
(
full_path
,
"video"
)
num_frames
=
0
num_frames
=
0
for
frame
in
video_reader
:
for
_
in
video_reader
:
num_frames
+=
1
num_frames
+=
1
# now seek the container to 0 and do it again
# now seek the container to 0 and do it again
...
@@ -145,7 +139,7 @@ class TestVideoApi:
...
@@ -145,7 +139,7 @@ class TestVideoApi:
# this way and it doesn't start at 0
# this way and it doesn't start at 0
video_reader
.
seek
(
0
)
video_reader
.
seek
(
0
)
start_num_frames
=
0
start_num_frames
=
0
for
frame
in
video_reader
:
for
_
in
video_reader
:
start_num_frames
+=
1
start_num_frames
+=
1
assert
start_num_frames
==
num_frames
assert
start_num_frames
==
num_frames
...
@@ -153,28 +147,26 @@ class TestVideoApi:
...
@@ -153,28 +147,26 @@ class TestVideoApi:
# now seek the container to < 0 to check for unexpected behaviour
# now seek the container to < 0 to check for unexpected behaviour
video_reader
.
seek
(
-
1
)
video_reader
.
seek
(
-
1
)
start_num_frames
=
0
start_num_frames
=
0
for
frame
in
video_reader
:
for
_
in
video_reader
:
start_num_frames
+=
1
start_num_frames
+=
1
assert
start_num_frames
==
num_frames
assert
start_num_frames
==
num_frames
def
test_accurateseek_middle
(
self
):
@
pytest
.
mark
.
parametrize
(
"test_video"
,
test_videos
.
keys
())
for
test_video
,
config
in
test_video
s
.
items
(
):
def
test_accurateseek_middle
(
self
,
test_video
):
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
stream
=
"video"
stream
=
"video"
video_reader
=
VideoReader
(
full_path
,
stream
)
video_reader
=
VideoReader
(
full_path
,
stream
)
md
=
video_reader
.
get_metadata
()
md
=
video_reader
.
get_metadata
()
duration
=
md
[
stream
][
"duration"
][
0
]
duration
=
md
[
stream
][
"duration"
][
0
]
if
duration
is
not
None
:
if
duration
is
not
None
:
num_frames
=
0
num_frames
=
0
for
frame
in
video_reader
:
for
_
in
video_reader
:
num_frames
+=
1
num_frames
+=
1
video_reader
.
seek
(
duration
/
2
)
video_reader
.
seek
(
duration
/
2
)
middle_num_frames
=
0
middle_num_frames
=
0
for
frame
in
video_reader
:
for
_
in
video_reader
:
middle_num_frames
+=
1
middle_num_frames
+=
1
assert
middle_num_frames
<
num_frames
assert
middle_num_frames
<
num_frames
...
@@ -199,8 +191,8 @@ class TestVideoApi:
...
@@ -199,8 +191,8 @@ class TestVideoApi:
os
.
remove
(
video_path
)
os
.
remove
(
video_path
)
@
pytest
.
mark
.
skipif
(
av
is
None
,
reason
=
"PyAV unavailable"
)
@
pytest
.
mark
.
skipif
(
av
is
None
,
reason
=
"PyAV unavailable"
)
def
test_keyframe_reading
(
self
):
@
pytest
.
mark
.
parametrize
(
"test_video,config"
,
test_videos
.
items
())
for
test_video
,
config
in
test_video
s
.
items
(
):
def
test_keyframe_reading
(
self
,
test_video
,
config
):
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
full_path
=
os
.
path
.
join
(
VIDEO_DIR
,
test_video
)
av_reader
=
av
.
open
(
full_path
)
av_reader
=
av
.
open
(
full_path
)
...
...
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