heyfluke / libyuv

Automatically exported from code.google.com/p/libyuv

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Regression in libyuv::I420Psnr on Android ARM64

GoogleCodeExporter opened this issue · comments

What steps will reproduce the problem?
1. Get a WebRTC checkout using 'fetch webrtc'
2. Create a local branch and apply https://codereview.webrtc.org/1399453002:
git checkout master
git checkout -b test
git cl patch 1399453002
3. Compile for ARM64:
export GYP_CROSSCOMPILE=1
export GYP_DEFINES="OS=android target_arch=arm64 component=static_library 
dcheck_always_on=1 fastbuild=1"
gclient runhooks
ninja -C out/Release common_video_unittests_apk

4. Run common_video_unittests on Android with an ARM64 device, e.g. Nexus 9:
webrtc/build/android/test_runner.py gtest -s common_video_unittests --verbose 
--release 
--isolate_file_path=webrtc/common_video/common_video_unittests.isolate 
--gtest_filter=TestLibYuv.ConvertTest

What is the expected output? What do you see instead?

The test should pass. Instead if fails like this:

run_tests_on_device(HT4ADJT02469)  [ RUN      ] TestLibYuv.ConvertTest
I   24.629s run_tests_on_device(HT4ADJT02469)  
I   24.629s run_tests_on_device(HT4ADJT02469)  Convert #0 I420 <-> I420 
I   24.629s run_tests_on_device(HT4ADJT02469)  
I   24.629s run_tests_on_device(HT4ADJT02469)  Convert #1 I420 <-> RGB24
I   24.629s run_tests_on_device(HT4ADJT02469)  
../../webrtc/common_video/libyuv/libyuv_unittest.cc:181: Failure
I   24.629s run_tests_on_device(HT4ADJT02469)  Expected: (ceil(psnr)) > (44), 
actual: 15 vs 44
I   24.629s run_tests_on_device(HT4ADJT02469)  
I   24.629s run_tests_on_device(HT4ADJT02469)  Convert #2 I420 <-> UYVY
I   24.629s run_tests_on_device(HT4ADJT02469)  
I   24.629s run_tests_on_device(HT4ADJT02469)  Convert #3 I420 <-> YV12
I   24.629s run_tests_on_device(HT4ADJT02469)  
I   24.629s run_tests_on_device(HT4ADJT02469)  Convert #4 I420 <-> YUY2
I   24.629s run_tests_on_device(HT4ADJT02469)  
I   24.630s run_tests_on_device(HT4ADJT02469)  Convert #4 I420 <-> RGB565
I   24.630s run_tests_on_device(HT4ADJT02469)  
../../webrtc/common_video/libyuv/libyuv_unittest.cc:249: Failure
I   24.630s run_tests_on_device(HT4ADJT02469)  Expected: (ceil(psnr)) > (40), 
actual: 15 vs 40
I   24.630s run_tests_on_device(HT4ADJT02469)  
I   24.630s run_tests_on_device(HT4ADJT02469)  Convert #5 I420 <-> ARGB8888
I   24.630s run_tests_on_device(HT4ADJT02469)  
../../webrtc/common_video/libyuv/libyuv_unittest.cc:266: Failure
I   24.630s run_tests_on_device(HT4ADJT02469)  Expected: (ceil(psnr)) > (42), 
actual: 15 vs 42
I   24.630s run_tests_on_device(HT4ADJT02469)  [  FAILED  ] 
TestLibYuv.ConvertTest (35 ms)

(from 
http://build.chromium.org/p/tryserver.webrtc/builders/android_arm64_rel/builds/2
867/steps/common_video_unittests/logs/stdio)

I also reproduced with my local checkout using the instructions above.

What version of the product are you using? On what operating system?
Android ARM64

Please provide any additional information below.

I'm reverting the libyuv roll in Chrome 
https://codereview.chromium.org/1389233002 for now, to unblock WebRTC from 
rolling forward.

Original issue reported on code.google.com by kjellan...@google.com on 8 Oct 2015 at 5:51

Instructions above didnt work on a new linux machine.  Looks like first step 
should be
1. fetch webrtc_android

but I did get the webrtc tests to run... without the patch, they pass.

Is it possible to adapt this to run libyuv_unittest?


Original comment by fbarch...@chromium.org on 10 Oct 2015 at 1:54

The old code used hard coded constants for BT.601

