Closed GoogleCodeExporter closed 9 years ago
I'm not able to build/test Chrome myself. If you have a unittest, I might
manage that.
But it sounds like a plausible bug with the following parameters
source is odd width
destination height is smaller, so its a scale down.
set LIBYUV_WIDTH=805
set LIBYUV_HEIGHT=678
out\debug\libyuv_unittest.exe --gtest_catch_exceptions=0
--gtest_filter=*libyuvTest.ARGBScaleTo569x480_Bilinear
didn't repro the issue, including under DrMemory.
Original comment by fbarch...@chromium.org
on 18 Mar 2014 at 2:20
May have a repro
change unittests to align to end of buffer and not pad rows.
scale from
set LIBYUV_WIDTH=805
set LIBYUV_HEIGHT=678
drmemory out\debug\libyuv_unittest.exe --gtest_catch_exceptions=0
--gtest_filter=*ARGBScaleTo569x480_Bilinear
~~Dr.M~~ Dr. Memory version 1.6.1
~~Dr.M~~ Running "out\debug\libyuv_unittest.exe --gtest_catch_exceptions=0
--gtest_filter=*ARGBScaleTo569x480_Bilinear"
Note: Google Test filter = *ARGBScaleTo569x480_Bilinear
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from libyuvTest
[ RUN ] libyuvTest.ARGBScaleTo569x480_Bilinear
~~Dr.M~~
~~Dr.M~~ Error #1: UNADDRESSABLE ACCESS: reading 0x00bc5020-0x00bc5021 1 byte(s)
~~Dr.M~~ # 0 InterpolateRow_C
[d:\src\libyuv\trunk\source\row_common.cc:1910]
~~Dr.M~~ # 1 ScaleARGBBilinearDown
[d:\src\libyuv\trunk\source\scale_argb.cc:256]
~~Dr.M~~ # 2 ScaleARGB
[d:\src\libyuv\trunk\source\scale_argb.cc:757]
~~Dr.M~~ # 3 ARGBScale
[d:\src\libyuv\trunk\source\scale_argb.cc:798]
~~Dr.M~~ # 4 libyuv::ARGBTestFilter
[d:\src\libyuv\trunk\unit_test\scale_argb_test.cc:48]
~~Dr.M~~ # 5 libyuv::libyuvTest_ARGBScaleTo569x480_Bilinear_Test::TestBody
[d:\src\libyuv\trunk\unit_test\scale_argb_test.cc:265]
~~Dr.M~~ # 6
testing::internal::HandleExceptionsInMethodIfSupported<testing::Test,void>
[d:\src\libyuv\trunk\testing\gtest\src\gtest.cc:2051]
~~Dr.M~~ # 7 testing::Test::Run
[d:\src\libyuv\trunk\testing\gtest\src\gtest.cc:2068]
~~Dr.M~~ # 8 testing::TestInfo::Run
[d:\src\libyuv\trunk\testing\gtest\src\gtest.cc:2244]
~~Dr.M~~ # 9 testing::TestCase::Run
[d:\src\libyuv\trunk\testing\gtest\src\gtest.cc:2351]
~~Dr.M~~ #10 testing::internal::UnitTestImpl::RunAllTests
[d:\src\libyuv\trunk\testing\gtest\src\gtest.cc:4177]
~~Dr.M~~ #11
testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTe
stImpl,bool> [d:\src\libyuv\trunk\testing\gtest\src\gtest.cc:2051]
~~Dr.M~~ Note: @0:00:02.398 in thread 2612
~~Dr.M~~ Note: instruction: movzx (%ecx,%eax,1) -> %eax
~~Dr.M~~
~~Dr.M~~ Error #2: UNADDRESSABLE ACCESS: reading 0x00bc5021-0x00bc5022 1 byte(s)
Original comment by fbarch...@chromium.org
on 18 Mar 2014 at 8:10
When scaling down a clipped region, the left and right clip coordinates are
aligned to 4 pixel / 16 byte boundaries for efficiency.
The issue was the right edge could go beyond the width after alignment.
The InterpolateRow does not require alignment, but is more efficient doing 16
bytes at a time, so now if the width is odd, the number of pixels will be odd.
Original comment by fbarch...@chromium.org
on 18 Mar 2014 at 9:07
Fixed in r985
Original comment by fbarch...@chromium.org
on 19 Mar 2014 at 1:07
Original issue reported on code.google.com by
jiayl@chromium.org
on 18 Mar 2014 at 12:34