Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
e6b125e3
Commit
e6b125e3
authored
Aug 31, 2014
by
Clément Bœsch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avutil/pixelutils: add small buffers tests
parent
6abeaf27
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
87 additions
and
19 deletions
+87
-19
pixelutils.c
libavutil/pixelutils.c
+75
-19
pixelutils
tests/ref/fate/pixelutils
+12
-0
No files found.
libavutil/pixelutils.c
View file @
e6b125e3
...
...
@@ -91,6 +91,30 @@ av_pixelutils_sad_fn av_pixelutils_get_sad_fn(int w_bits, int h_bits, int aligne
#define W2 640
#define H2 480
static
int
run_single_test
(
const
char
*
test
,
const
uint8_t
*
block1
,
ptrdiff_t
stride1
,
const
uint8_t
*
block2
,
ptrdiff_t
stride2
,
int
align
,
int
n
)
{
int
out
,
ref
;
av_pixelutils_sad_fn
f_ref
=
sad_c
[
n
-
1
];
av_pixelutils_sad_fn
f_out
=
av_pixelutils_get_sad_fn
(
n
,
n
,
align
,
NULL
);
switch
(
align
)
{
case
0
:
block1
++
;
block2
++
;
break
;
case
1
:
block2
++
;
break
;
case
2
:
break
;
}
out
=
f_out
(
block1
,
stride1
,
block2
,
stride2
);
ref
=
f_ref
(
block1
,
stride1
,
block2
,
stride2
);
printf
(
"[%s] [%c%c] SAD [%s] %dx%d=%d ref=%d
\n
"
,
out
==
ref
?
"OK"
:
"FAIL"
,
align
?
'A'
:
'U'
,
align
==
2
?
'A'
:
'U'
,
test
,
1
<<
n
,
1
<<
n
,
out
,
ref
);
return
out
!=
ref
;
}
static
int
run_test
(
const
char
*
test
,
const
uint8_t
*
b1
,
const
uint8_t
*
b2
)
{
...
...
@@ -106,16 +130,9 @@ static int run_test(const char *test,
case
2
:
break
;
}
for
(
i
=
1
;
i
<=
FF_ARRAY_ELEMS
(
sad_c
);
i
++
)
{
av_pixelutils_sad_fn
f_ref
=
sad_c
[
i
-
1
];
av_pixelutils_sad_fn
f_out
=
av_pixelutils_get_sad_fn
(
i
,
i
,
a
,
NULL
);
const
int
out
=
f_out
(
block1
,
W1
,
block2
,
W2
);
const
int
ref
=
f_ref
(
block1
,
W1
,
block2
,
W2
);
printf
(
"[%s] [%c%c] SAD [%s] %dx%d=%d ref=%d
\n
"
,
out
==
ref
?
"OK"
:
"FAIL"
,
a
?
'A'
:
'U'
,
a
==
2
?
'A'
:
'U'
,
test
,
1
<<
i
,
1
<<
i
,
out
,
ref
);
if
(
out
!=
ref
)
ret
=
1
;
int
r
=
run_single_test
(
test
,
b1
,
W1
,
b2
,
W2
,
a
,
i
);
if
(
r
)
ret
=
r
;
}
}
return
ret
;
...
...
@@ -123,7 +140,7 @@ static int run_test(const char *test,
int
main
(
void
)
{
int
i
,
ret
;
int
i
,
align
,
ret
;
uint8_t
*
buf1
=
av_malloc
(
W1
*
H1
);
uint8_t
*
buf2
=
av_malloc
(
W2
*
H2
);
uint32_t
state
=
0
;
...
...
@@ -134,27 +151,66 @@ int main(void)
goto
end
;
}
for
(
i
=
0
;
i
<
W1
*
H1
;
i
++
)
{
state
=
state
*
1664525
+
1013904223
;
buf1
[
i
]
=
state
>>
24
;
}
for
(
i
=
0
;
i
<
W2
*
H2
;
i
++
)
{
state
=
state
*
1664525
+
1013904223
;
buf2
[
i
]
=
state
>>
24
;
}
#define RANDOM_INIT(buf, size) do { \
int k; \
for (k = 0; k < size; k++) { \
state = state * 1664525 + 1013904223; \
buf[k] = state>>24; \
} \
} while (0)
/* Normal test with different strides */
RANDOM_INIT
(
buf1
,
W1
*
H1
);
RANDOM_INIT
(
buf2
,
W2
*
H2
);
ret
=
run_test
(
"random"
,
buf1
,
buf2
);
if
(
ret
<
0
)
goto
end
;
/* Check for maximum SAD */
memset
(
buf1
,
0xff
,
W1
*
H1
);
memset
(
buf2
,
0x00
,
W2
*
H2
);
ret
=
run_test
(
"max"
,
buf1
,
buf2
);
if
(
ret
<
0
)
goto
end
;
/* Check for minimum SAD */
memset
(
buf1
,
0x90
,
W1
*
H1
);
memset
(
buf2
,
0x90
,
W2
*
H2
);
ret
=
run_test
(
"min"
,
buf1
,
buf2
);
if
(
ret
<
0
)
goto
end
;
/* Exact buffer sizes, to check for overreads */
for
(
i
=
1
;
i
<=
4
;
i
++
)
{
for
(
align
=
0
;
align
<
3
;
align
++
)
{
int
size1
,
size2
;
av_freep
(
&
buf1
);
av_freep
(
&
buf2
);
size1
=
size2
=
1
<<
(
i
<<
1
);
switch
(
align
)
{
case
0
:
size1
++
;
size2
++
;
break
;
case
1
:
size2
++
;
break
;
case
2
:
break
;
}
buf1
=
av_malloc
(
size1
);
buf2
=
av_malloc
(
size2
);
if
(
!
buf1
||
!
buf2
)
{
fprintf
(
stderr
,
"malloc failure
\n
"
);
ret
=
1
;
goto
end
;
}
RANDOM_INIT
(
buf1
,
size1
);
RANDOM_INIT
(
buf2
,
size2
);
ret
=
run_single_test
(
"small"
,
buf1
,
1
<<
i
,
buf2
,
1
<<
i
,
align
,
i
);
if
(
ret
<
0
)
goto
end
;
}
}
end:
av_free
(
buf1
);
av_free
(
buf2
);
...
...
tests/ref/fate/pixelutils
View file @
e6b125e3
...
...
@@ -34,3 +34,15 @@
[OK] [AA] SAD [min] 4x4=0 ref=0
[OK] [AA] SAD [min] 8x8=0 ref=0
[OK] [AA] SAD [min] 16x16=0 ref=0
[OK] [UU] SAD [small] 2x2=400 ref=400
[OK] [AU] SAD [small] 2x2=384 ref=384
[OK] [AA] SAD [small] 2x2=409 ref=409
[OK] [UU] SAD [small] 4x4=1144 ref=1144
[OK] [AU] SAD [small] 4x4=1156 ref=1156
[OK] [AA] SAD [small] 4x4=1086 ref=1086
[OK] [UU] SAD [small] 8x8=6510 ref=6510
[OK] [AU] SAD [small] 8x8=5755 ref=5755
[OK] [AA] SAD [small] 8x8=6156 ref=6156
[OK] [UU] SAD [small] 16x16=19490 ref=19490
[OK] [AU] SAD [small] 16x16=21037 ref=21037
[OK] [AA] SAD [small] 16x16=22986 ref=22986
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