1. 08 Jan, 2018 1 commit
  2. 05 Jan, 2018 1 commit
  3. 02 Jan, 2018 1 commit
    • Frank Barchard's avatar
      I420ToI010 for 8 to 10 bit YUV conversion. · 2ed2402f
      Frank Barchard authored
      Convert planar 8 bit formats to planar 16 bit formats.
      
      Includes msan fix for Convert8To16Row_Opt unittest.
      
      I420 is YUV bt.601 8 bits per channel with 420 subsampling.
      I010 is YUV bt.601 10 bits per channel with 420 subsampling.
      I is color space - bt.601.  The function does no color space
       conversion so H420ToI010 is aliased to this function as well.
      0 = 420 subsampling.  The chroma channels are half width / height.
      10 = 10 bits per channel, stored in low 10 bits of 16 bit samples.
      
      For SSSE3 version:
      out/Release/libyuv_unittest --gtest_filter=*LibYUVConvertTest.I420ToI010_Opt --libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=999 --libyuv_flags=-1 --libyuv_cpu_info=-1
      [ RUN      ] LibYUVConvertTest.I420ToI010_Opt
      [       OK ] LibYUVConvertTest.I420ToI010_Opt (276 ms)
      
      Bug: libyuv:751
      Test: LibYUVConvertTest.I420ToI010_Opt
      Change-Id: I072876ee4fd74a2b74f459b628838bc808f9bdd2
      Reviewed-on: https://chromium-review.googlesource.com/846421Reviewed-by: 's avatarMiguel Casas <mcasas@chromium.org>
      Commit-Queue: Frank Barchard <fbarchard@chromium.org>
      2ed2402f
  4. 20 Dec, 2017 1 commit
  5. 19 Dec, 2017 1 commit
  6. 15 Dec, 2017 1 commit
  7. 12 Dec, 2017 3 commits
    • Frank Barchard's avatar
      Add I420ToAR30 10 bit RGB · bb3180ae
      Frank Barchard authored
      For more complete support of AR30 format, add I420ToAR30 allowing
      the new RGB 10 bit format to be used from standard 8 bit I420 format.
      
      Bug: libyuv:751
      Test: I420ToAR30 unittest added
      Change-Id: Ia8b0857447408bd6adab485158ce5f38d6dc2faa
      Reviewed-on: https://chromium-review.googlesource.com/823243Reviewed-by: 's avatarWeiyong Yao <braveyao@chromium.org>
      Commit-Queue: Frank Barchard <fbarchard@chromium.org>
      bb3180ae
    • Frank Barchard's avatar
      ARGBToAR30 SSSE3 use pmulhuw to replicate fields · c3677514
      Frank Barchard authored
      AR30 is optimized with 3 techniques
      1. pmulhuw 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. pshufb is used to shift and mask 2 channels of R and B
      
      Bug: libyuv:751
      Test: ARGBToAR30_Opt
      Change-Id: I4e62d6caa4df7d0ae80395fa911d3c922b6b897b
      Reviewed-on: https://chromium-review.googlesource.com/822520Reviewed-by: 's avatarrichard winterton <rrwinterton@gmail.com>
      Commit-Queue: Frank Barchard <fbarchard@chromium.org>
      c3677514
    • 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
  8. 09 Dec, 2017 1 commit
  9. 07 Dec, 2017 1 commit
  10. 30 Nov, 2017 1 commit
  11. 28 Nov, 2017 1 commit
    • Frank Barchard's avatar
      Convert16To8Row_SSSE3 port from AVX2 · 324fa327
      Frank Barchard authored
      H010ToAR30 uses Convert16To8Row_SSSE3 to convert 10 bit YUV to 8 bit.
      Then standard YUV conversion can be used.  This improves performance
      on low end CPUs.
      Future CL will by pass this conversion allowing for 10 bit YUV source,
      but the function will be useful as a utility for YUV conversions.
      
      Bug: libyuv:559, libyuv:751
      Test: out/Release/libyuv_unittest --gtest_filter=*H010ToAR30* --libyuv_width=1280 --libyuv_height=720 --libyuv_repeat=999 --libyuv_flags=-1 --libyuv_cpu_info=-1
      Change-Id: I9b3ef22d88a5fd861de4cf1900b4c6e8fd24d0af
      Reviewed-on: https://chromium-review.googlesource.com/792334
      Commit-Queue: Frank Barchard <fbarchard@chromium.org>
      Reviewed-by: 's avatarFrank Barchard <fbarchard@chromium.org>
      324fa327
  12. 22 Nov, 2017 1 commit
  13. 21 Nov, 2017 1 commit
  14. 17 Nov, 2017 1 commit
  15. 18 Apr, 2017 1 commit
  16. 17 Apr, 2017 1 commit
  17. 11 Feb, 2017 1 commit
  18. 13 Jan, 2017 1 commit
    • Frank Barchard's avatar
      add Intel Code Analyst markers · a7c87e19
      Frank Barchard authored
      add macros to enable/disable code analyst around blocks of code.
      
      Normally these macros should not be used, but if performance
      details are wanted for intel code, enable them around the code
      and then run via the iaca tool, available on the intel website.
      
      BUG=libyuv:670
      TEST=~/iaca-lin64/bin/iaca.sh -64 out/Release/libyuv_unittest
      R=wangcheng@google.com
      
      Review-Url: https://codereview.chromium.org/2626193002 .
      a7c87e19
  19. 11 Jan, 2017 2 commits
  20. 08 Nov, 2016 1 commit
  21. 12 Oct, 2016 1 commit
  22. 11 Oct, 2016 2 commits
  23. 08 Oct, 2016 1 commit
  24. 24 Aug, 2016 1 commit
    • Frank Barchard's avatar
      NV12 allow NULL for Y · 17d31e6a
      Frank Barchard authored
      The conversion from NV12 and other Bi or Tri planar formats, differs only in the UV handling.  The helper function supports passing a NULL for the dst_y channel indicating you only want to do the UV conversion.
      
      TBR=harryjin@google.com
      TEST=LibYUVConvertTest.NV12ToI420_NullY (601 ms)
      BUG=libyuv:626
      
      Review URL: https://codereview.chromium.org/2276703002 .
      17d31e6a
  25. 13 Jul, 2016 2 commits
    • Frank Barchard's avatar
      3efba30c
    • Frank Barchard's avatar
      Test nv21 layout of Android420ToI420 function. · abcb70f1
      Frank Barchard authored
      to Y,U,V and a pixel stride for U and V.  The pixel stride is expected to be 1 or 2.
      
      [ RUN      ] LibYUVConvertTest.Android420ToI420_1_Any
      [       OK ] LibYUVConvertTest.Android420ToI420_1_Any (253 ms)
      [ RUN      ] LibYUVConvertTest.Android420ToI420_1_Unaligned
      [       OK ] LibYUVConvertTest.Android420ToI420_1_Unaligned (250 ms)
      [ RUN      ] LibYUVConvertTest.Android420ToI420_1_Invert
      [       OK ] LibYUVConvertTest.Android420ToI420_1_Invert (254 ms)
      [ RUN      ] LibYUVConvertTest.Android420ToI420_1_Opt
      [       OK ] LibYUVConvertTest.Android420ToI420_1_Opt (247 ms)
      [ RUN      ] LibYUVConvertTest.Android420ToI420_2_Any
      [       OK ] LibYUVConvertTest.Android420ToI420_2_Any (132 ms)
      [ RUN      ] LibYUVConvertTest.Android420ToI420_2_Unaligned
      [       OK ] LibYUVConvertTest.Android420ToI420_2_Unaligned (122 ms)
      [ RUN      ] LibYUVConvertTest.Android420ToI420_2_Invert
      [       OK ] LibYUVConvertTest.Android420ToI420_2_Invert (124 ms)
      [ RUN      ] LibYUVConvertTest.Android420ToI420_2_Opt
      [       OK ] LibYUVConvertTest.Android420ToI420_2_Opt (119 ms)
      
      TEST=LibYUVConvertTest.Android420ToI420_Opt
      BUG=libyuv:604
      R=braveyao@chromium.org
      
      Review URL: https://codereview.chromium.org/2146733002 .
      abcb70f1
  26. 12 Jul, 2016 1 commit
  27. 27 May, 2016 1 commit
  28. 20 Jan, 2016 1 commit
  29. 19 Jan, 2016 1 commit
    • Frank Barchard's avatar
      Fix memory overwrite in YUY2ToNV12 odd wdiths · 58cb5349
      Frank Barchard authored
      When width was odd Y channel wrote an extra pixel.
      This change splits the Y from UV into a temporary
      buffer and memcpy's to the destination.  Performance
      is slower.
      
      Was
      YUY2ToNV12_Any (307 ms)
      YUY2ToNV12_Unaligned (213 ms)
      TestYUY2ToNV12 (181 ms)
      YUY2ToNV12_Opt (177 ms)
      YUY2ToNV12_Invert (177 ms)
      
      Npw
      YUY2ToNV12_Any (300 ms)
      YUY2ToNV12_Unaligned (226 ms)
      YUY2ToNV12_Invert (206 ms)
      TestYUY2ToNV12 (184 ms)
      YUY2ToNV12_Opt (181 ms)
      TBR=harryjin@google.com
      BUG=libyuv:545
      
      Review URL: https://codereview.chromium.org/1593833002 .
      58cb5349
  30. 13 Jan, 2016 1 commit
  31. 11 Jan, 2016 1 commit
  32. 11 Dec, 2015 1 commit
  33. 18 Nov, 2015 1 commit
  34. 17 Nov, 2015 1 commit
  35. 10 Nov, 2015 1 commit