Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
b4895dbc
Commit
b4895dbc
authored
Feb 04, 2012
by
Alexander Reshetnikov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
completed tests checking positioning & frame count for videos (C interface); added new test videos
parent
89702dc1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
204 additions
and
85 deletions
+204
-85
test_framecount.cpp
modules/highgui/test/test_framecount.cpp
+83
-0
test_positioning.cpp
modules/highgui/test/test_positioning.cpp
+121
-85
No files found.
modules/highgui/test/test_framecount.cpp
0 → 100644
View file @
b4895dbc
#include "test_precomp.hpp"
#include "opencv2/highgui/highgui.hpp"
using
namespace
cv
;
using
namespace
std
;
class
CV_FramecountTest
:
public
cvtest
::
BaseTest
{
public
:
void
run
(
int
);
};
void
CV_FramecountTest
::
run
(
int
)
{
const
int
time_sec
=
5
,
fps
=
25
;
const
string
ext
[]
=
{
"avi"
,
"mov"
,
"mp4"
,
"mpg"
,
"wmv"
};
const
size_t
n
=
sizeof
(
ext
)
/
sizeof
(
ext
[
0
]);
const
string
src_dir
=
ts
->
get_data_path
();
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"
\n\n
Source files directory: %s
\n
"
,
(
src_dir
+
"../perf/video/"
).
c_str
());
int
failed
=
0
;
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
{
int
code
=
cvtest
::
TS
::
OK
;
string
file_path
=
src_dir
+
"../perf/video/big_buck_bunny."
+
ext
[
i
];
CvCapture
*
cap
=
cvCreateFileCapture
(
file_path
.
c_str
());
if
(
!
cap
)
{
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"
\n
File information (video %d):
\n\n
Name: big_buck_bunny.%s
\n
FAILED
\n\n
"
,
i
+
1
,
ext
[
i
].
c_str
());
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"Error: cannot read source video file.
\n
"
);
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
failed
++
;
continue
;
}
cvSetCaptureProperty
(
cap
,
CV_CAP_PROP_POS_FRAMES
,
0
);
IplImage
*
frame
;
int
FrameCount
=
-
1
;
do
{
FrameCount
++
;
frame
=
cvQueryFrame
(
cap
);
}
while
(
frame
);
int
framecount
=
(
int
)
cvGetCaptureProperty
(
cap
,
CV_CAP_PROP_FRAME_COUNT
);
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"
\n
File information (video %d):
\n
"
\
"
\n
Name: big_buck_bunny.%s
\n
Actual frame count: %d
\n
"
\
"Frame count computed in the cycle of queries of frames: %d
\n
"
\
"Frame count returned by cvGetCaptureProperty function: %d
\n
"
,
i
+
1
,
ext
[
i
].
c_str
(),
time_sec
*
fps
,
FrameCount
,
framecount
);
code
=
FrameCount
!=
time_sec
*
fps
?
cvtest
::
TS
::
FAIL_INVALID_OUTPUT
:
FrameCount
!=
framecount
?
cvtest
::
TS
::
FAIL_INVALID_OUTPUT
:
code
;
if
(
code
)
{
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"FAILED
\n
"
);
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"
\n
Error: actual frame count and returned frame count are not matched.
\n
"
);
ts
->
set_failed_test_info
(
code
);
failed
++
;
}
else
{
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"OK
\n
"
);
ts
->
set_failed_test_info
(
ts
->
OK
);
}
cvReleaseImage
(
&
frame
);
cvReleaseCapture
(
&
cap
);
}
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"
\n
Successfull experiments: %d (%d%%)
\n
"
,
n
-
failed
,
(
n
-
failed
)
*
100
/
n
);
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"Failed experiments: %d (%d%%)
\n
"
,
failed
,
failed
*
100
/
n
);
}
TEST
(
HighguiFramecount
,
regression
)
{
CV_FramecountTest
test
;
test
.
safe_run
();}
modules/highgui/test/test_positioning.cpp
View file @
b4895dbc
#include "test_precomp.hpp"
#include "test_precomp.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdio.h>
/* #include <cv.h>
#include <cxcore.h>
#include <iostream>
#include <sstream>
#include <string> */
using
namespace
cv
;
using
namespace
cv
;
using
namespace
std
;
using
namespace
std
;
//ticket #1497
enum
NAVIGATION_METHOD
{
PROGRESSIVE
,
RANDOM
};
#define HIGHGUI_POSITIONING_ERROR_OPEN 0
class
CV_VideoPositioningTest
:
public
cvtest
::
BaseTest
{
public
:
CV_VideoPositioningTest
();
~
CV_VideoPositioningTest
();
virtual
void
run
(
int
)
=
0
;
#define MESSAGE_ERROR_CONTENT "Cannot read source video file."
protected
:
vector
<
int
>
idx
;
void
run_test
(
int
method
);
class
CV_VideoPositioningTest
:
public
cvtest
::
BaseTest
private
:
void
generate_idx_seq
(
CvCapture
*
cap
,
int
method
);
};
class
CV_VideoProgressivePositioningTest
:
public
CV_VideoPositioningTest
{
{
public
:
public
:
void
run
(
int
);
CV_VideoProgressivePositioningTest
::
CV_VideoProgressivePositioningTest
()
:
CV_VideoPositioningTest
()
{};
~
CV_VideoProgressivePositioningTest
();
void
run
(
int
);
};
class
CV_VideoRandomPositioningTest
:
public
CV_VideoPositioningTest
{
public
:
CV_VideoRandomPositioningTest
::
CV_VideoRandomPositioningTest
()
:
CV_VideoPositioningTest
()
{};
~
CV_VideoRandomPositioningTest
();
void
run
(
int
);
};
};
void
CV_VideoPositioningTest
::
run
(
int
)
CV_VideoPositioningTest
::
CV_VideoPositioningTest
()
{}
CV_VideoPositioningTest
::~
CV_VideoPositioningTest
()
{}
CV_VideoProgressivePositioningTest
::~
CV_VideoProgressivePositioningTest
()
{}
CV_VideoRandomPositioningTest
::~
CV_VideoRandomPositioningTest
()
{}
void
CV_VideoPositioningTest
::
generate_idx_seq
(
CvCapture
*
cap
,
int
method
)
{
idx
.
clear
();
int
N
=
(
int
)
cvGetCaptureProperty
(
cap
,
CV_CAP_PROP_FRAME_COUNT
);
switch
(
method
)
{
case
NAVIGATION_METHOD
:
:
PROGRESSIVE
:
{
int
pos
=
1
,
step
=
20
;
do
{
idx
.
push_back
(
pos
);
pos
+=
step
;
}
while
(
pos
<=
N
);
break
;
}
case
NAVIGATION_METHOD
:
:
RANDOM
:
{
RNG
rng
(
N
);
idx
.
clear
();
for
(
int
i
=
0
;
i
<
N
-
1
;
i
++
)
idx
.
push_back
(
rng
.
uniform
(
0
,
N
));
idx
.
push_back
(
N
-
1
);
std
::
swap
(
idx
.
at
(
rng
.
uniform
(
0
,
N
-
1
)),
idx
.
at
(
N
-
1
));
break
;
}
default
:
break
;
}
}
void
CV_VideoPositioningTest
::
run_test
(
int
method
)
{
{
const
string
&
src_dir
=
ts
->
get_data_path
();
const
string
&
src_dir
=
ts
->
get_data_path
();
std
::
cout
<<
src_dir
.
c_str
()
<<
endl
;
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"
\n\n
Source files directory: %s
\n
"
,
(
src_dir
+
"../perf/video/"
).
c_str
())
;
string
file_path
=
"/home/reshetnikov/SVN_Projects/OpenCV/opencv_extra/testdata/perf/video/sample_sorenson.mov"
;
const
string
ext
[]
=
{
"mov"
,
"avi"
,
"mp4"
,
"mpg"
,
"wmv"
}
;
std
::
cout
<<
file_path
.
c_str
()
<<
endl
;
const
int
time_sec
=
5
,
fps
=
25
;
cv
::
VideoCapture
cap
(
file_path
);
size_t
n
=
sizeof
(
ext
)
/
sizeof
(
ext
[
0
]
);
// CvCapture* cap = cvCreateFileCapture(file_path.c_str());
int
failed
=
0
;
if
(
!
cap
.
isOpened
())
{
printf
(
"Error!"
);
return
;
}
std
::
cout
<<
"Frame pos: "
<<
cap
.
get
(
CV_CAP_PROP_POS_FRAMES
)
<<
std
::
endl
;
for
(
size_t
i
=
0
;
i
<
n
;
++
i
)
{
string
file_path
=
src_dir
+
"../perf/video/big_buck_bunny."
+
ext
[
i
];
// IplImage* frame = cvQueryFrame(cap
);
CvCapture
*
cap
=
cvCreateFileCapture
(
file_path
.
c_str
()
);
Mat
frame
;
cap
>>
frame
;
if
(
!
cap
)
{
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"
\n
File information (video %d):
\n\n
Name: big_buck_bunny.%s
\n
FAILED
\n\n
"
,
i
+
1
,
ext
[
i
].
c_str
());
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"Error: cannot read source video file.
\n
"
);
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_TEST_DATA
);
failed
++
;
continue
;
}
/* if (!frame)
cvSetCaptureProperty
(
cap
,
CV_CAP_PROP_POS_FRAMES
,
0
);
{
return;
generate_idx_seq
(
cap
,
method
);
} */
std
::
cout
<<
"Frames number: "
<<
cap
.
get
(
CV_CAP_PROP_FRAME_COUNT
)
<<
std
::
endl
;
int
N
=
idx
.
size
(),
failed_frames
=
0
;
int
step
=
20
;
int
frameCount
=
1
;
while
(
frameCount
<
100
)
{
std
::
cout
<<
"Frame count: "
<<
frameCount
<<
"
\t
Actual frame pos: "
<<
cap
.
get
(
CV_CAP_PROP_POS_FRAMES
)
<<
std
::
endl
;
// Save the frame
bool
flag
=
false
;
std
::
stringstream
ss
;
ss
<<
frameCount
;
std
::
string
filename
=
ss
.
str
()
+
".png"
;
imwrite
(
file_path
,
frame
,
vector
<
int
>
(
1
));
// Advance by step frames
frameCount
+=
step
;
std
::
cout
<<
"cvSetCaptureProperty result: "
<<
cap
.
set
(
CV_CAP_PROP_POS_FRAMES
,
frameCount
)
<<
std
::
endl
;;
// frame = cvQueryFrame(cap);
}
// cvReleaseCapture(&cap);
for
(
int
j
=
0
;
j
<
N
;
++
j
)
cap
.
release
();
{
}
bool
res
=
cvSetCaptureProperty
(
cap
,
CV_CAP_PROP_POS_FRAMES
,
(
double
)
idx
.
at
(
j
));
IplImage
*
frame
=
cvRetrieveFrame
(
cap
);
if
(
!
frame
)
{
if
(
!
flag
)
failed
++
;
flag
=
true
;
if
(
!
failed_frames
)
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"
\n
File information (video %d):
\n\n
Name: big_buck_bunny.%s
\n
FAILED
\n\n
"
,
i
+
1
,
ext
[
i
].
c_str
());
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"Error: cannot read a frame with index %d.
\n
"
,
idx
.
at
(
j
));
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_EXCEPTION
);
failed_frames
++
;
}
if
(
idx
.
at
(
j
)
!=
cvGetCaptureProperty
(
cap
,
CV_CAP_PROP_POS_FRAMES
))
{
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"Iteration: %d
\n
"
\
"Actual pos: %d Returned pos: %d"
,
idx
.
at
(
j
),
cvGetCaptureProperty
(
cap
,
CV_CAP_PROP_POS_FRAMES
));
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"Error: required and returned position are not matched.
\n
"
);
ts
->
set_failed_test_info
(
cvtest
::
TS
::
FAIL_INVALID_OUTPUT
);
}
cvReleaseImage
(
&
frame
);
}
cvReleaseCapture
(
&
cap
);
}
/*
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"
\n
Successfull experiments: %d (%d%%)
\n
"
,
n
-
failed
,
100
*
(
n
-
failed
)
/
n
);
47 NOTES
ts
->
printf
(
cvtest
::
TS
::
LOG
,
"Failed experiments: %d (%d%%)
\n
"
,
failed
,
100
*
failed
/
n
);
48
}
49 Output:
50 Frame pos: 0
51 Frame count: 1 Actual frame pos: -1.84467e+017
52 cvSetCaptureProperty result: 1
53 Frame count: 21 Actual frame pos: -1.84467e+017
54 cvSetCaptureProperty result: 1
55 Frame count: 41 Actual frame pos: -1.84467e+017
56 cvSetCaptureProperty result: 1
57 Frame count: 61 Actual frame pos: -1.84467e+017
58 cvSetCaptureProperty result: 1
59 Frame count: 81 Actual frame pos: -1.84467e+017
60 cvSetCaptureProperty result: 1
61
62 Expected:
63 Frame pos: 0
64 Frame count: 1 Actual frame pos: 1
65 cvSetCaptureProperty result: 1
66 Frame count: 21 Actual frame pos: 21
67 cvSetCaptureProperty result: 1
68 Frame count: 41 Actual frame pos: 41
69 cvSetCaptureProperty result: 1
70 Frame count: 61 Actual frame pos: 61
71 cvSetCaptureProperty result: 1
72 Frame count: 81 Actual frame pos: 81
73 cvSetCaptureProperty result: 1
74
75 In addition, the frame retrieved from cvQueryFrame was not the correct frame
76 */
TEST
(
HighguiPositioning
,
regression
)
{
CV_VideoPositioningTest
test
;
test
.
safe_run
();
}
void
CV_VideoProgressivePositioningTest
::
run
(
int
)
{
run_test
(
NAVIGATION_METHOD
::
PROGRESSIVE
);
}
void
CV_VideoRandomPositioningTest
::
run
(
int
)
{
run_test
(
NAVIGATION_METHOD
::
RANDOM
);
}
TEST
(
HighguiPositioning
,
progressive
)
{
CV_VideoProgressivePositioningTest
test
;
test
.
safe_run
();
}
TEST
(
HighguiPositioning
,
random
)
{
CV_VideoRandomPositioningTest
test
;
test
.
safe_run
();
}
\ No newline at end of file
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