mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2025-12-07 01:06:46 +08:00
Over unittest crash on divide overflow.
BUG=299 TESTED=try R=wuwang@google.com Review URL: https://webrtc-codereview.appspot.com/6469004 git-svn-id: http://libyuv.googlecode.com/svn/trunk@933 16f28f9a-4ce2-e073-06de-1de4eb20be90
This commit is contained in:
parent
9fd689e5bf
commit
48ab3cf3f4
@ -1,6 +1,6 @@
|
|||||||
Name: libyuv
|
Name: libyuv
|
||||||
URL: http://code.google.com/p/libyuv/
|
URL: http://code.google.com/p/libyuv/
|
||||||
Version: 932
|
Version: 933
|
||||||
License: BSD
|
License: BSD
|
||||||
License File: LICENSE
|
License File: LICENSE
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,6 @@
|
|||||||
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
|
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
|
||||||
#define INCLUDE_LIBYUV_VERSION_H_
|
#define INCLUDE_LIBYUV_VERSION_H_
|
||||||
|
|
||||||
#define LIBYUV_VERSION 932
|
#define LIBYUV_VERSION 933
|
||||||
|
|
||||||
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
|
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
|
||||||
|
|||||||
@ -19,10 +19,16 @@
|
|||||||
namespace libyuv {
|
namespace libyuv {
|
||||||
|
|
||||||
TEST_F(libyuvTest, TestFixedDiv) {
|
TEST_F(libyuvTest, TestFixedDiv) {
|
||||||
int num[256];
|
int num[1280];
|
||||||
int div[256];
|
int div[1280];
|
||||||
int result_opt[256];
|
int result_opt[1280];
|
||||||
int result_c[256];
|
int result_c[1280];
|
||||||
|
|
||||||
|
EXPECT_EQ(0x10000, libyuv::FixedDiv(1, 1));
|
||||||
|
EXPECT_EQ(0x7fff0000, libyuv::FixedDiv(0x7fff, 1));
|
||||||
|
// TODO(fbarchard): Avoid the following that throw exceptions.
|
||||||
|
// EXPECT_EQ(0x10000, libyuv::FixedDiv(0x10000, 1));
|
||||||
|
// EXPECT_EQ(0x80000000, libyuv::FixedDiv(0x8000, 1));
|
||||||
|
|
||||||
EXPECT_EQ(0x20000, libyuv::FixedDiv(640 * 2, 640));
|
EXPECT_EQ(0x20000, libyuv::FixedDiv(640 * 2, 640));
|
||||||
EXPECT_EQ(0x30000, libyuv::FixedDiv(640 * 3, 640));
|
EXPECT_EQ(0x30000, libyuv::FixedDiv(640 * 3, 640));
|
||||||
@ -60,32 +66,33 @@ TEST_F(libyuvTest, TestFixedDiv) {
|
|||||||
srandom(time(NULL));
|
srandom(time(NULL));
|
||||||
MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num));
|
MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num));
|
||||||
MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div));
|
MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div));
|
||||||
for (int j = 0; j < 256; ++j) {
|
for (int j = 0; j < 1280; ++j) {
|
||||||
if (div[j] == 0) {
|
if (div[j] == 0) {
|
||||||
div[j] = 1280;
|
div[j] = 1280;
|
||||||
}
|
}
|
||||||
|
num[j] &= 0xffff; // Clamp to avoid divide overflow.
|
||||||
}
|
}
|
||||||
for (int i = 0; i < benchmark_pixels_div256_; ++i) {
|
for (int i = 0; i < benchmark_pixels_div1280_; ++i) {
|
||||||
for (int j = 0; j < 256; ++j) {
|
for (int j = 0; j < 1280; ++j) {
|
||||||
result_opt[j] = libyuv::FixedDiv(num[j], div[j]);
|
result_opt[j] = libyuv::FixedDiv(num[j], div[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int j = 0; j < 256; ++j) {
|
for (int j = 0; j < 1280; ++j) {
|
||||||
result_c[j] = libyuv::FixedDiv_C(num[j], div[j]);
|
result_c[j] = libyuv::FixedDiv_C(num[j], div[j]);
|
||||||
EXPECT_NEAR(result_c[j], result_opt[j], 1);
|
EXPECT_NEAR(result_c[j], result_opt[j], 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(libyuvTest, TestFixedDiv_Opt) {
|
TEST_F(libyuvTest, TestFixedDiv_Opt) {
|
||||||
int num[256];
|
int num[1280];
|
||||||
int div[256];
|
int div[1280];
|
||||||
int result_opt[256];
|
int result_opt[1280];
|
||||||
int result_c[256];
|
int result_c[1280];
|
||||||
|
|
||||||
srandom(time(NULL));
|
srandom(time(NULL));
|
||||||
MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num));
|
MemRandomize(reinterpret_cast<uint8*>(&num[0]), sizeof(num));
|
||||||
MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div));
|
MemRandomize(reinterpret_cast<uint8*>(&div[0]), sizeof(div));
|
||||||
for (int j = 0; j < 256; ++j) {
|
for (int j = 0; j < 1280; ++j) {
|
||||||
num[j] &= 4095; // Make numerator smaller.
|
num[j] &= 4095; // Make numerator smaller.
|
||||||
div[j] &= 4095; // Make divisor smaller.
|
div[j] &= 4095; // Make divisor smaller.
|
||||||
if (div[j] == 0) {
|
if (div[j] == 0) {
|
||||||
@ -94,18 +101,18 @@ TEST_F(libyuvTest, TestFixedDiv_Opt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int has_x86 = TestCpuFlag(kCpuHasX86);
|
int has_x86 = TestCpuFlag(kCpuHasX86);
|
||||||
for (int i = 0; i < benchmark_pixels_div256_; ++i) {
|
for (int i = 0; i < benchmark_pixels_div1280_; ++i) {
|
||||||
if (has_x86) {
|
if (has_x86) {
|
||||||
for (int j = 0; j < 256; ++j) {
|
for (int j = 0; j < 1280; ++j) {
|
||||||
result_opt[j] = libyuv::FixedDiv(num[j], div[j]);
|
result_opt[j] = libyuv::FixedDiv(num[j], div[j]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int j = 0; j < 256; ++j) {
|
for (int j = 0; j < 1280; ++j) {
|
||||||
result_opt[j] = libyuv::FixedDiv_C(num[j], div[j]);
|
result_opt[j] = libyuv::FixedDiv_C(num[j], div[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int j = 0; j < 256; ++j) {
|
for (int j = 0; j < 1280; ++j) {
|
||||||
result_c[j] = libyuv::FixedDiv_C(num[j], div[j]);
|
result_c[j] = libyuv::FixedDiv_C(num[j], div[j]);
|
||||||
EXPECT_NEAR(result_c[j], result_opt[j], 1);
|
EXPECT_NEAR(result_c[j], result_opt[j], 1);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user