FFmpeg
tests
checkasm
sw_rgb.c
Go to the documentation of this file.
1
/*
2
*
3
* This file is part of FFmpeg.
4
*
5
* FFmpeg is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
9
*
10
* FFmpeg is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License along
16
* with FFmpeg; if not, write to the Free Software Foundation, Inc.,
17
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
*/
19
20
#include <string.h>
21
22
#include "
libavutil/common.h
"
23
#include "
libavutil/intreadwrite.h
"
24
#include "
libavutil/mem.h
"
25
26
#include "
libswscale/rgb2rgb.h
"
27
28
#include "
checkasm.h
"
29
30
#define randomize_buffers(buf, size) \
31
do { \
32
int j; \
33
for (j = 0; j < size; j+=4) \
34
AV_WN32(buf + j, rnd()); \
35
} while (0)
36
37
static
const
uint8_t
width
[] = {12, 16, 20, 32, 36, 128};
38
static
const
struct
{
uint8_t
w
,
h
,
s
;}
planes
[] = {
39
{12,16,12}, {16,16,16}, {20,23,25}, {32,18,48}, {8,128,16}, {128,128,128}
40
};
41
42
#define MAX_STRIDE 128
43
#define MAX_HEIGHT 128
44
45
static
void
check_shuffle_bytes
(
void
*
func
,
const
char
*
report
)
46
{
47
int
i
;
48
LOCAL_ALIGNED_32
(
uint8_t
,
src0
, [
MAX_STRIDE
]);
49
LOCAL_ALIGNED_32
(
uint8_t
,
src1
, [
MAX_STRIDE
]);
50
LOCAL_ALIGNED_32
(
uint8_t
, dst0, [
MAX_STRIDE
]);
51
LOCAL_ALIGNED_32
(
uint8_t
, dst1, [
MAX_STRIDE
]);
52
53
declare_func_emms
(
AV_CPU_FLAG_MMX
,
void
,
const
uint8_t
*
src
,
uint8_t
*dst,
int
src_size);
54
55
memset(dst0, 0,
MAX_STRIDE
);
56
memset(dst1, 0,
MAX_STRIDE
);
57
randomize_buffers
(
src0
,
MAX_STRIDE
);
58
memcpy(
src1
,
src0
,
MAX_STRIDE
);
59
60
if
(
check_func
(
func
,
"%s"
,
report
)) {
61
for
(
i
= 0;
i
< 6;
i
++) {
62
call_ref
(
src0
, dst0,
width
[
i
]);
63
call_new
(
src1
, dst1,
width
[
i
]);
64
if
(memcmp(dst0, dst1,
MAX_STRIDE
))
65
fail
();
66
}
67
bench_new
(
src0
, dst0,
width
[5]);
68
}
69
}
70
71
static
void
check_uyvy_to_422p
(
void
)
72
{
73
int
i
;
74
75
LOCAL_ALIGNED_32
(
uint8_t
,
src0
, [
MAX_STRIDE
*
MAX_HEIGHT
* 2]);
76
LOCAL_ALIGNED_32
(
uint8_t
,
src1
, [
MAX_STRIDE
*
MAX_HEIGHT
* 2]);
77
LOCAL_ALIGNED_32
(
uint8_t
, dst_y_0, [
MAX_STRIDE
*
MAX_HEIGHT
]);
78
LOCAL_ALIGNED_32
(
uint8_t
, dst_y_1, [
MAX_STRIDE
*
MAX_HEIGHT
]);
79
LOCAL_ALIGNED_32
(
uint8_t
, dst_u_0, [(
MAX_STRIDE
/2) *
MAX_HEIGHT
]);
80
LOCAL_ALIGNED_32
(
uint8_t
, dst_u_1, [(
MAX_STRIDE
/2) *
MAX_HEIGHT
]);
81
LOCAL_ALIGNED_32
(
uint8_t
, dst_v_0, [(
MAX_STRIDE
/2) *
MAX_HEIGHT
]);
82
LOCAL_ALIGNED_32
(
uint8_t
, dst_v_1, [(
MAX_STRIDE
/2) *
MAX_HEIGHT
]);
83
84
declare_func_emms
(
AV_CPU_FLAG_MMX
,
void
,
uint8_t
*ydst,
uint8_t
*udst,
uint8_t
*vdst,
85
const
uint8_t
*
src
,
int
width
,
int
height
,
86
int
lumStride,
int
chromStride,
int
srcStride);
87
88
randomize_buffers
(
src0
,
MAX_STRIDE
*
MAX_HEIGHT
* 2);
89
memcpy(
src1
,
src0
,
MAX_STRIDE
*
MAX_HEIGHT
* 2);
90
91
if
(
check_func
(
uyvytoyuv422
,
"uyvytoyuv422"
)) {
92
for
(
i
= 0;
i
< 6;
i
++) {
93
memset(dst_y_0, 0,
MAX_STRIDE
*
MAX_HEIGHT
);
94
memset(dst_y_1, 0,
MAX_STRIDE
*
MAX_HEIGHT
);
95
memset(dst_u_0, 0, (
MAX_STRIDE
/2) *
MAX_HEIGHT
);
96
memset(dst_u_1, 0, (
MAX_STRIDE
/2) *
MAX_HEIGHT
);
97
memset(dst_v_0, 0, (
MAX_STRIDE
/2) *
MAX_HEIGHT
);
98
memset(dst_v_1, 0, (
MAX_STRIDE
/2) *
MAX_HEIGHT
);
99
100
call_ref
(dst_y_0, dst_u_0, dst_v_0,
src0
,
planes
[
i
].
w
,
planes
[
i
].
h
,
101
MAX_STRIDE
,
MAX_STRIDE
/ 2,
planes
[
i
].
s
);
102
call_new
(dst_y_1, dst_u_1, dst_v_1,
src1
,
planes
[
i
].
w
,
planes
[
i
].
h
,
103
MAX_STRIDE
,
MAX_STRIDE
/ 2,
planes
[
i
].
s
);
104
if
(memcmp(dst_y_0, dst_y_1,
MAX_STRIDE
*
MAX_HEIGHT
) ||
105
memcmp(dst_u_0, dst_u_1, (
MAX_STRIDE
/2) *
MAX_HEIGHT
) ||
106
memcmp(dst_v_0, dst_v_1, (
MAX_STRIDE
/2) *
MAX_HEIGHT
))
107
fail
();
108
}
109
bench_new
(dst_y_1, dst_u_1, dst_v_1,
src1
,
planes
[5].
w
,
planes
[5].
h
,
110
MAX_STRIDE
,
MAX_STRIDE
/ 2,
planes
[5].
s
);
111
}
112
}
113
114
void
checkasm_check_sw_rgb
(
void
)
115
{
116
ff_sws_rgb2rgb_init
();
117
118
check_shuffle_bytes
(
shuffle_bytes_2103
,
"shuffle_bytes_2103"
);
119
report
(
"shuffle_bytes_2103"
);
120
121
check_shuffle_bytes
(
shuffle_bytes_0321
,
"shuffle_bytes_0321"
);
122
report
(
"shuffle_bytes_0321"
);
123
124
check_shuffle_bytes
(
shuffle_bytes_1230
,
"shuffle_bytes_1230"
);
125
report
(
"shuffle_bytes_1230"
);
126
127
check_shuffle_bytes
(
shuffle_bytes_3012
,
"shuffle_bytes_3012"
);
128
report
(
"shuffle_bytes_3012"
);
129
130
check_shuffle_bytes
(
shuffle_bytes_3210
,
"shuffle_bytes_3210"
);
131
report
(
"shuffle_bytes_3210"
);
132
133
check_uyvy_to_422p
();
134
report
(
"uyvytoyuv422"
);
135
}
func
int(* func)(AVBPrint *dst, const char *in, const char *arg)
Definition:
jacosubdec.c:67
declare_func_emms
#define declare_func_emms(cpu_flags, ret,...)
Definition:
checkasm.h:117
shuffle_bytes_3012
void(* shuffle_bytes_3012)(const uint8_t *src, uint8_t *dst, int src_size)
Definition:
rgb2rgb.c:57
MAX_STRIDE
#define MAX_STRIDE
Definition:
sw_rgb.c:42
h
uint8_t h
Definition:
sw_rgb.c:38
check_func
#define check_func(func,...)
Definition:
checkasm.h:111
shuffle_bytes_3210
void(* shuffle_bytes_3210)(const uint8_t *src, uint8_t *dst, int src_size)
Definition:
rgb2rgb.c:58
call_ref
#define call_ref(...)
Definition:
checkasm.h:126
check_shuffle_bytes
static void check_shuffle_bytes(void *func, const char *report)
Definition:
sw_rgb.c:45
s
uint8_t s
Definition:
sw_rgb.c:38
planes
static const struct @315 planes[]
fail
#define fail()
Definition:
checkasm.h:120
checkasm.h
src
#define src
Definition:
vp8dsp.c:254
randomize_buffers
#define randomize_buffers(buf, size)
Definition:
sw_rgb.c:30
intreadwrite.h
check_uyvy_to_422p
static void check_uyvy_to_422p(void)
Definition:
sw_rgb.c:71
shuffle_bytes_1230
void(* shuffle_bytes_1230)(const uint8_t *src, uint8_t *dst, int src_size)
Definition:
rgb2rgb.c:56
shuffle_bytes_2103
void(* shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size)
Definition:
rgb2rgb.c:55
checkasm_check_sw_rgb
void checkasm_check_sw_rgb(void)
Definition:
sw_rgb.c:114
call_new
#define call_new(...)
Definition:
checkasm.h:193
ff_sws_rgb2rgb_init
av_cold void ff_sws_rgb2rgb_init(void)
Definition:
rgb2rgb.c:137
MAX_HEIGHT
#define MAX_HEIGHT
Definition:
sw_rgb.c:43
shuffle_bytes_0321
void(* shuffle_bytes_0321)(const uint8_t *src, uint8_t *dst, int src_size)
Definition:
rgb2rgb.c:54
height
#define height
src0
#define src0
Definition:
h264pred.c:138
uyvytoyuv422
void(* uyvytoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
Definition:
rgb2rgb.c:107
src1
#define src1
Definition:
h264pred.c:139
report
#define report
Definition:
checkasm.h:123
bench_new
#define bench_new(...)
Definition:
checkasm.h:253
i
#define i(width, name, range_min, range_max)
Definition:
cbs_h2645.c:259
common.h
width
static const uint8_t width[]
Definition:
sw_rgb.c:37
uint8_t
uint8_t
Definition:
audio_convert.c:194
w
uint8_t w
Definition:
sw_rgb.c:38
AV_CPU_FLAG_MMX
#define AV_CPU_FLAG_MMX
standard MMX
Definition:
cpu.h:31
mem.h
LOCAL_ALIGNED_32
#define LOCAL_ALIGNED_32(t, v,...)
Definition:
internal.h:137
rgb2rgb.h
Generated on Wed Aug 24 2022 21:27:31 for FFmpeg by
1.8.17