OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The LibYuv Project Authors. All rights reserved. | 2 * Copyright 2011 The LibYuv Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 #define HAS_RGBCOLORTABLEROW_X86 | 167 #define HAS_RGBCOLORTABLEROW_X86 |
168 #define HAS_SOBELROW_SSE2 | 168 #define HAS_SOBELROW_SSE2 |
169 #define HAS_SOBELTOPLANEROW_SSE2 | 169 #define HAS_SOBELTOPLANEROW_SSE2 |
170 #define HAS_SOBELXROW_SSE2 | 170 #define HAS_SOBELXROW_SSE2 |
171 #define HAS_SOBELXYROW_SSE2 | 171 #define HAS_SOBELXYROW_SSE2 |
172 #define HAS_SOBELYROW_SSE2 | 172 #define HAS_SOBELYROW_SSE2 |
173 | 173 |
174 // The following functions fail on gcc/clang 32 bit with fpic and framepointer. | 174 // The following functions fail on gcc/clang 32 bit with fpic and framepointer. |
175 // caveat: clangcl uses row_win.cc which works. | 175 // caveat: clangcl uses row_win.cc which works. |
176 #if defined(NDEBUG) || !(defined(_DEBUG) && defined(__i386__)) || \ | 176 #if defined(NDEBUG) || !(defined(_DEBUG) && defined(__i386__)) || \ |
177 !defined(__i386__) || defined(_MSC_VER) | 177 !defined(__i386__) || defined(_MSC_VER) |
178 // TODO(fbarchard): fix build error on x86 debug | 178 // TODO(fbarchard): fix build error on x86 debug |
179 // https://code.google.com/p/libyuv/issues/detail?id=524 | 179 // https://code.google.com/p/libyuv/issues/detail?id=524 |
180 #define HAS_I411TOARGBROW_SSSE3 | 180 #define HAS_I411TOARGBROW_SSSE3 |
181 // TODO(fbarchard): fix build error on android_full_debug=1 | 181 // TODO(fbarchard): fix build error on android_full_debug=1 |
182 // https://code.google.com/p/libyuv/issues/detail?id=517 | 182 // https://code.google.com/p/libyuv/issues/detail?id=517 |
183 #define HAS_I422ALPHATOARGBROW_SSSE3 | 183 #define HAS_I422ALPHATOARGBROW_SSSE3 |
184 #endif | 184 #endif |
185 #endif | 185 #endif |
186 | 186 |
187 // The following are available on all x86 platforms, but | 187 // The following are available on all x86 platforms, but |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 #define HAS_SOBELXROW_NEON | 348 #define HAS_SOBELXROW_NEON |
349 #define HAS_SOBELXYROW_NEON | 349 #define HAS_SOBELXYROW_NEON |
350 #define HAS_SOBELYROW_NEON | 350 #define HAS_SOBELYROW_NEON |
351 #endif | 351 #endif |
352 | 352 |
353 // The following are available on Mips platforms: | 353 // The following are available on Mips platforms: |
354 #if !defined(LIBYUV_DISABLE_MIPS) && defined(__mips__) && \ | 354 #if !defined(LIBYUV_DISABLE_MIPS) && defined(__mips__) && \ |
355 (_MIPS_SIM == _MIPS_SIM_ABI32) && (__mips_isa_rev < 6) | 355 (_MIPS_SIM == _MIPS_SIM_ABI32) && (__mips_isa_rev < 6) |
356 #define HAS_COPYROW_MIPS | 356 #define HAS_COPYROW_MIPS |
357 #if defined(__mips_dsp) && (__mips_dsp_rev >= 2) | 357 #if defined(__mips_dsp) && (__mips_dsp_rev >= 2) |
358 #define HAS_I422TOARGBROW_MIPS_DSPR2 | 358 #define HAS_I422TOARGBROW_DSPR2 |
359 #define HAS_INTERPOLATEROW_MIPS_DSPR2 | 359 #define HAS_INTERPOLATEROW_DSPR2 |
360 #define HAS_MIRRORROW_MIPS_DSPR2 | 360 #define HAS_MIRRORROW_DSPR2 |
361 #define HAS_MIRRORUVROW_MIPS_DSPR2 | 361 #define HAS_MIRRORUVROW_DSPR2 |
362 #define HAS_SPLITUVROW_MIPS_DSPR2 | 362 #define HAS_SPLITUVROW_DSPR2 |
363 #endif | 363 #endif |
364 #endif | 364 #endif |
365 | 365 |
366 #if defined(_MSC_VER) && !defined(__CLR_VER) | 366 #if defined(_MSC_VER) && !defined(__CLR_VER) |
367 #define SIMD_ALIGNED(var) __declspec(align(16)) var | 367 #define SIMD_ALIGNED(var) __declspec(align(16)) var |
368 #define SIMD_ALIGNED32(var) __declspec(align(64)) var | 368 #define SIMD_ALIGNED32(var) __declspec(align(64)) var |
369 typedef __declspec(align(16)) int16 vec16[8]; | 369 typedef __declspec(align(16)) int16 vec16[8]; |
370 typedef __declspec(align(16)) int32 vec32[4]; | 370 typedef __declspec(align(16)) int32 vec32[4]; |
371 typedef __declspec(align(16)) int8 vec8[16]; | 371 typedef __declspec(align(16)) int8 vec8[16]; |
372 typedef __declspec(align(16)) uint16 uvec16[8]; | 372 typedef __declspec(align(16)) uint16 uvec16[8]; |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 uint8* dst_u, uint8* dst_v, int width); | 783 uint8* dst_u, uint8* dst_v, int width); |
784 | 784 |
785 void ARGBToUV444Row_C(const uint8* src_argb, | 785 void ARGBToUV444Row_C(const uint8* src_argb, |
786 uint8* dst_u, uint8* dst_v, int width); | 786 uint8* dst_u, uint8* dst_v, int width); |
787 void ARGBToUV411Row_C(const uint8* src_argb, | 787 void ARGBToUV411Row_C(const uint8* src_argb, |
788 uint8* dst_u, uint8* dst_v, int width); | 788 uint8* dst_u, uint8* dst_v, int width); |
789 | 789 |
790 void MirrorRow_AVX2(const uint8* src, uint8* dst, int width); | 790 void MirrorRow_AVX2(const uint8* src, uint8* dst, int width); |
791 void MirrorRow_SSSE3(const uint8* src, uint8* dst, int width); | 791 void MirrorRow_SSSE3(const uint8* src, uint8* dst, int width); |
792 void MirrorRow_NEON(const uint8* src, uint8* dst, int width); | 792 void MirrorRow_NEON(const uint8* src, uint8* dst, int width); |
793 void MirrorRow_MIPS_DSPR2(const uint8* src, uint8* dst, int width); | 793 void MirrorRow_DSPR2(const uint8* src, uint8* dst, int width); |
794 void MirrorRow_C(const uint8* src, uint8* dst, int width); | 794 void MirrorRow_C(const uint8* src, uint8* dst, int width); |
795 void MirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width); | 795 void MirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width); |
796 void MirrorRow_Any_SSSE3(const uint8* src, uint8* dst, int width); | 796 void MirrorRow_Any_SSSE3(const uint8* src, uint8* dst, int width); |
797 void MirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width); | 797 void MirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width); |
798 void MirrorRow_Any_NEON(const uint8* src, uint8* dst, int width); | 798 void MirrorRow_Any_NEON(const uint8* src, uint8* dst, int width); |
799 | 799 |
800 void MirrorUVRow_SSSE3(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 800 void MirrorUVRow_SSSE3(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
801 int width); | 801 int width); |
802 void MirrorUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 802 void MirrorUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
803 int width); | 803 int width); |
804 void MirrorUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 804 void MirrorUVRow_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
805 int width); | 805 int width); |
806 void MirrorUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 806 void MirrorUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int width); |
807 int width); | |
808 | 807 |
809 void ARGBMirrorRow_AVX2(const uint8* src, uint8* dst, int width); | 808 void ARGBMirrorRow_AVX2(const uint8* src, uint8* dst, int width); |
810 void ARGBMirrorRow_SSE2(const uint8* src, uint8* dst, int width); | 809 void ARGBMirrorRow_SSE2(const uint8* src, uint8* dst, int width); |
811 void ARGBMirrorRow_NEON(const uint8* src, uint8* dst, int width); | 810 void ARGBMirrorRow_NEON(const uint8* src, uint8* dst, int width); |
812 void ARGBMirrorRow_C(const uint8* src, uint8* dst, int width); | 811 void ARGBMirrorRow_C(const uint8* src, uint8* dst, int width); |
813 void ARGBMirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width); | 812 void ARGBMirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width); |
814 void ARGBMirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width); | 813 void ARGBMirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width); |
815 void ARGBMirrorRow_Any_NEON(const uint8* src, uint8* dst, int width); | 814 void ARGBMirrorRow_Any_NEON(const uint8* src, uint8* dst, int width); |
816 | 815 |
817 void SplitUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int width); | 816 void SplitUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int width); |
818 void SplitUVRow_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 817 void SplitUVRow_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
819 int width); | 818 int width); |
820 void SplitUVRow_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 819 void SplitUVRow_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
821 int width); | 820 int width); |
822 void SplitUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 821 void SplitUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
823 int width); | 822 int width); |
824 void SplitUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 823 void SplitUVRow_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
825 int width); | 824 int width); |
826 void SplitUVRow_Any_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 825 void SplitUVRow_Any_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
827 int width); | 826 int width); |
828 void SplitUVRow_Any_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 827 void SplitUVRow_Any_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
829 int width); | 828 int width); |
830 void SplitUVRow_Any_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 829 void SplitUVRow_Any_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
831 int width); | 830 int width); |
832 void SplitUVRow_Any_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, | 831 void SplitUVRow_Any_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, |
833 int width); | 832 int width); |
834 | 833 |
835 void MergeUVRow_C(const uint8* src_u, const uint8* src_v, uint8* dst_uv, | 834 void MergeUVRow_C(const uint8* src_u, const uint8* src_v, uint8* dst_uv, |
836 int width); | 835 int width); |
837 void MergeUVRow_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv, | 836 void MergeUVRow_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv, |
838 int width); | 837 int width); |
839 void MergeUVRow_AVX2(const uint8* src_u, const uint8* src_v, uint8* dst_uv, | 838 void MergeUVRow_AVX2(const uint8* src_u, const uint8* src_v, uint8* dst_uv, |
840 int width); | 839 int width); |
841 void MergeUVRow_NEON(const uint8* src_u, const uint8* src_v, uint8* dst_uv, | 840 void MergeUVRow_NEON(const uint8* src_u, const uint8* src_v, uint8* dst_uv, |
842 int width); | 841 int width); |
843 void MergeUVRow_Any_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv, | 842 void MergeUVRow_Any_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv, |
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1603 const struct YuvConstants* yuvconstants, | 1602 const struct YuvConstants* yuvconstants, |
1604 int width); | 1603 int width); |
1605 void YUY2ToARGBRow_Any_NEON(const uint8* src_yuy2, | 1604 void YUY2ToARGBRow_Any_NEON(const uint8* src_yuy2, |
1606 uint8* dst_argb, | 1605 uint8* dst_argb, |
1607 const struct YuvConstants* yuvconstants, | 1606 const struct YuvConstants* yuvconstants, |
1608 int width); | 1607 int width); |
1609 void UYVYToARGBRow_Any_NEON(const uint8* src_uyvy, | 1608 void UYVYToARGBRow_Any_NEON(const uint8* src_uyvy, |
1610 uint8* dst_argb, | 1609 uint8* dst_argb, |
1611 const struct YuvConstants* yuvconstants, | 1610 const struct YuvConstants* yuvconstants, |
1612 int width); | 1611 int width); |
1613 void I422ToARGBRow_MIPS_DSPR2(const uint8* src_y, | 1612 void I422ToARGBRow_DSPR2(const uint8* src_y, |
1614 const uint8* src_u, | 1613 const uint8* src_u, |
1615 const uint8* src_v, | 1614 const uint8* src_v, |
1616 uint8* dst_argb, | 1615 uint8* dst_argb, |
1617 const struct YuvConstants* yuvconstants, | 1616 const struct YuvConstants* yuvconstants, |
1618 int width); | 1617 int width); |
1619 void I422ToARGBRow_MIPS_DSPR2(const uint8* src_y, | 1618 void I422ToARGBRow_DSPR2(const uint8* src_y, |
1620 const uint8* src_u, | 1619 const uint8* src_u, |
1621 const uint8* src_v, | 1620 const uint8* src_v, |
1622 uint8* dst_argb, | 1621 uint8* dst_argb, |
1623 const struct YuvConstants* yuvconstants, | 1622 const struct YuvConstants* yuvconstants, |
1624 int width); | 1623 int width); |
1625 | 1624 |
1626 void YUY2ToYRow_AVX2(const uint8* src_yuy2, uint8* dst_y, int width); | 1625 void YUY2ToYRow_AVX2(const uint8* src_yuy2, uint8* dst_y, int width); |
1627 void YUY2ToUVRow_AVX2(const uint8* src_yuy2, int stride_yuy2, | 1626 void YUY2ToUVRow_AVX2(const uint8* src_yuy2, int stride_yuy2, |
1628 uint8* dst_u, uint8* dst_v, int width); | 1627 uint8* dst_u, uint8* dst_v, int width); |
1629 void YUY2ToUV422Row_AVX2(const uint8* src_yuy2, | 1628 void YUY2ToUV422Row_AVX2(const uint8* src_yuy2, |
1630 uint8* dst_u, uint8* dst_v, int width); | 1629 uint8* dst_u, uint8* dst_v, int width); |
1631 void YUY2ToYRow_SSE2(const uint8* src_yuy2, uint8* dst_y, int width); | 1630 void YUY2ToYRow_SSE2(const uint8* src_yuy2, uint8* dst_y, int width); |
1632 void YUY2ToUVRow_SSE2(const uint8* src_yuy2, int stride_yuy2, | 1631 void YUY2ToUVRow_SSE2(const uint8* src_yuy2, int stride_yuy2, |
1633 uint8* dst_u, uint8* dst_v, int width); | 1632 uint8* dst_u, uint8* dst_v, int width); |
1634 void YUY2ToUV422Row_SSE2(const uint8* src_yuy2, | 1633 void YUY2ToUV422Row_SSE2(const uint8* src_yuy2, |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1824 int width, int source_y_fraction); | 1823 int width, int source_y_fraction); |
1825 void InterpolateRow_SSSE3(uint8* dst_ptr, const uint8* src_ptr, | 1824 void InterpolateRow_SSSE3(uint8* dst_ptr, const uint8* src_ptr, |
1826 ptrdiff_t src_stride_ptr, int width, | 1825 ptrdiff_t src_stride_ptr, int width, |
1827 int source_y_fraction); | 1826 int source_y_fraction); |
1828 void InterpolateRow_AVX2(uint8* dst_ptr, const uint8* src_ptr, | 1827 void InterpolateRow_AVX2(uint8* dst_ptr, const uint8* src_ptr, |
1829 ptrdiff_t src_stride_ptr, int width, | 1828 ptrdiff_t src_stride_ptr, int width, |
1830 int source_y_fraction); | 1829 int source_y_fraction); |
1831 void InterpolateRow_NEON(uint8* dst_ptr, const uint8* src_ptr, | 1830 void InterpolateRow_NEON(uint8* dst_ptr, const uint8* src_ptr, |
1832 ptrdiff_t src_stride_ptr, int width, | 1831 ptrdiff_t src_stride_ptr, int width, |
1833 int source_y_fraction); | 1832 int source_y_fraction); |
1834 void InterpolateRow_MIPS_DSPR2(uint8* dst_ptr, const uint8* src_ptr, | 1833 void InterpolateRow_DSPR2(uint8* dst_ptr, const uint8* src_ptr, |
1835 ptrdiff_t src_stride_ptr, int width, | 1834 ptrdiff_t src_stride_ptr, int width, |
1836 int source_y_fraction); | 1835 int source_y_fraction); |
1837 void InterpolateRow_Any_NEON(uint8* dst_ptr, const uint8* src_ptr, | 1836 void InterpolateRow_Any_NEON(uint8* dst_ptr, const uint8* src_ptr, |
1838 ptrdiff_t src_stride_ptr, int width, | 1837 ptrdiff_t src_stride_ptr, int width, |
1839 int source_y_fraction); | 1838 int source_y_fraction); |
1840 void InterpolateRow_Any_SSSE3(uint8* dst_ptr, const uint8* src_ptr, | 1839 void InterpolateRow_Any_SSSE3(uint8* dst_ptr, const uint8* src_ptr, |
1841 ptrdiff_t src_stride_ptr, int width, | 1840 ptrdiff_t src_stride_ptr, int width, |
1842 int source_y_fraction); | 1841 int source_y_fraction); |
1843 void InterpolateRow_Any_AVX2(uint8* dst_ptr, const uint8* src_ptr, | 1842 void InterpolateRow_Any_AVX2(uint8* dst_ptr, const uint8* src_ptr, |
1844 ptrdiff_t src_stride_ptr, int width, | 1843 ptrdiff_t src_stride_ptr, int width, |
1845 int source_y_fraction); | 1844 int source_y_fraction); |
1846 void InterpolateRow_Any_MIPS_DSPR2(uint8* dst_ptr, const uint8* src_ptr, | 1845 void InterpolateRow_Any_DSPR2(uint8* dst_ptr, const uint8* src_ptr, |
1847 ptrdiff_t src_stride_ptr, int width, | 1846 ptrdiff_t src_stride_ptr, int width, |
1848 int source_y_fraction); | 1847 int source_y_fraction); |
1849 | 1848 |
1850 void InterpolateRow_16_C(uint16* dst_ptr, const uint16* src_ptr, | 1849 void InterpolateRow_16_C(uint16* dst_ptr, const uint16* src_ptr, |
1851 ptrdiff_t src_stride_ptr, | 1850 ptrdiff_t src_stride_ptr, |
1852 int width, int source_y_fraction); | 1851 int width, int source_y_fraction); |
1853 | 1852 |
1854 // Sobel images. | 1853 // Sobel images. |
1855 void SobelXRow_C(const uint8* src_y0, const uint8* src_y1, const uint8* src_y2, | 1854 void SobelXRow_C(const uint8* src_y0, const uint8* src_y1, const uint8* src_y2, |
1856 uint8* dst_sobelx, int width); | 1855 uint8* dst_sobelx, int width); |
1857 void SobelXRow_SSE2(const uint8* src_y0, const uint8* src_y1, | 1856 void SobelXRow_SSE2(const uint8* src_y0, const uint8* src_y1, |
1858 const uint8* src_y2, uint8* dst_sobelx, int width); | 1857 const uint8* src_y2, uint8* dst_sobelx, int width); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1910 void ARGBLumaColorTableRow_SSSE3(const uint8* src_argb, uint8* dst_argb, | 1909 void ARGBLumaColorTableRow_SSSE3(const uint8* src_argb, uint8* dst_argb, |
1911 int width, | 1910 int width, |
1912 const uint8* luma, uint32 lumacoeff); | 1911 const uint8* luma, uint32 lumacoeff); |
1913 | 1912 |
1914 #ifdef __cplusplus | 1913 #ifdef __cplusplus |
1915 } // extern "C" | 1914 } // extern "C" |
1916 } // namespace libyuv | 1915 } // namespace libyuv |
1917 #endif | 1916 #endif |
1918 | 1917 |
1919 #endif // INCLUDE_LIBYUV_ROW_H_ NOLINT | 1918 #endif // INCLUDE_LIBYUV_ROW_H_ NOLINT |
OLD | NEW |