• Frank Barchard's avatar
    ARGBToAR30 use vpmulhuw to replicate fields · 11dd1b95
    Frank Barchard authored
    AR30 is optimized with 3 techniques
    1. vpmulhuw is used to replicate 8 bits to 10 bits.
    2. Two channels are processed at a time.  R and B, and A and G.
    3. vpshufb is used to shift and mask 2 channels of R and B
    
    Red Blue
    With the 8 bit value in the upper bits, vpmulhuw by (1024+4) will produce a 10
    bit value in the low 10 bits of each 16 bit value. This is whats wanted for the
    blue channel. The red needs to be shifted 4 left, so multiply by (1024+4)*16 for
    red.
    
    Alpha Green
    Alpha and Green are already in the high bits so vpand can zero out the other
    bits, keeping just 2 upper bits of alpha and 8 bit green. The same multiplier
    could be used for Green - (1024+4) putting the 10 bit green in the lsb.  Alpha
    would be a simple multiplier to shift it into position.  It wants a gap of 10
    above the green.  Green is 10 bits, so there are 6 bits in the low short.  4
    more are needed, so a multiplier of 4 gets the 2 bits into the upper 16 bits,
    and then a shift of 4 is a multiply of 16, so (4*16) = 64.  Then shift the
    result left 10 to position the A and G channels.
    
    Bug: libyuv:751
    Test: ARGBToAR30_Opt
    Change-Id: Ie4f20dce18203bae7b75acb1fd5232db8a8a4f11
    Reviewed-on: https://chromium-review.googlesource.com/820046
    Commit-Queue: Frank Barchard <fbarchard@chromium.org>
    Reviewed-by: 's avatarCheng Wang <wangcheng@google.com>
    11dd1b95
Name
Last commit
Last update
build_overrides Loading commit data...
docs Loading commit data...
include Loading commit data...
infra/config Loading commit data...
source Loading commit data...
tools_libyuv Loading commit data...
unit_test Loading commit data...
util Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
AUTHORS Loading commit data...
Android.bp Loading commit data...
Android.mk Loading commit data...
BUILD.gn Loading commit data...
CM_linux_packages.cmake Loading commit data...
CMakeLists.txt Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE_THIRD_PARTY Loading commit data...
OWNERS Loading commit data...
PATENTS Loading commit data...
PRESUBMIT.py Loading commit data...
README.chromium Loading commit data...
README.md Loading commit data...
all.gyp Loading commit data...
cleanup_links.py Loading commit data...
codereview.settings Loading commit data...
download_vs_toolchain.py Loading commit data...
gyp_libyuv Loading commit data...
gyp_libyuv.py Loading commit data...
libyuv.gni Loading commit data...
libyuv.gyp Loading commit data...
libyuv.gypi Loading commit data...
libyuv_nacl.gyp Loading commit data...
libyuv_test.gyp Loading commit data...
linux.mk Loading commit data...
public.mk Loading commit data...
pylintrc Loading commit data...
winarm.mk Loading commit data...