OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 The LibYuv Project Authors. All rights reserved. | 2 * Copyright 2015 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 uint8* dst_ptr, int dst_width) { \ | 48 uint8* dst_ptr, int dst_width) { \ |
49 int r = (int)((unsigned int)dst_width % (MASK + 1)); \ | 49 int r = (int)((unsigned int)dst_width % (MASK + 1)); \ |
50 int n = dst_width - r; \ | 50 int n = dst_width - r; \ |
51 if (n > 0) { \ | 51 if (n > 0) { \ |
52 SCALEROWDOWN_SIMD(src_ptr, src_stride, dst_ptr, n); \ | 52 SCALEROWDOWN_SIMD(src_ptr, src_stride, dst_ptr, n); \ |
53 } \ | 53 } \ |
54 SCALEROWDOWN_C(src_ptr + (n * FACTOR) * BPP, src_stride, \ | 54 SCALEROWDOWN_C(src_ptr + (n * FACTOR) * BPP, src_stride, \ |
55 dst_ptr + n * BPP, r); \ | 55 dst_ptr + n * BPP, r); \ |
56 } | 56 } |
57 | 57 |
| 58 // Fixed scale down for odd source width. Used by I420Blend subsampling. |
| 59 // Since dst_width is (width + 1) / 2, this function scales one less pixel |
| 60 // and copies the last pixel. |
| 61 #define SDODD(NAMEANY, SCALEROWDOWN_SIMD, SCALEROWDOWN_C, FACTOR, BPP, MASK) \ |
| 62 void NAMEANY(const uint8* src_ptr, ptrdiff_t src_stride, \ |
| 63 uint8* dst_ptr, int dst_width) { \ |
| 64 int r = (int)((unsigned int)(dst_width - 1) % (MASK + 1)); \ |
| 65 int n = dst_width - r; \ |
| 66 if (n > 0) { \ |
| 67 SCALEROWDOWN_SIMD(src_ptr, src_stride, dst_ptr, n); \ |
| 68 } \ |
| 69 SCALEROWDOWN_C(src_ptr + (n * FACTOR) * BPP, src_stride, \ |
| 70 dst_ptr + n * BPP, r); \ |
| 71 } |
| 72 |
58 #ifdef HAS_SCALEROWDOWN2_SSSE3 | 73 #ifdef HAS_SCALEROWDOWN2_SSSE3 |
59 SDANY(ScaleRowDown2_Any_SSSE3, ScaleRowDown2_SSSE3, ScaleRowDown2_C, 2, 1, 15) | 74 SDANY(ScaleRowDown2_Any_SSSE3, ScaleRowDown2_SSSE3, ScaleRowDown2_C, 2, 1, 15) |
60 SDANY(ScaleRowDown2Linear_Any_SSSE3, ScaleRowDown2Linear_SSSE3, | 75 SDANY(ScaleRowDown2Linear_Any_SSSE3, ScaleRowDown2Linear_SSSE3, |
61 ScaleRowDown2Linear_C, 2, 1, 15) | 76 ScaleRowDown2Linear_C, 2, 1, 15) |
62 SDANY(ScaleRowDown2Box_Any_SSSE3, ScaleRowDown2Box_SSSE3, ScaleRowDown2Box_C, | 77 SDANY(ScaleRowDown2Box_Any_SSSE3, ScaleRowDown2Box_SSSE3, ScaleRowDown2Box_C, |
63 2, 1, 15) | 78 2, 1, 15) |
| 79 SDODD(ScaleRowDown2Box_Odd_SSSE3, ScaleRowDown2Box_SSSE3, |
| 80 ScaleRowDown2Box_Odd_C, 2, 1, 15) |
64 #endif | 81 #endif |
65 #ifdef HAS_SCALEROWDOWN2_AVX2 | 82 #ifdef HAS_SCALEROWDOWN2_AVX2 |
66 SDANY(ScaleRowDown2_Any_AVX2, ScaleRowDown2_AVX2, ScaleRowDown2_C, 2, 1, 31) | 83 SDANY(ScaleRowDown2_Any_AVX2, ScaleRowDown2_AVX2, ScaleRowDown2_C, 2, 1, 31) |
67 SDANY(ScaleRowDown2Linear_Any_AVX2, ScaleRowDown2Linear_AVX2, | 84 SDANY(ScaleRowDown2Linear_Any_AVX2, ScaleRowDown2Linear_AVX2, |
68 ScaleRowDown2Linear_C, 2, 1, 31) | 85 ScaleRowDown2Linear_C, 2, 1, 31) |
69 SDANY(ScaleRowDown2Box_Any_AVX2, ScaleRowDown2Box_AVX2, ScaleRowDown2Box_C, | 86 SDANY(ScaleRowDown2Box_Any_AVX2, ScaleRowDown2Box_AVX2, ScaleRowDown2Box_C, |
70 2, 1, 31) | 87 2, 1, 31) |
| 88 SDODD(ScaleRowDown2Box_Odd_AVX2, ScaleRowDown2Box_AVX2, ScaleRowDown2Box_Odd_C, |
| 89 2, 1, 31) |
71 #endif | 90 #endif |
72 #ifdef HAS_SCALEROWDOWN2_NEON | 91 #ifdef HAS_SCALEROWDOWN2_NEON |
73 SDANY(ScaleRowDown2_Any_NEON, ScaleRowDown2_NEON, ScaleRowDown2_C, 2, 1, 15) | 92 SDANY(ScaleRowDown2_Any_NEON, ScaleRowDown2_NEON, ScaleRowDown2_C, 2, 1, 15) |
74 SDANY(ScaleRowDown2Linear_Any_NEON, ScaleRowDown2Linear_NEON, | 93 SDANY(ScaleRowDown2Linear_Any_NEON, ScaleRowDown2Linear_NEON, |
75 ScaleRowDown2Linear_C, 2, 1, 15) | 94 ScaleRowDown2Linear_C, 2, 1, 15) |
76 SDANY(ScaleRowDown2Box_Any_NEON, ScaleRowDown2Box_NEON, | 95 SDANY(ScaleRowDown2Box_Any_NEON, ScaleRowDown2Box_NEON, |
77 ScaleRowDown2Box_C, 2, 1, 15) | 96 ScaleRowDown2Box_C, 2, 1, 15) |
| 97 SDODD(ScaleRowDown2Box_Odd_NEON, ScaleRowDown2Box_NEON, |
| 98 ScaleRowDown2Box_Odd_C, 2, 1, 15) |
78 #endif | 99 #endif |
79 #ifdef HAS_SCALEROWDOWN4_SSSE3 | 100 #ifdef HAS_SCALEROWDOWN4_SSSE3 |
80 SDANY(ScaleRowDown4_Any_SSSE3, ScaleRowDown4_SSSE3, ScaleRowDown4_C, 4, 1, 7) | 101 SDANY(ScaleRowDown4_Any_SSSE3, ScaleRowDown4_SSSE3, ScaleRowDown4_C, 4, 1, 7) |
81 SDANY(ScaleRowDown4Box_Any_SSSE3, ScaleRowDown4Box_SSSE3, ScaleRowDown4Box_C, | 102 SDANY(ScaleRowDown4Box_Any_SSSE3, ScaleRowDown4Box_SSSE3, ScaleRowDown4Box_C, |
82 4, 1, 7) | 103 4, 1, 7) |
83 #endif | 104 #endif |
84 #ifdef HAS_SCALEROWDOWN4_AVX2 | 105 #ifdef HAS_SCALEROWDOWN4_AVX2 |
85 SDANY(ScaleRowDown4_Any_AVX2, ScaleRowDown4_AVX2, ScaleRowDown4_C, 4, 1, 15) | 106 SDANY(ScaleRowDown4_Any_AVX2, ScaleRowDown4_AVX2, ScaleRowDown4_C, 4, 1, 15) |
86 SDANY(ScaleRowDown4Box_Any_AVX2, ScaleRowDown4Box_AVX2, ScaleRowDown4Box_C, | 107 SDANY(ScaleRowDown4Box_Any_AVX2, ScaleRowDown4Box_AVX2, ScaleRowDown4Box_C, |
87 4, 1, 15) | 108 4, 1, 15) |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 | 212 |
192 #ifdef __cplusplus | 213 #ifdef __cplusplus |
193 } // extern "C" | 214 } // extern "C" |
194 } // namespace libyuv | 215 } // namespace libyuv |
195 #endif | 216 #endif |
196 | 217 |
197 | 218 |
198 | 219 |
199 | 220 |
200 | 221 |
OLD | NEW |