mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-08 01:36:47 +08:00
ubsan friendly unaligned tests
- ubsan complains on unaligned tests when an int16 or int32 is stored unaligned in C. Although current Intel, ARM, Mips and PPC can do unaligned load/store, its not guaranteed and could crash a CPU that doesnt support it. - unaligned tests use offset of 2 or 4, which ubsan accepts. - unittest fills in random buffer with 2 bytes at a time instead of a short. - row common functions for int16 types use 2 shorts instead of 1 int. Bug: libyuv:908, b/203243873 Change-Id: Idf13fa901647d7b0975f1947291caa781999a9bc Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/3229782 Commit-Queue: Frank Barchard <fbarchard@chromium.org> Reviewed-by: Mirko Bonadei <mbonadei@chromium.org>
This commit is contained in:
parent
55b97cb48f
commit
f0cfc1f1c8
@ -2004,19 +2004,13 @@ int RGB24ToJ420(const uint8_t* src_rgb24,
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if defined(HAS_ARGBTOYJROW_SSSE3)
|
||||
if (TestCpuFlag(kCpuHasSSSE3)) {
|
||||
ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
|
||||
if (IS_ALIGNED(width, 16)) {
|
||||
ARGBToYJRow = ARGBToYJRow_SSSE3;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if defined(HAS_ARGBTOUVJROW_SSSE3)
|
||||
#if defined(HAS_ARGBTOYJROW_SSSE3) && defined(HAS_ARGBTOUVJROW_SSSE3)
|
||||
if (TestCpuFlag(kCpuHasSSSE3)) {
|
||||
ARGBToUVJRow = ARGBToUVJRow_Any_SSSE3;
|
||||
ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
|
||||
if (IS_ALIGNED(width, 16)) {
|
||||
ARGBToUVJRow = ARGBToUVJRow_SSSE3;
|
||||
ARGBToYJRow = ARGBToYJRow_SSSE3;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -2353,19 +2347,13 @@ int RAWToJ420(const uint8_t* src_raw,
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if defined(HAS_ARGBTOYJROW_SSSE3)
|
||||
if (TestCpuFlag(kCpuHasSSSE3)) {
|
||||
ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
|
||||
if (IS_ALIGNED(width, 16)) {
|
||||
ARGBToYJRow = ARGBToYJRow_SSSE3;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if defined(HAS_ARGBTOUVJROW_SSSE3)
|
||||
#if defined(HAS_ARGBTOYJROW_SSSE3) && defined(HAS_ARGBTOUVJROW_SSSE3)
|
||||
if (TestCpuFlag(kCpuHasSSSE3)) {
|
||||
ARGBToUVJRow = ARGBToUVJRow_Any_SSSE3;
|
||||
ARGBToYJRow = ARGBToYJRow_Any_SSSE3;
|
||||
if (IS_ALIGNED(width, 16)) {
|
||||
ARGBToUVJRow = ARGBToUVJRow_SSSE3;
|
||||
ARGBToYJRow = ARGBToYJRow_SSSE3;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -342,8 +342,8 @@ void ARGBToRGB565DitherRow_C(const uint8_t* src_argb,
|
||||
uint8_t b1 = clamp255(src_argb[4] + dither1) >> 3;
|
||||
uint8_t g1 = clamp255(src_argb[5] + dither1) >> 2;
|
||||
uint8_t r1 = clamp255(src_argb[6] + dither1) >> 3;
|
||||
WRITEWORD(dst_rgb, b0 | (g0 << 5) | (r0 << 11) | (b1 << 16) | (g1 << 21) |
|
||||
(r1 << 27));
|
||||
*(uint16_t*)(dst_rgb + 0) = b0 | (g0 << 5) | (r0 << 11);
|
||||
*(uint16_t*)(dst_rgb + 2) = b1 | (g1 << 5) | (r1 << 11);
|
||||
dst_rgb += 4;
|
||||
src_argb += 8;
|
||||
}
|
||||
@ -367,8 +367,8 @@ void ARGBToARGB1555Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width) {
|
||||
uint8_t g1 = src_argb[5] >> 3;
|
||||
uint8_t r1 = src_argb[6] >> 3;
|
||||
uint8_t a1 = src_argb[7] >> 7;
|
||||
*(uint32_t*)(dst_rgb) = b0 | (g0 << 5) | (r0 << 10) | (a0 << 15) |
|
||||
(b1 << 16) | (g1 << 21) | (r1 << 26) | (a1 << 31);
|
||||
*(uint16_t*)(dst_rgb + 0) = b0 | (g0 << 5) | (r0 << 10) | (a0 << 15);
|
||||
*(uint16_t*)(dst_rgb + 2) = b1 | (g1 << 5) | (r1 << 10) | (a1 << 15);
|
||||
dst_rgb += 4;
|
||||
src_argb += 8;
|
||||
}
|
||||
@ -392,8 +392,8 @@ void ARGBToARGB4444Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width) {
|
||||
uint8_t g1 = src_argb[5] >> 4;
|
||||
uint8_t r1 = src_argb[6] >> 4;
|
||||
uint8_t a1 = src_argb[7] >> 4;
|
||||
*(uint32_t*)(dst_rgb) = b0 | (g0 << 4) | (r0 << 8) | (a0 << 12) |
|
||||
(b1 << 16) | (g1 << 20) | (r1 << 24) | (a1 << 28);
|
||||
*(uint16_t*)(dst_rgb + 0) = b0 | (g0 << 4) | (r0 << 8) | (a0 << 12);
|
||||
*(uint16_t*)(dst_rgb + 2) = b1 | (g1 << 4) | (r1 << 8) | (a1 << 12);
|
||||
dst_rgb += 4;
|
||||
src_argb += 8;
|
||||
}
|
||||
@ -2279,8 +2279,8 @@ void I422ToARGB4444Row_C(const uint8_t* src_y,
|
||||
b1 = b1 >> 4;
|
||||
g1 = g1 >> 4;
|
||||
r1 = r1 >> 4;
|
||||
*(uint32_t*)(dst_argb4444) = b0 | (g0 << 4) | (r0 << 8) | (b1 << 16) |
|
||||
(g1 << 20) | (r1 << 24) | 0xf000f000;
|
||||
*(uint16_t*)(dst_argb4444 + 0) = b0 | (g0 << 4) | (r0 << 8) | 0xf000;
|
||||
*(uint16_t*)(dst_argb4444 + 2) = b1 | (g1 << 4) | (r1 << 8) | 0xf000;
|
||||
src_y += 2;
|
||||
src_u += 1;
|
||||
src_v += 1;
|
||||
@ -2317,8 +2317,8 @@ void I422ToARGB1555Row_C(const uint8_t* src_y,
|
||||
b1 = b1 >> 3;
|
||||
g1 = g1 >> 3;
|
||||
r1 = r1 >> 3;
|
||||
*(uint32_t*)(dst_argb1555) = b0 | (g0 << 5) | (r0 << 10) | (b1 << 16) |
|
||||
(g1 << 21) | (r1 << 26) | 0x80008000;
|
||||
*(uint16_t*)(dst_argb1555 + 0) = b0 | (g0 << 5) | (r0 << 10) | 0x8000;
|
||||
*(uint16_t*)(dst_argb1555 + 2) = b1 | (g1 << 5) | (r1 << 10) | 0x8000;
|
||||
src_y += 2;
|
||||
src_u += 1;
|
||||
src_v += 1;
|
||||
@ -2355,8 +2355,8 @@ void I422ToRGB565Row_C(const uint8_t* src_y,
|
||||
b1 = b1 >> 3;
|
||||
g1 = g1 >> 2;
|
||||
r1 = r1 >> 3;
|
||||
*(uint32_t*)(dst_rgb565) =
|
||||
b0 | (g0 << 5) | (r0 << 11) | (b1 << 16) | (g1 << 21) | (r1 << 27);
|
||||
*(uint16_t*)(dst_rgb565 + 0) = b0 | (g0 << 5) | (r0 << 11); // for ubsan
|
||||
*(uint16_t*)(dst_rgb565 + 2) = b1 | (g1 << 5) | (r1 << 11);
|
||||
src_y += 2;
|
||||
src_u += 1;
|
||||
src_v += 1;
|
||||
@ -2482,8 +2482,8 @@ void NV12ToRGB565Row_C(const uint8_t* src_y,
|
||||
b1 = b1 >> 3;
|
||||
g1 = g1 >> 2;
|
||||
r1 = r1 >> 3;
|
||||
*(uint32_t*)(dst_rgb565) =
|
||||
b0 | (g0 << 5) | (r0 << 11) | (b1 << 16) | (g1 << 21) | (r1 << 27);
|
||||
*(uint16_t*)(dst_rgb565 + 0) = b0 | (g0 << 5) | (r0 << 11);
|
||||
*(uint16_t*)(dst_rgb565 + 2) = b1 | (g1 << 5) | (r1 << 11);
|
||||
src_y += 2;
|
||||
src_uv += 2;
|
||||
dst_rgb565 += 4; // Advance 2 pixels.
|
||||
|
||||
@ -50,7 +50,7 @@ static void ScalePlaneDown2(int src_width,
|
||||
? ScaleRowDown2_C
|
||||
: (filtering == kFilterLinear ? ScaleRowDown2Linear_C
|
||||
: ScaleRowDown2Box_C);
|
||||
int row_stride = src_stride << 1;
|
||||
int row_stride = src_stride * 2;
|
||||
(void)src_width;
|
||||
(void)src_height;
|
||||
if (!filtering) {
|
||||
@ -162,7 +162,7 @@ static void ScalePlaneDown2_16(int src_width,
|
||||
? ScaleRowDown2_16_C
|
||||
: (filtering == kFilterLinear ? ScaleRowDown2Linear_16_C
|
||||
: ScaleRowDown2Box_16_C);
|
||||
int row_stride = src_stride << 1;
|
||||
int row_stride = src_stride * 2;
|
||||
(void)src_width;
|
||||
(void)src_height;
|
||||
if (!filtering) {
|
||||
@ -222,7 +222,7 @@ static void ScalePlaneDown4(int src_width,
|
||||
void (*ScaleRowDown4)(const uint8_t* src_ptr, ptrdiff_t src_stride,
|
||||
uint8_t* dst_ptr, int dst_width) =
|
||||
filtering ? ScaleRowDown4Box_C : ScaleRowDown4_C;
|
||||
int row_stride = src_stride << 2;
|
||||
int row_stride = src_stride * 4;
|
||||
(void)src_width;
|
||||
(void)src_height;
|
||||
if (!filtering) {
|
||||
@ -298,7 +298,7 @@ static void ScalePlaneDown4_16(int src_width,
|
||||
void (*ScaleRowDown4)(const uint16_t* src_ptr, ptrdiff_t src_stride,
|
||||
uint16_t* dst_ptr, int dst_width) =
|
||||
filtering ? ScaleRowDown4Box_16_C : ScaleRowDown4_16_C;
|
||||
int row_stride = src_stride << 2;
|
||||
int row_stride = src_stride * 4;
|
||||
(void)src_width;
|
||||
(void)src_height;
|
||||
if (!filtering) {
|
||||
|
||||
@ -145,7 +145,7 @@ namespace libyuv {
|
||||
benchmark_width_ + 1, _Any, +, 0, SRC_DEPTH) \
|
||||
TESTPLANARTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \
|
||||
FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, DST_SUBSAMP_Y, \
|
||||
benchmark_width_, _Unaligned, +, 1, SRC_DEPTH) \
|
||||
benchmark_width_, _Unaligned, +, 2, SRC_DEPTH) \
|
||||
TESTPLANARTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \
|
||||
FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, DST_SUBSAMP_Y, \
|
||||
benchmark_width_, _Invert, -, 0, SRC_DEPTH) \
|
||||
@ -279,7 +279,7 @@ TESTPLANARTOP(I412, uint16_t, 2, 1, 1, I444, uint8_t, 1, 1, 1, 12)
|
||||
_Any, +, 0, PN, OFF_U, OFF_V) \
|
||||
TESTAPLANARTOPI(SRC_FMT_PLANAR, PIXEL_STRIDE, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \
|
||||
FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, benchmark_width_, \
|
||||
_Unaligned, +, 1, PN, OFF_U, OFF_V) \
|
||||
_Unaligned, +, 2, PN, OFF_U, OFF_V) \
|
||||
TESTAPLANARTOPI(SRC_FMT_PLANAR, PIXEL_STRIDE, SRC_SUBSAMP_X, SRC_SUBSAMP_Y, \
|
||||
FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, benchmark_width_, _Invert, \
|
||||
-, 0, PN, OFF_U, OFF_V) \
|
||||
@ -394,7 +394,7 @@ int I400ToNV21(const uint8_t* src_y,
|
||||
DST_SUBSAMP_Y, benchmark_width_ + 1, _Any, +, 0, SRC_DEPTH) \
|
||||
TESTPLANARTOBPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, \
|
||||
SRC_SUBSAMP_Y, FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, \
|
||||
DST_SUBSAMP_Y, benchmark_width_, _Unaligned, +, 1, \
|
||||
DST_SUBSAMP_Y, benchmark_width_, _Unaligned, +, 2, \
|
||||
SRC_DEPTH) \
|
||||
TESTPLANARTOBPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, \
|
||||
SRC_SUBSAMP_Y, FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, \
|
||||
@ -502,7 +502,7 @@ TESTPLANARTOBP(I212, uint16_t, 2, 2, 1, P212, uint16_t, 2, 2, 1, 12)
|
||||
SRC_DEPTH) \
|
||||
TESTBIPLANARTOBPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, \
|
||||
SRC_SUBSAMP_Y, FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, \
|
||||
DST_SUBSAMP_Y, benchmark_width_, _Unaligned, +, 1, 1, \
|
||||
DST_SUBSAMP_Y, benchmark_width_, _Unaligned, +, 2, 1, \
|
||||
SRC_DEPTH) \
|
||||
TESTBIPLANARTOBPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, \
|
||||
SRC_SUBSAMP_Y, FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, \
|
||||
@ -614,7 +614,7 @@ TESTBIPLANARTOBP(P216, uint16_t, 2, 2, 1, P416, uint16_t, 2, 1, 1, 12)
|
||||
DST_SUBSAMP_Y, benchmark_width_ + 1, _Any, +, 0, SRC_DEPTH) \
|
||||
TESTBIPLANARTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, \
|
||||
SRC_SUBSAMP_Y, FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, \
|
||||
DST_SUBSAMP_Y, benchmark_width_, _Unaligned, +, 1, \
|
||||
DST_SUBSAMP_Y, benchmark_width_, _Unaligned, +, 2, \
|
||||
SRC_DEPTH) \
|
||||
TESTBIPLANARTOPI(SRC_FMT_PLANAR, SRC_T, SRC_BPC, SRC_SUBSAMP_X, \
|
||||
SRC_SUBSAMP_Y, FMT_PLANAR, DST_T, DST_BPC, DST_SUBSAMP_X, \
|
||||
@ -710,7 +710,7 @@ TESTBIPLANARTOP(NV21, uint8_t, 1, 2, 2, I420, uint8_t, 1, 2, 2, 8)
|
||||
TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_ + 1, _Any, +, 0) \
|
||||
TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 1) \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 4) \
|
||||
TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Invert, -, 0) \
|
||||
TESTPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
@ -866,7 +866,7 @@ TESTPLANARTOB(I444, 1, 1, ARGB, 4, 4, 1)
|
||||
TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_ + 1, _Any, +, 0, 0) \
|
||||
TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 1, 0) \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 2, 0) \
|
||||
TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Invert, -, 0, 0) \
|
||||
TESTQPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
@ -1072,7 +1072,7 @@ TESTQPLANARTOB(I444Alpha, 1, 1, ARGB, 4, 4, 1)
|
||||
TESTBIPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
|
||||
benchmark_width_ + 1, _Any, +, 0) \
|
||||
TESTBIPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
|
||||
benchmark_width_, _Unaligned, +, 1) \
|
||||
benchmark_width_, _Unaligned, +, 2) \
|
||||
TESTBIPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
|
||||
benchmark_width_, _Invert, -, 0) \
|
||||
TESTBIPLANARTOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, FMT_C, BPP_B, \
|
||||
@ -1175,7 +1175,7 @@ TESTBIPLANARTOB(NV12, 2, 2, RGB565, RGB565, 2)
|
||||
TESTATOPLANARI(FMT_A, BPP_A, YALIGN, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||
benchmark_width_ + 1, _Any, +, 0) \
|
||||
TESTATOPLANARI(FMT_A, BPP_A, YALIGN, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||
benchmark_width_, _Unaligned, +, 1) \
|
||||
benchmark_width_, _Unaligned, +, 2) \
|
||||
TESTATOPLANARI(FMT_A, BPP_A, YALIGN, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||
benchmark_width_, _Invert, -, 0) \
|
||||
TESTATOPLANARI(FMT_A, BPP_A, YALIGN, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||
@ -1263,7 +1263,7 @@ TESTATOPLANAR(YUY2, 2, 1, I422, 2, 1)
|
||||
TESTATOBIPLANARI(FMT_A, SUB_A, BPP_A, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||
benchmark_width_ + 1, _Any, +, 0) \
|
||||
TESTATOBIPLANARI(FMT_A, SUB_A, BPP_A, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||
benchmark_width_, _Unaligned, +, 1) \
|
||||
benchmark_width_, _Unaligned, +, 2) \
|
||||
TESTATOBIPLANARI(FMT_A, SUB_A, BPP_A, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||
benchmark_width_, _Invert, -, 0) \
|
||||
TESTATOBIPLANARI(FMT_A, SUB_A, BPP_A, FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, \
|
||||
@ -1358,7 +1358,7 @@ TESTATOBIPLANAR(AYUV, 1, 4, NV21, 2, 2)
|
||||
TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
|
||||
STRIDE_B, HEIGHT_B, benchmark_width_ + 1, _Any, +, 0) \
|
||||
TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
|
||||
STRIDE_B, HEIGHT_B, benchmark_width_, _Unaligned, +, 1) \
|
||||
STRIDE_B, HEIGHT_B, benchmark_width_, _Unaligned, +, 4) \
|
||||
TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
|
||||
STRIDE_B, HEIGHT_B, benchmark_width_, _Invert, -, 0) \
|
||||
TESTATOBI(FMT_A, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, FMT_B, TYPE_B, EPP_B, \
|
||||
@ -1516,7 +1516,7 @@ TESTATOB(AB64, uint16_t, 4, 4, 1, AR64, uint16_t, 4, 4, 1)
|
||||
TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
|
||||
HEIGHT_B, benchmark_width_ + 1, _Any, +, 0) \
|
||||
TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
|
||||
HEIGHT_B, benchmark_width_, _Unaligned, +, 1) \
|
||||
HEIGHT_B, benchmark_width_, _Unaligned, +, 2) \
|
||||
TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
|
||||
HEIGHT_B, benchmark_width_, _Invert, -, 0) \
|
||||
TESTATOBDI(FMT_A, BPP_A, STRIDE_A, HEIGHT_A, FMT_B, BPP_B, STRIDE_B, \
|
||||
@ -1576,7 +1576,7 @@ TESTATOBD(ARGB, 4, 4, 1, RGB565, 2, 2, 1)
|
||||
TESTENDI(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, benchmark_width_ + 1, \
|
||||
_Any, +, 0) \
|
||||
TESTENDI(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, benchmark_width_, \
|
||||
_Unaligned, +, 1) \
|
||||
_Unaligned, +, 2) \
|
||||
TESTENDI(FMT_ATOB, TYPE_A, EPP_A, STRIDE_A, HEIGHT_A, benchmark_width_, \
|
||||
_Opt, +, 0)
|
||||
#else
|
||||
@ -2807,7 +2807,7 @@ TEST_F(LibYUVConvertTest, TestDither) {
|
||||
TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_ + 1, _Any, +, 0, FMT_C, BPP_C) \
|
||||
TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 1, FMT_C, BPP_C) \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 2, FMT_C, BPP_C) \
|
||||
TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Invert, -, 0, FMT_C, BPP_C) \
|
||||
TESTPLANARTOBID(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
@ -2933,7 +2933,7 @@ TESTPTOB(TestUYVYToNV12, UYVYToI420, UYVYToNV12)
|
||||
TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
benchmark_width_ + 1, _Any, +, 0, FMT_C, BPP_C) \
|
||||
TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
benchmark_width_, _Unaligned, +, 1, FMT_C, BPP_C) \
|
||||
benchmark_width_, _Unaligned, +, 2, FMT_C, BPP_C) \
|
||||
TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
benchmark_width_, _Invert, -, 0, FMT_C, BPP_C) \
|
||||
TESTPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
@ -3086,7 +3086,7 @@ TESTPLANARTOE(I444, 1, 1, ABGR, 1, 4, ARGB, 4)
|
||||
TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
benchmark_width_ + 1, _Any, +, 0, FMT_C, BPP_C, 0) \
|
||||
TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
benchmark_width_, _Unaligned, +, 1, FMT_C, BPP_C, 0) \
|
||||
benchmark_width_, _Unaligned, +, 2, FMT_C, BPP_C, 0) \
|
||||
TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
benchmark_width_, _Invert, -, 0, FMT_C, BPP_C, 0) \
|
||||
TESTQPLANARTOEI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, SUB_B, BPP_B, \
|
||||
@ -3183,7 +3183,7 @@ TESTQPLANARTOE(I444Alpha, 1, 1, ABGR, 1, 4, ARGB, 4)
|
||||
TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, \
|
||||
benchmark_width_ + 1, _Any, +, 0, FMT_C, BPP_C) \
|
||||
TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, benchmark_width_, \
|
||||
_Unaligned, +, 1, FMT_C, BPP_C) \
|
||||
_Unaligned, +, 4, FMT_C, BPP_C) \
|
||||
TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, benchmark_width_, \
|
||||
_Invert, -, 0, FMT_C, BPP_C) \
|
||||
TESTPLANETOEI(FMT_A, SUB_A, BPP_A, FMT_B, SUB_B, BPP_B, benchmark_width_, \
|
||||
@ -3388,7 +3388,7 @@ TEST_F(LibYUVConvertTest, ABGRToAR30Row_Opt) {
|
||||
TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, BPP_B, \
|
||||
ALIGN, YALIGN, benchmark_width_ + 1, _Any, +, 0, 0) \
|
||||
TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, BPP_B, \
|
||||
ALIGN, YALIGN, benchmark_width_, _Unaligned, +, 1, 1) \
|
||||
ALIGN, YALIGN, benchmark_width_, _Unaligned, +, 4, 4) \
|
||||
TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, BPP_B, \
|
||||
ALIGN, YALIGN, benchmark_width_, _Invert, -, 0, 0) \
|
||||
TESTPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_MASK, FMT_B, BPP_B, \
|
||||
@ -3501,7 +3501,7 @@ TESTPLANAR16TOB(I012, 2, 2, 0xfff, AR30, 4, 4, 1)
|
||||
TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_ + 1, _Any, +, 0, 0, S_DEPTH) \
|
||||
TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 1, 0, S_DEPTH) \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 2, 0, S_DEPTH) \
|
||||
TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Invert, -, 0, 0, S_DEPTH) \
|
||||
TESTQPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
@ -3713,7 +3713,7 @@ TESTQPLANAR16TOB(V410Alpha, 1, 1, ABGR, 4, 4, 1, 10)
|
||||
TESTBIPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_ + 1, _Any, +, 0, 0, S_DEPTH) \
|
||||
TESTBIPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 1, 1, S_DEPTH) \
|
||||
YALIGN, benchmark_width_, _Unaligned, +, 4, 4, S_DEPTH) \
|
||||
TESTBIPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
YALIGN, benchmark_width_, _Invert, -, 0, 0, S_DEPTH) \
|
||||
TESTBIPLANAR16TOBI(FMT_PLANAR, SUBSAMP_X, SUBSAMP_Y, FMT_B, BPP_B, ALIGN, \
|
||||
|
||||
@ -3138,13 +3138,13 @@ TEST_F(LibYUVPlanarTest, SplitXRGBPlane_Opt) {
|
||||
#define TESTQPLANARTOP(FUNC, STYPE, DTYPE, DEPTH) \
|
||||
TESTQPLANARTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_ + 1, _Any, +, 0) \
|
||||
TESTQPLANARTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_, _Unaligned, +, \
|
||||
1) \
|
||||
2) \
|
||||
TESTQPLANARTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_, _Invert, -, 0) \
|
||||
TESTQPLANARTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_, _Opt, +, 0) \
|
||||
TESTQPLANAROTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_ + 1, _Any, +, \
|
||||
0) \
|
||||
TESTQPLANAROTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_, _Unaligned, +, \
|
||||
1) \
|
||||
2) \
|
||||
TESTQPLANAROTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_, _Invert, -, 0) \
|
||||
TESTQPLANAROTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_, _Opt, +, 0)
|
||||
|
||||
@ -3197,7 +3197,7 @@ TESTQPLANARTOP(MergeARGB16To8, uint16_t, uint8_t, 16)
|
||||
#define TESTTPLANARTOP(FUNC, STYPE, DTYPE, DEPTH) \
|
||||
TESTTPLANARTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_ + 1, _Any, +, 0) \
|
||||
TESTTPLANARTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_, _Unaligned, +, \
|
||||
1) \
|
||||
2) \
|
||||
TESTTPLANARTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_, _Invert, -, 0) \
|
||||
TESTTPLANARTOPI(FUNC, STYPE, DTYPE, DEPTH, benchmark_width_, _Opt, +, 0)
|
||||
|
||||
|
||||
@ -111,10 +111,13 @@ inline int fastrand() {
|
||||
return static_cast<int>((fastrand_seed >> 16) & 0xffff);
|
||||
}
|
||||
|
||||
// ubsan fails if dst is unaligned unless we use uint8
|
||||
static inline void MemRandomize(uint8_t* dst, int64_t len) {
|
||||
int64_t i;
|
||||
for (i = 0; i < len - 1; i += 2) {
|
||||
*reinterpret_cast<uint16_t*>(dst) = fastrand();
|
||||
int r = fastrand();
|
||||
dst[0] = static_cast<uint8_t>(r);
|
||||
dst[1] = static_cast<uint8_t>(r >> 8);
|
||||
dst += 2;
|
||||
}
|
||||
for (; i < len; ++i) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user