1. 10 Jan, 2018 1 commit
  2. 09 Jan, 2018 1 commit
  3. 08 Jan, 2018 2 commits
  4. 07 Jan, 2018 1 commit
    • Frank Barchard's avatar
      H010ToAR30 optimized to 2 step conversion · 9d2cd6a3
      Frank Barchard authored
      Previously H010ToAR30 was done in a 3 step conversion:
      H010ToH420, H420ToARGB, ARGBToAR30.
      This CL merges the first 2 steps into H010ToARGB, to
      improve performance.
      Caveat - only 10 bit YUV is supported at this time.
      Previously the low level code supported different numbers
      of bits - 9, 10, 12 or 16.
      
      Was 3 step conversion:
      LibYUVConvertTest.H010ToAR30_Any (1263 ms)
      LibYUVConvertTest.H010ToAR30_Unaligned (951 ms)
      LibYUVConvertTest.H010ToAR30_Invert (913 ms)
      LibYUVConvertTest.H010ToAR30_Opt (901 ms)
      
      Now 2 step conversion:
      LibYUVConvertTest.H010ToAR30_Any (853 ms)
      LibYUVConvertTest.H010ToAR30_Unaligned (811 ms)
      LibYUVConvertTest.H010ToAR30_Invert (781 ms)
      LibYUVConvertTest.H010ToAR30_Opt (755 ms)
      
      Bug: libyuv:751
      Test: LibYUVConvertTest.H010ToAR30_Opt
      Change-Id: Ica7574040401cd57145a4827acdf3c0e58346a2a
      Reviewed-on: https://chromium-review.googlesource.com/853288Reviewed-by: 's avatarFrank Barchard <fbarchard@chromium.org>
      Reviewed-by: 's avatarMiguel Casas <mcasas@chromium.org>
      9d2cd6a3
  5. 05 Jan, 2018 2 commits
  6. 04 Jan, 2018 1 commit
  7. 03 Jan, 2018 1 commit
  8. 02 Jan, 2018 4 commits
  9. 28 Dec, 2017 1 commit
  10. 21 Dec, 2017 2 commits
    • Frank Barchard's avatar
      HalfFloat_SSE2 use movd from memory · c67db605
      Frank Barchard authored
      pshufd requires 16 byte aligned memory or a register.
      Use movd to a register to avoid a segfault if memory for float
      is misaligned
      
      Bug: libyuv:759
      Test: 32 bit build of LibYUVPlanarTest.TestHalfFloatPlane_16bit_denormal
      Change-Id: I6fdcc4317453af5acd4700f9d46425bb2f4a205b
      Reviewed-on: https://chromium-review.googlesource.com/840459Reviewed-by: 's avatarMiguel Casas <mcasas@chromium.org>
      Reviewed-by: 's avatarFrank Barchard <fbarchard@chromium.org>
      Commit-Queue: Frank Barchard <fbarchard@chromium.org>
      c67db605
    • VladimirTechMan's avatar
      Allow enabling libyuv symbols visibility for shared library targets · 56eb5a47
      VladimirTechMan authored
      When developing WebRTC applications with custom video sources, libyuv's
      API is often the required part of the project. For that, application
      developers can link with a separate standalone instance of libyuv.
      However, it is even better to avoid that binary code duplication and
      link against libyuv as a part compiled into the WebRTC library.
      
      When building WebRTC as a static library target, the symbols from libyuv
      are normally accessible to the linker without any extra actions. When
      building WebRTC as a shared library, that does not work as the exported
      symbols are those marked as visible, while libyuv is built with the
      hidden visibility setting by default.
      
      This patch adds an extra flag to enable switching the symbol visibility
      to default when building shared library targets depending on libyuv in
      WebRTC and Chromium projects. By default the flag is not enabled,
      preserving the prior behaviour.
      
      Bug: NONE
      Change-Id: I48893cb9f54b1e1b49a34e14434e67f91d3e5e79
      Reviewed-on: https://chromium-review.googlesource.com/827746Reviewed-by: 's avatarFrank Barchard <fbarchard@chromium.org>
      Commit-Queue: Frank Barchard <fbarchard@chromium.org>
      56eb5a47
  11. 20 Dec, 2017 1 commit
  12. 19 Dec, 2017 1 commit
  13. 15 Dec, 2017 1 commit
  14. 14 Dec, 2017 1 commit
  15. 12 Dec, 2017 4 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
    • Mirko Bonadei's avatar
      Using all_dependent_configs to pass libyuv_config around. · d94a4867
      Mirko Bonadei authored
      Using public_configs, client projects must rely on public_deps to
      propagate configurations up in the build graph. This is bad because
      public_deps allows the exposition of headers that live in another
      target. This can lead to a really unhealthy build.
      
      On the other side, all_dependent_configs is automatically propagated
      up in the build graph but if a target includes a libyuv header it is
      forced by GN to declare the dependency (and this will propagate
      libyuv_config).
      
      Bug: webrtc:8605, webrtc:8603
      Change-Id: I4d71bb5de0b5b62a4ec110349223614f0b98e655
      No-Try: True
      Reviewed-on: https://chromium-review.googlesource.com/822112
      Commit-Queue: Mirko Bonadei <mbonadei@chromium.org>
      Reviewed-by: 's avatarPatrik Höglund <phoglund@chromium.org>
      d94a4867
    • 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
  16. 09 Dec, 2017 1 commit
  17. 08 Dec, 2017 1 commit
  18. 07 Dec, 2017 1 commit
  19. 05 Dec, 2017 1 commit
  20. 30 Nov, 2017 1 commit
  21. 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
  22. 27 Nov, 2017 1 commit
  23. 22 Nov, 2017 1 commit
  24. 21 Nov, 2017 1 commit
  25. 20 Nov, 2017 3 commits
  26. 17 Nov, 2017 1 commit
  27. 16 Nov, 2017 1 commit
  28. 15 Nov, 2017 1 commit
  29. 10 Nov, 2017 1 commit
    • Frank Barchard's avatar
      clang-format for align_buffer_page_end and free_aligned_buffer_page_end · 3cf056f8
      Frank Barchard authored
      clang-format does nested indents for macros that dont end with ;
      example:
        align_buffer_page_end(dst_y_8, dst_y_plane_size)
            align_buffer_page_end(dst_u_8, dst_uv_plane_size)
                align_buffer_page_end(dst_v_8, dst_uv_plane_size)
                    align_buffer_page_end(dst_y_16, dst_y_plane_size * 2)
                        align_buffer_page_end(dst_u_16, dst_uv_plane_size * 2)
                            align_buffer_page_end(dst_v_16, dst_uv_plane_size * 2)
      
      use a similar allocator to the one used within libyuv in row.h which makes the caller add ;
        align_buffer_page_end(dst_y_8, dst_y_plane_size);
        align_buffer_page_end(dst_u_8, dst_uv_plane_size);
        align_buffer_page_end(dst_v_8, dst_uv_plane_size);
        align_buffer_page_end(dst_y_16, dst_y_plane_size * 2);
        align_buffer_page_end(dst_u_16, dst_uv_plane_size * 2);
        align_buffer_page_end(dst_v_16, dst_uv_plane_size * 2);
      
      Bug: libyuv:758
      Test: try bots
      Change-Id: I4a0770707e7053e094a37bbfc3c5884d5663d078
      Reviewed-on: https://chromium-review.googlesource.com/762757Reviewed-by: 's avatarPatrik Höglund <phoglund@chromium.org>
      Reviewed-by: 's avatarFrank Barchard <fbarchard@google.com>
      Commit-Queue: Frank Barchard <fbarchard@google.com>
      3cf056f8