31 #define randomize_buffers(buf, size) \ 34 for (j = 0; j < size; j+=4) \ 35 AV_WN32(buf + j, rnd()); \ 40 {12,16,12}, {16,16,16}, {20,23,25}, {32,18,48}, {8,128,16}, {128,128,128}
43 #define MAX_STRIDE 128 44 #define MAX_HEIGHT 128 62 for (i = 0; i < 6; i ++) {
87 int lumStride,
int chromStride,
int srcStride);
93 for (i = 0; i < 6; i ++) {
96 memset(dst_u_0, 0, (
MAX_STRIDE/2) * MAX_HEIGHT);
97 memset(dst_u_1, 0, (
MAX_STRIDE/2) * MAX_HEIGHT);
98 memset(dst_v_0, 0, (
MAX_STRIDE/2) * MAX_HEIGHT);
99 memset(dst_v_1, 0, (
MAX_STRIDE/2) * MAX_HEIGHT);
105 if (memcmp(dst_y_0, dst_y_1,
MAX_STRIDE * MAX_HEIGHT) ||
106 memcmp(dst_u_0, dst_u_1, (
MAX_STRIDE/2) * MAX_HEIGHT) ||
107 memcmp(dst_v_0, dst_v_1, (
MAX_STRIDE/2) * MAX_HEIGHT))
129 uint8_t *,
int,
int,
int,
int,
int);
135 for (
int i = 0;
i <= 16;
i++) {
139 int h = 1 + (
rnd() % (MAX_HEIGHT-2));
141 int src0_offset = 0, src0_stride =
MAX_STRIDE;
142 int src1_offset = 0, src1_stride =
MAX_STRIDE;
143 int dst_offset = 0, dst_stride = 2 *
MAX_STRIDE;
150 src0_offset = (h-1)*src0_stride;
151 src0_stride = -src0_stride;
154 src1_offset = (h-1)*src1_stride;
155 src1_stride = -src1_stride;
158 dst_offset = (h-1)*dst_stride;
159 dst_stride = -dst_stride;
162 call_ref(src0 + src0_offset, src1 + src1_offset, dst0 + dst_offset,
163 w, h, src0_stride, src1_stride, dst_stride);
164 call_new(src0 + src0_offset, src1 + src1_offset, dst1 + dst_offset,
165 w, h, src0_stride, src1_stride, dst_stride);
169 2 * w + 2, h + 1,
"dst");
172 bench_new(src0, src1, dst1, 127, MAX_HEIGHT,
178 bench_new(src0_buf, src1_buf, dst1_buf, 128, MAX_HEIGHT,
188 report(
"shuffle_bytes_2103");
191 report(
"shuffle_bytes_0321");
194 report(
"shuffle_bytes_1230");
197 report(
"shuffle_bytes_3012");
200 report(
"shuffle_bytes_3210");
206 report(
"interleave_bytes");
Memory handling functions.
void(* shuffle_bytes_3012)(const uint8_t *src, uint8_t *dst, int src_size)
static void check_shuffle_bytes(void *func, const char *report)
#define LOCAL_ALIGNED_16(t, v,...)
void(* shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size)
#define LOCAL_ALIGNED_32(t, v,...)
void(* shuffle_bytes_3210)(const uint8_t *src, uint8_t *dst, int src_size)
void(* shuffle_bytes_1230)(const uint8_t *src, uint8_t *dst, int src_size)
#define checkasm_check(prefix,...)
#define randomize_buffers(buf, size)
void checkasm_check_sw_rgb(void)
void(* interleaveBytes)(const uint8_t *src1, const uint8_t *src2, uint8_t *dst, int width, int height, int src1Stride, int src2Stride, int dstStride)
static void check_uyvy_to_422p(void)
av_cold void ff_sws_rgb2rgb_init(void)
static const uint8_t width[]
#define declare_func_emms(cpu_flags, ret,...)
#define AV_CPU_FLAG_MMX
standard MMX
int(* func)(AVBPrint *dst, const char *in, const char *arg)
#define check_func(func,...)
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)
static const struct @323 planes[]
static void check_interleave_bytes(void)
void(* shuffle_bytes_0321)(const uint8_t *src, uint8_t *dst, int src_size)
common internal and external API header