NV21ToARGB for Arm
GoogleCodeExporter opened this issue · comments
On Arm, the NV12ToARGB uses a matrix that assumes 0's for U contribution to Red
and V contribution to Blue. Whereas the Intel version and C code does the full
matrix, multiplying by 0. So changing the matrix on Arm doesnt allow
NV21ToARGB.
The NV12ToARGB function can be passed a matrix that when passed NV21 (VU
instead of UV), produces BGR instead of RGB.
If NV12ToABGR were called with this matrix and NV21, it would produce ARGB.
Original issue reported on code.google.com by fbarch...@chromium.org
on 6 Oct 2015 at 6:16
Another approach is implement READNV21 and support NV21ToARGB.
To implement ABGR, swap U/V for any yuv function, use a matrix that swaps the
contributions, and the existing functions can output ABGR.
Original comment by fbarch...@chromium.org
on 6 Oct 2015 at 9:42
Intel version benchmarked:
set LIBYUV_WIDTH=1280
set LIBYUV_HEIGHT=720
set LIBYUV_REPEAT=9999
set LIBYUV_FLAGS=-1
out\release\libyuv_unittest --gtest_catch_exceptions=0
--gtest_filter=*NV??ToARGB_Opt | sortms
Was
NV12ToARGB_Opt (4545 ms)
NV21ToARGB_Opt (4245 ms)
Now
NV12ToARGB_Opt (4401 ms)
NV21ToARGB_Opt (4213 ms)
Original comment by fbarch...@chromium.org
on 7 Oct 2015 at 2:45
- Changed state: Started
Fixed in r1502.
Implemented using READNV21 technique, exposing NV21ToARGB.
Future work:
To implement NV12ToABGR and NV21ToABGR, can pass VU instead of UV and a matrix
with coefficints swapped. Existing low levels can be used.
Normal yuvconstants look like:
UB 0
UG VG
0 VR
Swapped yuvconstants look like:
VR 0
VG UG
0 UB
Original comment by fbarch...@chromium.org
on 7 Oct 2015 at 5:52
- Changed state: Fixed