| 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 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 #define UB -128 /* -min(128, round(2.018 * 64)) */ | 143 #define UB -128 /* -min(128, round(2.018 * 64)) */ |
| 144 #define UG 25 /* -round(-0.391 * 64) */ | 144 #define UG 25 /* -round(-0.391 * 64) */ |
| 145 #define VG 52 /* -round(-0.813 * 64) */ | 145 #define VG 52 /* -round(-0.813 * 64) */ |
| 146 #define VR -102 /* -round(1.596 * 64) */ | 146 #define VR -102 /* -round(1.596 * 64) */ |
| 147 | 147 |
| 148 // Bias values to subtract 16 from Y and 128 from U and V. | 148 // Bias values to subtract 16 from Y and 128 from U and V. |
| 149 #define BB (UB * 128 - YGB) | 149 #define BB (UB * 128 - YGB) |
| 150 #define BG (UG * 128 + VG * 128 - YGB) | 150 #define BG (UG * 128 + VG * 128 - YGB) |
| 151 #define BR (VR * 128 - YGB) | 151 #define BR (VR * 128 - YGB) |
| 152 | 152 |
| 153 YuvConstantsNEON SIMD_ALIGNED(kYuvConstantsNEON) = { |
| 154 { 128, 128, 128, 128, 102, 102, 102, 102, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 155 { 25, 25, 25, 25, 52, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 156 { BB, BG, BR, 0, 0, 0, 0, 0 }, |
| 157 { 0x0101 * YG, 0, 0, 0 } |
| 158 }; |
| 159 |
| 153 static uvec8 kUVToRB = { 128, 128, 128, 128, 102, 102, 102, 102, | 160 static uvec8 kUVToRB = { 128, 128, 128, 128, 102, 102, 102, 102, |
| 154 0, 0, 0, 0, 0, 0, 0, 0 }; | 161 0, 0, 0, 0, 0, 0, 0, 0 }; |
| 155 static uvec8 kUVToG = { 25, 25, 25, 25, 52, 52, 52, 52, | 162 static uvec8 kUVToG = { 25, 25, 25, 25, 52, 52, 52, 52, |
| 156 0, 0, 0, 0, 0, 0, 0, 0 }; | 163 0, 0, 0, 0, 0, 0, 0, 0 }; |
| 157 static vec16 kUVBiasBGR = { BB, BG, BR, 0, 0, 0, 0, 0 }; | 164 static vec16 kUVBiasBGR = { BB, BG, BR, 0, 0, 0, 0, 0 }; |
| 158 static vec32 kYToRgb = { 0x0101 * YG, 0, 0, 0 }; | 165 static vec32 kYToRgb = { 0x0101 * YG, 0, 0, 0 }; |
| 159 | 166 |
| 160 #undef YG | 167 #undef YG |
| 161 #undef YGB | 168 #undef YGB |
| 162 #undef UB | 169 #undef UB |
| (...skipping 26 matching lines...) Expand all Loading... |
| 189 "+r"(width) // %4 | 196 "+r"(width) // %4 |
| 190 : [kUVToRB]"r"(&kUVToRB), // %5 | 197 : [kUVToRB]"r"(&kUVToRB), // %5 |
| 191 [kUVToG]"r"(&kUVToG), // %6 | 198 [kUVToG]"r"(&kUVToG), // %6 |
| 192 [kUVBiasBGR]"r"(&kUVBiasBGR), | 199 [kUVBiasBGR]"r"(&kUVBiasBGR), |
| 193 [kYToRgb]"r"(&kYToRgb) | 200 [kYToRgb]"r"(&kYToRgb) |
| 194 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", | 201 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", |
| 195 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" | 202 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" |
| 196 ); | 203 ); |
| 197 } | 204 } |
| 198 | 205 |
| 199 void I422ToARGBRow_NEON(const uint8* src_y, | 206 void I422ToARGBMatrixRow_NEON(const uint8* src_y, |
| 200 const uint8* src_u, | 207 const uint8* src_u, |
| 201 const uint8* src_v, | 208 const uint8* src_v, |
| 202 uint8* dst_argb, | 209 uint8* dst_argb, |
| 203 int width) { | 210 struct YuvConstantsNEON* YuvConstants, |
| 211 int width) { |
| 204 asm volatile ( | 212 asm volatile ( |
| 205 YUV422TORGB_SETUP_REG | 213 YUV422TORGB_SETUP_REG |
| 206 "1: \n" | 214 "1: \n" |
| 207 READYUV422 | 215 READYUV422 |
| 208 YUV422TORGB | 216 YUV422TORGB |
| 209 "subs %4, %4, #8 \n" | 217 "subs %4, %4, #8 \n" |
| 210 "vmov.u8 d23, #255 \n" | 218 "vmov.u8 d23, #255 \n" |
| 211 MEMACCESS(3) | 219 MEMACCESS(3) |
| 212 "vst4.8 {d20, d21, d22, d23}, [%3]! \n" | 220 "vst4.8 {d20, d21, d22, d23}, [%3]! \n" |
| 213 "bgt 1b \n" | 221 "bgt 1b \n" |
| 214 : "+r"(src_y), // %0 | 222 : "+r"(src_y), // %0 |
| 215 "+r"(src_u), // %1 | 223 "+r"(src_u), // %1 |
| 216 "+r"(src_v), // %2 | 224 "+r"(src_v), // %2 |
| 217 "+r"(dst_argb), // %3 | 225 "+r"(dst_argb), // %3 |
| 218 "+r"(width) // %4 | 226 "+r"(width) // %4 |
| 219 : [kUVToRB]"r"(&kUVToRB), // %5 | 227 : [kUVToRB]"r"(&YuvConstants->kUVToRB), // %5 |
| 220 [kUVToG]"r"(&kUVToG), // %6 | 228 [kUVToG]"r"(&YuvConstants->kUVToG), // %6 |
| 221 [kUVBiasBGR]"r"(&kUVBiasBGR), | 229 [kUVBiasBGR]"r"(&YuvConstants->kUVBiasBGR), |
| 222 [kYToRgb]"r"(&kYToRgb) | 230 [kYToRgb]"r"(&YuvConstants->kYToRgb) |
| 223 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", | 231 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", |
| 224 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" | 232 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" |
| 225 ); | 233 ); |
| 226 } | 234 } |
| 227 | 235 |
| 228 void I411ToARGBRow_NEON(const uint8* src_y, | 236 void I411ToARGBRow_NEON(const uint8* src_y, |
| 229 const uint8* src_u, | 237 const uint8* src_u, |
| 230 const uint8* src_v, | 238 const uint8* src_v, |
| 231 uint8* dst_argb, | 239 uint8* dst_argb, |
| 232 int width) { | 240 int width) { |
| (...skipping 2762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2995 "r"(6) // %5 | 3003 "r"(6) // %5 |
| 2996 : "cc", "memory", "q0", "q1" // Clobber List | 3004 : "cc", "memory", "q0", "q1" // Clobber List |
| 2997 ); | 3005 ); |
| 2998 } | 3006 } |
| 2999 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) | 3007 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) |
| 3000 | 3008 |
| 3001 #ifdef __cplusplus | 3009 #ifdef __cplusplus |
| 3002 } // extern "C" | 3010 } // extern "C" |
| 3003 } // namespace libyuv | 3011 } // namespace libyuv |
| 3004 #endif | 3012 #endif |
| OLD | NEW |