// TODO(fbarchard): replace movi with constants from struct.
#define YUVTORGB_SETUP                                                         \
    "ld1r       {v24.8h}, [%[kUVBiasBGR]], #2  \n"                             \
    "ld1r       {v25.8h}, [%[kUVBiasBGR]], #2  \n"                             \
    "ld1r       {v26.8h}, [%[kUVBiasBGR]]      \n"                             \
    "ld1r       {v31.4s}, [%[kYToRgb]]         \n"                             \
    "movi       v27.8h, #128                   \n"                             \
    "movi       v28.8h, #102                   \n"                             \
    "movi       v29.8h, #25                    \n"                             \
    "movi       v30.8h, #52                    \n"

If I change back to that, the webrtc test passes.

Original comment by fbarch...@google.com on 11 Oct 2015 at 8:13

fixed in r1507

I   21.805s TimeoutThread-1-for-run_tests_on_device(HT4A2JT03762)  [host]> 
/usr/local/google/home/fbarchard/src/webrtc/src/third_party/android_tools/sdk/pl
atform-tools/ad
b -s HT4A2JT03762 shell '( pm clear org.chromium.native_test );echo %$?'
I   49.414s run_tests_on_device(HT4A2JT03762)  >>ScopedMainEntryLogger
I   49.414s run_tests_on_device(HT4A2JT03762)  Note: Google Test filter = 
TestLibYuv.ConvertTest
I   49.414s run_tests_on_device(HT4A2JT03762)  [==========] Running 1 test from 
1 test case.
I   49.414s run_tests_on_device(HT4A2JT03762)  [----------] Global test 
environment set-up.
I   49.414s run_tests_on_device(HT4A2JT03762)  [----------] 1 test from 
TestLibYuv
I   49.414s run_tests_on_device(HT4A2JT03762)  [ RUN      ] 
TestLibYuv.ConvertTest
I   49.415s run_tests_on_device(HT4A2JT03762)
I   49.415s run_tests_on_device(HT4A2JT03762)  Convert #0 I420 <-> I420
I   49.415s run_tests_on_device(HT4A2JT03762)
I   49.415s run_tests_on_device(HT4A2JT03762)  Convert #1 I420 <-> RGB24
I   49.415s run_tests_on_device(HT4A2JT03762)
I   49.415s run_tests_on_device(HT4A2JT03762)  Convert #2 I420 <-> UYVY
I   49.415s run_tests_on_device(HT4A2JT03762)
I   49.415s run_tests_on_device(HT4A2JT03762)  Convert #3 I420 <-> YV12
I   49.415s run_tests_on_device(HT4A2JT03762)
I   49.415s run_tests_on_device(HT4A2JT03762)  Convert #4 I420 <-> YUY2
I   49.415s run_tests_on_device(HT4A2JT03762)
I   49.415s run_tests_on_device(HT4A2JT03762)  Convert #4 I420 <-> RGB565
I   49.415s run_tests_on_device(HT4A2JT03762)
I   49.415s run_tests_on_device(HT4A2JT03762)  Convert #5 I420 <-> ARGB8888
I   49.415s run_tests_on_device(HT4A2JT03762)  [       OK ] 
TestLibYuv.ConvertTest (38 ms)
I   49.415s run_tests_on_device(HT4A2JT03762)  [----------] 1 test from 
TestLibYuv (38 ms total)
I   49.415s run_tests_on_device(HT4A2JT03762)
I   49.416s run_tests_on_device(HT4A2JT03762)  [----------] Global test 
environment tear-down
I   49.416s run_tests_on_device(HT4A2JT03762)  [==========] 1 test from 1 test 
case ran. (38 ms total)
I   49.416s run_tests_on_device(HT4A2JT03762)  [  PASSED  ] 1 test.
I   49.416s run_tests_on_device(HT4A2JT03762)
I   49.416s run_tests_on_device(HT4A2JT03762)  OK (1 tests)
I   49.416s run_tests_on_device(HT4A2JT03762)  Finished running tests on this 
device.
I   49.450s Main  FINISHED TRY #1/3
I   49.450s Main  All tests completed.
C   49.451s Main  
********************************************************************************
C   49.451s Main  Summary
C   49.451s Main  
********************************************************************************
C   49.451s Main  [==========] 1 test ran.
C   49.451s Main  [  PASSED  ] 1 test.
C   49.451s Main  
********************************************************************************

Original comment by fbarch...@chromium.org on 12 Oct 2015 at 7:13

  • Changed state: Started

Original comment by fbarch...@chromium.org on 12 Oct 2015 at 9:42

  • Changed state: Fixed