Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
80820115
O
Opencv
项目概览
Greenplum
/
Opencv
10 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
80820115
编写于
11月 23, 2017
作者:
A
Alexander Nesterov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update videoio tests
上级
e4aa2ccd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
158 addition
and
39 deletion
+158
-39
modules/videoio/test/test_video_io.cpp
modules/videoio/test/test_video_io.cpp
+158
-39
未找到文件。
modules/videoio/test/test_video_io.cpp
浏览文件 @
80820115
...
...
@@ -54,6 +54,7 @@ class Videoio_Test_Base
protected:
string
ext
;
string
video_file
;
int
apiPref
;
protected:
Videoio_Test_Base
()
{}
virtual
~
Videoio_Test_Base
()
{}
...
...
@@ -81,13 +82,27 @@ protected:
public:
void
doTest
()
{
VideoCapture
cap
(
video_file
);
if
(
apiPref
==
CAP_AVFOUNDATION
)
{
// TODO: fix this backend
std
::
cout
<<
"SKIP test: AVFoundation backend returns invalid frame count"
<<
std
::
endl
;
return
;
}
else
if
(
apiPref
==
CAP_VFW
)
{
// TODO: fix this backend
std
::
cout
<<
"SKIP test: Video for Windows backend not open files"
<<
std
::
endl
;
return
;
}
else
if
(
apiPref
==
CAP_GSTREAMER
)
{
// TODO: fix this backend
std
::
cout
<<
"SKIP test: Gstreamer failed with read critical error"
<<
std
::
endl
;
return
;
}
VideoCapture
cap
(
video_file
,
apiPref
);
if
(
!
cap
.
isOpened
())
{
std
::
cout
<<
"SKIP test: Can't open video: "
<<
video_file
<<
std
::
endl
;
return
;
}
int
n_frames
=
(
int
)
cap
.
get
(
CAP_PROP_FRAME_COUNT
);
if
(
n_frames
>
0
)
{
...
...
@@ -107,7 +122,6 @@ public:
checkFrameRead
(
k
,
cap
);
}
}
bool
canSeek
=
cap
.
set
(
CAP_PROP_POS_FRAMES
,
0
);
if
(
!
canSeek
)
{
...
...
@@ -138,18 +152,36 @@ public:
};
//==================================================================================================
typedef
tuple
<
string
,
int
>
Backend_Type_Params
;
class
Videoio_Bunny
:
public
Videoio_Test_Base
,
public
testing
::
TestWithParam
<
string
>
class
Videoio_Bunny
:
public
Videoio_Test_Base
,
public
testing
::
TestWithParam
<
Backend_Type_Params
>
{
public:
Videoio_Bunny
()
{
ext
=
GetParam
();
ext
=
get
<
0
>
(
GetParam
());
apiPref
=
get
<
1
>
(
GetParam
());
video_file
=
cvtest
::
TS
::
ptr
()
->
get_data_path
()
+
"video/big_buck_bunny."
+
ext
;
}
void
doFrameCountTest
()
{
VideoCapture
cap
(
video_file
);
if
(
apiPref
==
CAP_AVFOUNDATION
)
{
// TODO: fix this backend
std
::
cout
<<
"SKIP test: AVFoundation backend returns invalid frame count"
<<
std
::
endl
;
return
;
}
else
if
(
apiPref
==
CAP_VFW
)
{
// TODO: fix this backend
std
::
cout
<<
"SKIP test: Video for Windows backend not open files"
<<
std
::
endl
;
return
;
}
else
if
(
apiPref
==
CAP_GSTREAMER
)
{
// TODO: fix this backend
std
::
cout
<<
"SKIP test: Gstreamer failed with read critical error"
<<
std
::
endl
;
return
;
}
VideoCapture
cap
(
video_file
,
apiPref
);
if
(
!
cap
.
isOpened
())
{
std
::
cout
<<
"SKIP test: Can't open video: "
<<
video_file
<<
std
::
endl
;
...
...
@@ -171,8 +203,8 @@ public:
else
std
::
cout
<<
"FPS is not available. SKIP check."
<<
std
::
endl
;
int
count_prop
=
(
int
)
cap
.
get
(
CAP_PROP_FRAME_COUNT
)
;
int
count_prop
=
0
;
count_prop
=
(
int
)
cap
.
get
(
CAP_PROP_FRAME_COUNT
);
// mpg file reports 5.08 sec * 24 fps => property returns 122 frames
// but actual number of frames returned is 125
if
(
ext
!=
"mpg"
)
...
...
@@ -203,7 +235,7 @@ public:
}
};
typedef
tuple
<
string
,
string
,
float
>
Ext_Fourcc_PSNR
;
typedef
tuple
<
string
,
string
,
float
,
int
>
Ext_Fourcc_PSNR
;
typedef
tuple
<
Size
,
Ext_Fourcc_PSNR
>
Size_Ext_Fourcc_PSNR
;
class
Videoio_Synthetic
:
public
Videoio_Test_Base
,
public
testing
::
TestWithParam
<
Size_Ext_Fourcc_PSNR
>
...
...
@@ -224,11 +256,27 @@ public:
video_file
=
cv
::
tempfile
((
fourccToString
(
fourcc
)
+
"."
+
ext
).
c_str
());
frame_count
=
100
;
fps
=
25.
;
apiPref
=
get
<
3
>
(
param
);
}
void
SetUp
()
{
if
(
apiPref
==
CAP_AVFOUNDATION
)
{
// TODO: fix this backend
std
::
cout
<<
"SKIP test: AVFoundation backend can not write video"
<<
std
::
endl
;
return
;
}
else
if
(
apiPref
==
CAP_VFW
)
{
// TODO: fix this backend
std
::
cout
<<
"SKIP test: Video for Windows backend not open files"
<<
std
::
endl
;
return
;
}
else
if
(
apiPref
==
CAP_GSTREAMER
)
{
// TODO: fix this backend
std
::
cout
<<
"SKIP test: Gstreamer failed with write critical error"
<<
std
::
endl
;
return
;
}
Mat
img
(
frame_size
,
CV_8UC3
);
VideoWriter
writer
(
video_file
,
fourcc
,
fps
,
frame_size
,
true
);
VideoWriter
writer
(
video_file
,
apiPref
,
fourcc
,
fps
,
frame_size
,
true
);
ASSERT_TRUE
(
writer
.
isOpened
());
for
(
int
i
=
0
;
i
<
frame_count
;
++
i
)
{
...
...
@@ -262,9 +310,9 @@ public:
expected_frame_count
.
end
+=
1
;
// Hack! Some GStreamer encoding pipelines drop last frame in the video
#ifdef HAVE_GSTREAMER
expected_frame_count
.
start
-=
1
;
#endif
//
#ifdef HAVE_GSTREAMER
//
expected_frame_count.start -= 1;
//
#endif
ASSERT_LE
(
expected_frame_count
.
start
,
actual
);
ASSERT_GE
(
expected_frame_count
.
end
,
actual
);
...
...
@@ -275,14 +323,41 @@ public:
//==================================================================================================
int
backend_params
[]
=
{
#ifdef HAVE_QUICKTIME
CAP_QT
,
#endif
#ifdef HAVE_AVFOUNDATION
CAP_AVFOUNDATION
,
#endif
#ifdef HAVE_MSMF
CAP_MSMF
,
#endif
#ifdef HAVE_VFW
CAP_VFW
,
#endif
#ifdef HAVE_GSTREAMER
CAP_GSTREAMER
,
#endif
#ifdef HAVE_FFMPEG
CAP_FFMPEG
,
#endif
CAP_OPENCV_MJPEG
// CAP_INTEL_MFX
};
string
bunny_params
[]
=
{
#ifdef HAVE_VIDEO_INPUT
string
(
"
avi
"
),
string
(
"
wmv
"
),
string
(
"mov"
),
string
(
"mp4"
),
string
(
"mpg"
),
string
(
"
wmv
"
),
string
(
"
avi
"
),
#endif
string
(
"mjpg.avi"
)
};
...
...
@@ -292,49 +367,93 @@ TEST_P(Videoio_Bunny, read_position) { doTest(); }
TEST_P
(
Videoio_Bunny
,
frame_count
)
{
doFrameCountTest
();
}
INSTANTIATE_TEST_CASE_P
(
videoio
,
Videoio_Bunny
,
testing
::
ValuesIn
(
bunny_params
));
testing
::
Combine
(
testing
::
ValuesIn
(
bunny_params
),
testing
::
ValuesIn
(
backend_params
)));
//==================================================================================================
inline
Ext_Fourcc_PSNR
makeParam
(
const
char
*
ext
,
const
char
*
fourcc
,
float
psnr
)
inline
Ext_Fourcc_PSNR
makeParam
(
const
char
*
ext
,
const
char
*
fourcc
,
float
psnr
,
int
apipref
)
{
return
make_tuple
(
string
(
ext
),
string
(
fourcc
),
(
float
)
psnr
);
return
make_tuple
(
string
(
ext
),
string
(
fourcc
),
(
float
)
psnr
,
(
int
)
apipref
);
}
Ext_Fourcc_PSNR
synthetic_params
[]
=
{
#if defined(HAVE_VIDEO_INPUT) && defined(HAVE_VIDEO_OUTPUT) && !defined(__APPLE__)
#ifdef HAVE_MSMF
#if !defined(_M_ARM)
makeParam
(
"wmv"
,
"WMV1"
,
30.
f
,
CAP_MSMF
),
makeParam
(
"wmv"
,
"WMV2"
,
30.
f
,
CAP_MSMF
),
#endif
makeParam
(
"wmv"
,
"WMV3"
,
30.
f
,
CAP_MSMF
),
makeParam
(
"wmv"
,
"WVC1"
,
30.
f
,
CAP_MSMF
),
makeParam
(
"avi"
,
"H264"
,
30.
f
,
CAP_MSMF
),
makeParam
(
"avi"
,
"MJPG"
,
30.
f
,
CAP_MSMF
),
#endif
#ifdef HAVE_VFW
#if !defined(_M_ARM)
makeParam
(
"wmv"
,
"WMV1"
,
30.
f
),
makeParam
(
"wmv"
,
"WMV2"
,
30.
f
),
makeParam
(
"wmv"
,
"WMV1"
,
30.
f
,
CAP_VFW
),
makeParam
(
"wmv"
,
"WMV2"
,
30.
f
,
CAP_VFW
),
#endif
makeParam
(
"wmv"
,
"WMV3"
,
30.
f
,
CAP_VFW
),
makeParam
(
"wmv"
,
"WVC1"
,
30.
f
,
CAP_VFW
),
makeParam
(
"avi"
,
"H264"
,
30.
f
,
CAP_VFW
),
makeParam
(
"avi"
,
"MJPG"
,
30.
f
,
CAP_VFW
),
#endif
#ifdef HAVE_QUICKTIME
makeParam
(
"mov"
,
"mp4v"
,
30.
f
,
CAP_QT
),
makeParam
(
"avi"
,
"XVID"
,
30.
f
,
CAP_QT
),
makeParam
(
"avi"
,
"MPEG"
,
30.
f
,
CAP_QT
),
makeParam
(
"avi"
,
"IYUV"
,
30.
f
,
CAP_QT
),
makeParam
(
"avi"
,
"MJPG"
,
30.
f
,
CAP_QT
),
makeParam
(
"mkv"
,
"XVID"
,
30.
f
,
CAP_QT
),
makeParam
(
"mkv"
,
"MPEG"
,
30.
f
,
CAP_QT
),
makeParam
(
"mkv"
,
"MJPG"
,
30.
f
,
CAP_QT
),
#endif
#ifdef HAVE_AVFOUNDATION
makeParam
(
"mov"
,
"mp4v"
,
30.
f
,
CAP_AVFOUNDATION
),
makeParam
(
"avi"
,
"XVID"
,
30.
f
,
CAP_AVFOUNDATION
),
makeParam
(
"avi"
,
"MPEG"
,
30.
f
,
CAP_AVFOUNDATION
),
makeParam
(
"avi"
,
"IYUV"
,
30.
f
,
CAP_AVFOUNDATION
),
makeParam
(
"avi"
,
"MJPG"
,
30.
f
,
CAP_AVFOUNDATION
),
makeParam
(
"mkv"
,
"XVID"
,
30.
f
,
CAP_AVFOUNDATION
),
makeParam
(
"mkv"
,
"MPEG"
,
30.
f
,
CAP_AVFOUNDATION
),
makeParam
(
"mkv"
,
"MJPG"
,
30.
f
,
CAP_AVFOUNDATION
),
#endif
makeParam
(
"wmv"
,
"WMV3"
,
30.
f
),
makeParam
(
"avi"
,
"H264"
,
30.
f
),
makeParam
(
"wmv"
,
"WVC1"
,
30.
f
),
#else // HAVE_MSMF
makeParam
(
"avi"
,
"XVID"
,
30.
f
),
makeParam
(
"avi"
,
"MPEG"
,
30.
f
),
makeParam
(
"avi"
,
"IYUV"
,
30.
f
),
makeParam
(
"mkv"
,
"XVID"
,
30.
f
),
makeParam
(
"mkv"
,
"MPEG"
,
30.
f
),
makeParam
(
"mkv"
,
"MJPG"
,
30.
f
),
#ifndef HAVE_GSTREAMER
makeParam
(
"mov"
,
"mp4v"
,
30.
f
),
#ifdef HAVE_FFMPEG
makeParam
(
"avi"
,
"XVID"
,
30.
f
,
CAP_FFMPEG
),
makeParam
(
"avi"
,
"MPEG"
,
30.
f
,
CAP_FFMPEG
),
makeParam
(
"avi"
,
"IYUV"
,
30.
f
,
CAP_FFMPEG
),
makeParam
(
"avi"
,
"MJPG"
,
30.
f
,
CAP_FFMPEG
),
makeParam
(
"mkv"
,
"XVID"
,
30.
f
,
CAP_FFMPEG
),
makeParam
(
"mkv"
,
"MPEG"
,
30.
f
,
CAP_FFMPEG
),
makeParam
(
"mkv"
,
"MJPG"
,
30.
f
,
CAP_FFMPEG
),
#endif
#endif // HAVE_MSMF
#ifdef HAVE_GSTREAMER
makeParam
(
"avi"
,
"XVID"
,
30.
f
,
CAP_GSTREAMER
),
makeParam
(
"avi"
,
"MPEG"
,
30.
f
,
CAP_GSTREAMER
),
makeParam
(
"avi"
,
"IYUV"
,
30.
f
,
CAP_GSTREAMER
),
makeParam
(
"avi"
,
"MJPG"
,
30.
f
,
CAP_GSTREAMER
),
makeParam
(
"avi"
,
"H264"
,
30.
f
,
CAP_GSTREAMER
),
#endif // HAVE_VIDEO_INPUT && HAVE_VIDEO_OUTPUT ...
makeParam
(
"mkv"
,
"XVID"
,
30.
f
,
CAP_GSTREAMER
),
makeParam
(
"mkv"
,
"MPEG"
,
30.
f
,
CAP_GSTREAMER
),
makeParam
(
"mkv"
,
"MJPG"
,
30.
f
,
CAP_GSTREAMER
),
makeParam
(
"avi"
,
"MJPG"
,
30.
f
)
#endif
makeParam
(
"avi"
,
"MJPG"
,
30.
f
,
CAP_OPENCV_MJPEG
),
};
Size
all_sizes
[]
=
{
Size
(
640
,
480
),
Size
(
976
,
768
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录