mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-14 01:49:05 +00:00
[libyuv] Update to hash ea23edfb from https://chromium.googlesource.com/libyuv/libyuv/
This commit is contained in:
committed by
Andrey Volk
parent
6175c55b2f
commit
1b1c66aae4
@@ -12,8 +12,6 @@
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
// row.h defines SIMD_ALIGNED, overriding unit_test.h
|
||||
#include "libyuv/row.h" /* For ScaleSumSamples_Neon */
|
||||
|
||||
#include "../unit_test/unit_test.h"
|
||||
#include "libyuv/compare.h"
|
||||
@@ -25,6 +23,12 @@
|
||||
#include "libyuv/planar_functions.h"
|
||||
#include "libyuv/rotate.h"
|
||||
|
||||
#ifdef ENABLE_ROW_TESTS
|
||||
// row.h defines SIMD_ALIGNED, overriding unit_test.h
|
||||
// TODO(fbarchard): Remove row.h from unittests. Test public functions.
|
||||
#include "libyuv/row.h" /* For ScaleSumSamples_Neon */
|
||||
#endif
|
||||
|
||||
namespace libyuv {
|
||||
|
||||
TEST_F(LibYUVPlanarTest, TestAttenuate) {
|
||||
@@ -2321,7 +2325,8 @@ TEST_F(LibYUVPlanarTest, TestARGBCopyAlpha) {
|
||||
}
|
||||
|
||||
TEST_F(LibYUVPlanarTest, TestARGBExtractAlpha) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels, kPixels * 4);
|
||||
align_buffer_page_end(dst_pixels_opt, kPixels);
|
||||
align_buffer_page_end(dst_pixels_c, kPixels);
|
||||
@@ -2349,7 +2354,8 @@ TEST_F(LibYUVPlanarTest, TestARGBExtractAlpha) {
|
||||
}
|
||||
|
||||
TEST_F(LibYUVPlanarTest, TestARGBCopyYToAlpha) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(orig_pixels, kPixels);
|
||||
align_buffer_page_end(dst_pixels_opt, kPixels * 4);
|
||||
align_buffer_page_end(dst_pixels_c, kPixels * 4);
|
||||
@@ -2482,7 +2488,8 @@ TEST_F(LibYUVPlanarTest, SetPlane_Opt) {
|
||||
}
|
||||
|
||||
TEST_F(LibYUVPlanarTest, MergeUVPlane_Opt) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels, kPixels * 2);
|
||||
align_buffer_page_end(tmp_pixels_u, kPixels);
|
||||
align_buffer_page_end(tmp_pixels_v, kPixels);
|
||||
@@ -2526,7 +2533,8 @@ TEST_F(LibYUVPlanarTest, MergeUVPlane_Opt) {
|
||||
}
|
||||
|
||||
TEST_F(LibYUVPlanarTest, SplitUVPlane_Opt) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels, kPixels * 2);
|
||||
align_buffer_page_end(tmp_pixels_u, kPixels);
|
||||
align_buffer_page_end(tmp_pixels_v, kPixels);
|
||||
@@ -2568,8 +2576,39 @@ TEST_F(LibYUVPlanarTest, SplitUVPlane_Opt) {
|
||||
free_aligned_buffer_page_end(dst_pixels_c);
|
||||
}
|
||||
|
||||
TEST_F(LibYUVPlanarTest, SwapUVPlane_Opt) {
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels, kPixels * 2);
|
||||
align_buffer_page_end(dst_pixels_opt, kPixels * 2);
|
||||
align_buffer_page_end(dst_pixels_c, kPixels * 2);
|
||||
|
||||
MemRandomize(src_pixels, kPixels * 2);
|
||||
MemRandomize(dst_pixels_opt, kPixels * 2);
|
||||
MemRandomize(dst_pixels_c, kPixels * 2);
|
||||
|
||||
MaskCpuFlags(disable_cpu_flags_);
|
||||
SwapUVPlane(src_pixels, benchmark_width_ * 2, dst_pixels_c,
|
||||
benchmark_width_ * 2, benchmark_width_, benchmark_height_);
|
||||
MaskCpuFlags(benchmark_cpu_info_);
|
||||
|
||||
for (int i = 0; i < benchmark_iterations_; ++i) {
|
||||
SwapUVPlane(src_pixels, benchmark_width_ * 2, dst_pixels_opt,
|
||||
benchmark_width_ * 2, benchmark_width_, benchmark_height_);
|
||||
}
|
||||
|
||||
for (int i = 0; i < kPixels * 2; ++i) {
|
||||
EXPECT_EQ(dst_pixels_c[i], dst_pixels_opt[i]);
|
||||
}
|
||||
|
||||
free_aligned_buffer_page_end(src_pixels);
|
||||
free_aligned_buffer_page_end(dst_pixels_opt);
|
||||
free_aligned_buffer_page_end(dst_pixels_c);
|
||||
}
|
||||
|
||||
TEST_F(LibYUVPlanarTest, MergeRGBPlane_Opt) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels, kPixels * 3);
|
||||
align_buffer_page_end(tmp_pixels_r, kPixels);
|
||||
align_buffer_page_end(tmp_pixels_g, kPixels);
|
||||
@@ -2617,7 +2656,8 @@ TEST_F(LibYUVPlanarTest, MergeRGBPlane_Opt) {
|
||||
}
|
||||
|
||||
TEST_F(LibYUVPlanarTest, SplitRGBPlane_Opt) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels, kPixels * 3);
|
||||
align_buffer_page_end(tmp_pixels_r, kPixels);
|
||||
align_buffer_page_end(tmp_pixels_g, kPixels);
|
||||
@@ -2666,7 +2706,8 @@ TEST_F(LibYUVPlanarTest, SplitRGBPlane_Opt) {
|
||||
// TODO(fbarchard): improve test for platforms and cpu detect
|
||||
#ifdef HAS_MERGEUVROW_16_AVX2
|
||||
TEST_F(LibYUVPlanarTest, MergeUVRow_16_Opt) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels_u, kPixels * 2);
|
||||
align_buffer_page_end(src_pixels_v, kPixels * 2);
|
||||
align_buffer_page_end(dst_pixels_uv_opt, kPixels * 2 * 2);
|
||||
@@ -2710,7 +2751,8 @@ TEST_F(LibYUVPlanarTest, MergeUVRow_16_Opt) {
|
||||
// TODO(fbarchard): Improve test for more platforms.
|
||||
#ifdef HAS_MULTIPLYROW_16_AVX2
|
||||
TEST_F(LibYUVPlanarTest, MultiplyRow_16_Opt) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels_y, kPixels * 2);
|
||||
align_buffer_page_end(dst_pixels_y_opt, kPixels * 2);
|
||||
align_buffer_page_end(dst_pixels_y_c, kPixels * 2);
|
||||
@@ -2746,7 +2788,8 @@ TEST_F(LibYUVPlanarTest, MultiplyRow_16_Opt) {
|
||||
#endif // HAS_MULTIPLYROW_16_AVX2
|
||||
|
||||
TEST_F(LibYUVPlanarTest, Convert16To8Plane) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels_y, kPixels * 2);
|
||||
align_buffer_page_end(dst_pixels_y_opt, kPixels);
|
||||
align_buffer_page_end(dst_pixels_y_c, kPixels);
|
||||
@@ -2776,6 +2819,7 @@ TEST_F(LibYUVPlanarTest, Convert16To8Plane) {
|
||||
free_aligned_buffer_page_end(dst_pixels_y_c);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_ROW_TESTS
|
||||
// TODO(fbarchard): Improve test for more platforms.
|
||||
#ifdef HAS_CONVERT16TO8ROW_AVX2
|
||||
TEST_F(LibYUVPlanarTest, Convert16To8Row_Opt) {
|
||||
@@ -2821,9 +2865,11 @@ TEST_F(LibYUVPlanarTest, Convert16To8Row_Opt) {
|
||||
free_aligned_buffer_page_end(dst_pixels_y_c);
|
||||
}
|
||||
#endif // HAS_CONVERT16TO8ROW_AVX2
|
||||
#endif // ENABLE_ROW_TESTS
|
||||
|
||||
TEST_F(LibYUVPlanarTest, Convert8To16Plane) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
// Round count up to multiple of 16
|
||||
const int kPixels = (benchmark_width_ * benchmark_height_ + 15) & ~15;
|
||||
align_buffer_page_end(src_pixels_y, kPixels);
|
||||
align_buffer_page_end(dst_pixels_y_opt, kPixels * 2);
|
||||
align_buffer_page_end(dst_pixels_y_c, kPixels * 2);
|
||||
@@ -2855,6 +2901,7 @@ TEST_F(LibYUVPlanarTest, Convert8To16Plane) {
|
||||
free_aligned_buffer_page_end(dst_pixels_y_c);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_ROW_TESTS
|
||||
// TODO(fbarchard): Improve test for more platforms.
|
||||
#ifdef HAS_CONVERT8TO16ROW_AVX2
|
||||
TEST_F(LibYUVPlanarTest, Convert8To16Row_Opt) {
|
||||
@@ -3186,7 +3233,8 @@ TEST_F(LibYUVPlanarTest, TestGaussRow_Opt) {
|
||||
}
|
||||
GaussRow_C(&orig_pixels[0], &dst_pixels_c[0], 640);
|
||||
for (int i = 0; i < benchmark_pixels_div1280_ * 2; ++i) {
|
||||
#if !defined(LIBYUV_DISABLE_NEON) && defined(__aarch64__)
|
||||
#if !defined(LIBYUV_DISABLE_NEON) && \
|
||||
(defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON))
|
||||
int has_neon = TestCpuFlag(kCpuHasNEON);
|
||||
if (has_neon) {
|
||||
GaussRow_NEON(&orig_pixels[0], &dst_pixels_opt[0], 640);
|
||||
@@ -3239,7 +3287,8 @@ TEST_F(LibYUVPlanarTest, TestGaussCol_Opt) {
|
||||
&orig_pixels[640 * 3], &orig_pixels[640 * 4], &dst_pixels_c[0],
|
||||
640);
|
||||
for (int i = 0; i < benchmark_pixels_div1280_ * 2; ++i) {
|
||||
#if !defined(LIBYUV_DISABLE_NEON) && defined(__aarch64__)
|
||||
#if !defined(LIBYUV_DISABLE_NEON) && \
|
||||
(defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON))
|
||||
int has_neon = TestCpuFlag(kCpuHasNEON);
|
||||
if (has_neon) {
|
||||
GaussCol_NEON(&orig_pixels[0], &orig_pixels[640], &orig_pixels[640 * 2],
|
||||
@@ -3267,4 +3316,36 @@ TEST_F(LibYUVPlanarTest, TestGaussCol_Opt) {
|
||||
EXPECT_EQ(dst_pixels_c[639], static_cast<uint32_t>(30704));
|
||||
}
|
||||
|
||||
TEST_F(LibYUVPlanarTest, SwapUVRow) {
|
||||
const int kPixels = benchmark_width_ * benchmark_height_;
|
||||
void (*SwapUVRow)(const uint8_t* src_uv, uint8_t* dst_vu, int width) =
|
||||
SwapUVRow_C;
|
||||
|
||||
align_buffer_page_end(src_pixels_vu, kPixels * 2);
|
||||
align_buffer_page_end(dst_pixels_uv, kPixels * 2);
|
||||
MemRandomize(src_pixels_vu, kPixels * 2);
|
||||
memset(dst_pixels_uv, 1, kPixels * 2);
|
||||
|
||||
#if defined(HAS_SWAPUVROW_NEON)
|
||||
if (TestCpuFlag(kCpuHasNEON)) {
|
||||
SwapUVRow = SwapUVRow_Any_NEON;
|
||||
if (IS_ALIGNED(kPixels, 16)) {
|
||||
SwapUVRow = SwapUVRow_NEON;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
for (int j = 0; j < benchmark_iterations_; j++) {
|
||||
SwapUVRow(src_pixels_vu, dst_pixels_uv, kPixels);
|
||||
}
|
||||
for (int i = 0; i < kPixels; ++i) {
|
||||
EXPECT_EQ(dst_pixels_uv[i * 2 + 0], src_pixels_vu[i * 2 + 1]);
|
||||
EXPECT_EQ(dst_pixels_uv[i * 2 + 1], src_pixels_vu[i * 2 + 0]);
|
||||
}
|
||||
|
||||
free_aligned_buffer_page_end(src_pixels_vu);
|
||||
free_aligned_buffer_page_end(dst_pixels_uv);
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace libyuv
|
||||
|
Reference in New Issue
Block a user