diff --git a/README.chromium b/README.chromium index b04d6fd7c..5d6d1ab99 100644 --- a/README.chromium +++ b/README.chromium @@ -1,6 +1,6 @@ Name: libyuv URL: http://code.google.com/p/libyuv/ -Version: 1218 +Version: 1219 License: BSD License File: LICENSE diff --git a/include/libyuv/version.h b/include/libyuv/version.h index e7f689416..0da2a63ba 100644 --- a/include/libyuv/version.h +++ b/include/libyuv/version.h @@ -11,6 +11,6 @@ #ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT #define INCLUDE_LIBYUV_VERSION_H_ -#define LIBYUV_VERSION 1218 +#define LIBYUV_VERSION 1219 #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT diff --git a/source/planar_functions.cc b/source/planar_functions.cc index 0343afcf7..c17c8ad51 100644 --- a/source/planar_functions.cc +++ b/source/planar_functions.cc @@ -1096,6 +1096,11 @@ void SetPlane(uint8* dst_y, int dst_stride_y, int y; uint32 v32 = value | (value << 8) | (value << 16) | (value << 24); void (*SetRow)(uint8* dst, uint32 value, int pix) = SetRow_C; + if (height < 0) { + height = -height; + dst_y = dst_y + (height - 1) * dst_stride_y; + dst_stride_y = -dst_stride_y; + } // Coalesce rows. if (dst_stride_y == width) { width *= height; @@ -1155,10 +1160,15 @@ int ARGBRect(uint8* dst_argb, int dst_stride_argb, int width, int height, uint32 value) { if (!dst_argb || - width <= 0 || height <= 0 || + width <= 0 || height == 0 || dst_x < 0 || dst_y < 0) { return -1; } + if (height < 0) { + height = -height; + dst_argb = dst_argb + (height - 1) * dst_stride_argb; + dst_stride_argb = -dst_stride_argb; + } dst_argb += dst_y * dst_stride_argb + dst_x * 4; // Coalesce rows. if (dst_stride_argb == width * 4) { diff --git a/unit_test/planar_test.cc b/unit_test/planar_test.cc index 9063655b3..17d3290ac 100644 --- a/unit_test/planar_test.cc +++ b/unit_test/planar_test.cc @@ -2149,8 +2149,6 @@ static int TestARGBRect(int width, int height, int benchmark_iterations, return max_diff; } -// TODO(fbarchard): Add invert support and test. - TEST_F(libyuvTest, ARGBRect_Any) { int max_diff = TestARGBRect(benchmark_width_ - 1, benchmark_height_, benchmark_iterations_, +1, 0, 4); @@ -2163,6 +2161,12 @@ TEST_F(libyuvTest, ARGBRect_Unaligned) { EXPECT_EQ(0, max_diff); } +TEST_F(libyuvTest, ARGBRect_Invert) { + int max_diff = TestARGBRect(benchmark_width_, benchmark_height_, + benchmark_iterations_, -1, 0, 4); + EXPECT_EQ(0, max_diff); +} + TEST_F(libyuvTest, ARGBRect_Opt) { int max_diff = TestARGBRect(benchmark_width_, benchmark_height_, benchmark_iterations_, +1, 0, 4); @@ -2181,11 +2185,16 @@ TEST_F(libyuvTest, SetPlane_Unaligned) { EXPECT_EQ(0, max_diff); } +TEST_F(libyuvTest, SetPlane_Invert) { + int max_diff = TestARGBRect(benchmark_width_, benchmark_height_, + benchmark_iterations_, -1, 0, 1); + EXPECT_EQ(0, max_diff); +} + TEST_F(libyuvTest, SetPlane_Opt) { int max_diff = TestARGBRect(benchmark_width_, benchmark_height_, benchmark_iterations_, +1, 0, 1); EXPECT_EQ(0, max_diff); } - } // namespace libyuv