Commit a927c6fb authored by fbarchard@google.com's avatar fbarchard@google.com

DrMemory fix for Sobel overread.

BUG=262
TESTED=Sobel* unittests re-enabled.

Review URL: https://webrtc-codereview.appspot.com/2273008

git-svn-id: http://libyuv.googlecode.com/svn/trunk@800 16f28f9a-4ce2-e073-06de-1de4eb20be90
parent 47e856c6
Name: libyuv Name: libyuv
URL: http://code.google.com/p/libyuv/ URL: http://code.google.com/p/libyuv/
Version: 798 Version: 800
License: BSD License: BSD
License File: LICENSE License File: LICENSE
......
...@@ -11,6 +11,6 @@ ...@@ -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 798 #define LIBYUV_VERSION 800
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
...@@ -1889,10 +1889,11 @@ int ARGBSobel(const uint8* src_argb, int src_stride_argb, ...@@ -1889,10 +1889,11 @@ int ARGBSobel(const uint8* src_argb, int src_stride_argb,
uint8* row_y2 = row_y1 + kMaxStride / 4; uint8* row_y2 = row_y1 + kMaxStride / 4;
ARGBToBayerRow(src_argb, row_y0, 0x0d090501, width); ARGBToBayerRow(src_argb, row_y0, 0x0d090501, width);
row_y0[-1] = row_y0[0]; row_y0[-1] = row_y0[0];
row_y0[width] = row_y0[width - 1]; memset(row_y0 + width, row_y0[width - 1], 16); // extrude 16 pixels.
ARGBToBayerRow(src_argb, row_y1, 0x0d090501, width); ARGBToBayerRow(src_argb, row_y1, 0x0d090501, width);
row_y1[-1] = row_y1[0]; row_y1[-1] = row_y1[0];
row_y1[width] = row_y1[width - 1]; memset(row_y1 + width, row_y1[width - 1], 16);
memset(row_y2 + width, 0, 16);
for (int y = 0; y < height; ++y) { for (int y = 0; y < height; ++y) {
// Convert next row of ARGB to Y. // Convert next row of ARGB to Y.
...@@ -2003,10 +2004,11 @@ int ARGBSobelXY(const uint8* src_argb, int src_stride_argb, ...@@ -2003,10 +2004,11 @@ int ARGBSobelXY(const uint8* src_argb, int src_stride_argb,
uint8* row_y2 = row_y1 + kMaxStride / 4; uint8* row_y2 = row_y1 + kMaxStride / 4;
ARGBToBayerRow(src_argb, row_y0, 0x0d090501, width); ARGBToBayerRow(src_argb, row_y0, 0x0d090501, width);
row_y0[-1] = row_y0[0]; row_y0[-1] = row_y0[0];
row_y0[width] = row_y0[width - 1]; memset(row_y0 + width, row_y0[width - 1], 16); // extrude 16 pixels.
ARGBToBayerRow(src_argb, row_y1, 0x0d090501, width); ARGBToBayerRow(src_argb, row_y1, 0x0d090501, width);
row_y1[-1] = row_y1[0]; row_y1[-1] = row_y1[0];
row_y1[width] = row_y1[width - 1]; memset(row_y1 + width, row_y1[width - 1], 16);
memset(row_y2 + width, 0, 16);
for (int y = 0; y < height; ++y) { for (int y = 0; y < height; ++y) {
// Convert next row of ARGB to Y. // Convert next row of ARGB to Y.
......
...@@ -1502,8 +1502,7 @@ static int TestSobel(int width, int height, int benchmark_iterations, ...@@ -1502,8 +1502,7 @@ static int TestSobel(int width, int height, int benchmark_iterations,
return max_diff; return max_diff;
} }
// TODO(fbarchard): Fix disabled Sobel unittests which are failing DrMemory. TEST_F(libyuvTest, ARGBSobel_Any) {
TEST_F(libyuvTest, DISABLED_ARGBSobel_Any) {
int max_diff = TestSobel(benchmark_width_ - 1, benchmark_height_, int max_diff = TestSobel(benchmark_width_ - 1, benchmark_height_,
benchmark_iterations_, +1, 0); benchmark_iterations_, +1, 0);
EXPECT_EQ(0, max_diff); EXPECT_EQ(0, max_diff);
...@@ -1515,13 +1514,13 @@ TEST_F(libyuvTest, ARGBSobel_Unaligned) { ...@@ -1515,13 +1514,13 @@ TEST_F(libyuvTest, ARGBSobel_Unaligned) {
EXPECT_EQ(0, max_diff); EXPECT_EQ(0, max_diff);
} }
TEST_F(libyuvTest, DISABLED_ARGBSobel_Invert) { TEST_F(libyuvTest, ARGBSobel_Invert) {
int max_diff = TestSobel(benchmark_width_, benchmark_height_, int max_diff = TestSobel(benchmark_width_, benchmark_height_,
benchmark_iterations_, -1, 0); benchmark_iterations_, -1, 0);
EXPECT_EQ(0, max_diff); EXPECT_EQ(0, max_diff);
} }
TEST_F(libyuvTest, DISABLED_ARGBSobel_Opt) { TEST_F(libyuvTest, ARGBSobel_Opt) {
int max_diff = TestSobel(benchmark_width_, benchmark_height_, int max_diff = TestSobel(benchmark_width_, benchmark_height_,
benchmark_iterations_, +1, 0); benchmark_iterations_, +1, 0);
EXPECT_EQ(0, max_diff); EXPECT_EQ(0, max_diff);
...@@ -1570,8 +1569,7 @@ static int TestSobelXY(int width, int height, int benchmark_iterations, ...@@ -1570,8 +1569,7 @@ static int TestSobelXY(int width, int height, int benchmark_iterations,
return max_diff; return max_diff;
} }
// TODO(fbarchard): Fix disabled SobelXY unittests which are failing DrMemory. TEST_F(libyuvTest, ARGBSobelXY_Any) {
TEST_F(libyuvTest, DISABLED_ARGBSobelXY_Any) {
int max_diff = TestSobelXY(benchmark_width_ - 1, benchmark_height_, int max_diff = TestSobelXY(benchmark_width_ - 1, benchmark_height_,
benchmark_iterations_, +1, 0); benchmark_iterations_, +1, 0);
EXPECT_EQ(0, max_diff); EXPECT_EQ(0, max_diff);
...@@ -1583,13 +1581,13 @@ TEST_F(libyuvTest, ARGBSobelXY_Unaligned) { ...@@ -1583,13 +1581,13 @@ TEST_F(libyuvTest, ARGBSobelXY_Unaligned) {
EXPECT_EQ(0, max_diff); EXPECT_EQ(0, max_diff);
} }
TEST_F(libyuvTest, DISABLED_ARGBSobelXY_Invert) { TEST_F(libyuvTest, ARGBSobelXY_Invert) {
int max_diff = TestSobelXY(benchmark_width_, benchmark_height_, int max_diff = TestSobelXY(benchmark_width_, benchmark_height_,
benchmark_iterations_, -1, 0); benchmark_iterations_, -1, 0);
EXPECT_EQ(0, max_diff); EXPECT_EQ(0, max_diff);
} }
TEST_F(libyuvTest, DISABLED_ARGBSobelXY_Opt) { TEST_F(libyuvTest, ARGBSobelXY_Opt) {
int max_diff = TestSobelXY(benchmark_width_, benchmark_height_, int max_diff = TestSobelXY(benchmark_width_, benchmark_height_,
benchmark_iterations_, +1, 0); benchmark_iterations_, +1, 0);
EXPECT_EQ(0, max_diff); EXPECT_EQ(0, max_diff);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment