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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 int clip_src_width; | 203 int clip_src_width; |
204 xl = (xl >> 16) & ~3; // Left edge aligned. | 204 xl = (xl >> 16) & ~3; // Left edge aligned. |
205 xr = (xr >> 16) + 1; // Right most pixel used. Bilinear uses 2 pixels. | 205 xr = (xr >> 16) + 1; // Right most pixel used. Bilinear uses 2 pixels. |
206 xr = (xr + 1 + 3) & ~3; // 1 beyond 4 pixel aligned right most pixel. | 206 xr = (xr + 1 + 3) & ~3; // 1 beyond 4 pixel aligned right most pixel. |
207 if (xr > src_width) { | 207 if (xr > src_width) { |
208 xr = src_width; | 208 xr = src_width; |
209 } | 209 } |
210 clip_src_width = (int)(xr - xl) * 4; // Width aligned to 4. | 210 clip_src_width = (int)(xr - xl) * 4; // Width aligned to 4. |
211 src_argb += xl * 4; | 211 src_argb += xl * 4; |
212 x -= (int)(xl << 16); | 212 x -= (int)(xl << 16); |
213 #if defined(HAS_INTERPOLATEROW_SSE2) | |
214 if (TestCpuFlag(kCpuHasSSE2)) { | |
215 InterpolateRow = InterpolateRow_Any_SSE2; | |
216 if (IS_ALIGNED(clip_src_width, 16)) { | |
217 InterpolateRow = InterpolateRow_SSE2; | |
218 } | |
219 } | |
220 #endif | |
221 #if defined(HAS_INTERPOLATEROW_SSSE3) | 213 #if defined(HAS_INTERPOLATEROW_SSSE3) |
222 if (TestCpuFlag(kCpuHasSSSE3)) { | 214 if (TestCpuFlag(kCpuHasSSSE3)) { |
223 InterpolateRow = InterpolateRow_Any_SSSE3; | 215 InterpolateRow = InterpolateRow_Any_SSSE3; |
224 if (IS_ALIGNED(clip_src_width, 16)) { | 216 if (IS_ALIGNED(clip_src_width, 16)) { |
225 InterpolateRow = InterpolateRow_SSSE3; | 217 InterpolateRow = InterpolateRow_SSSE3; |
226 } | 218 } |
227 } | 219 } |
228 #endif | 220 #endif |
229 #if defined(HAS_INTERPOLATEROW_AVX2) | 221 #if defined(HAS_INTERPOLATEROW_AVX2) |
230 if (TestCpuFlag(kCpuHasAVX2)) { | 222 if (TestCpuFlag(kCpuHasAVX2)) { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 int x, int dx, int y, int dy, | 293 int x, int dx, int y, int dy, |
302 enum FilterMode filtering) { | 294 enum FilterMode filtering) { |
303 int j; | 295 int j; |
304 void (*InterpolateRow)(uint8* dst_argb, const uint8* src_argb, | 296 void (*InterpolateRow)(uint8* dst_argb, const uint8* src_argb, |
305 ptrdiff_t src_stride, int dst_width, int source_y_fraction) = | 297 ptrdiff_t src_stride, int dst_width, int source_y_fraction) = |
306 InterpolateRow_C; | 298 InterpolateRow_C; |
307 void (*ScaleARGBFilterCols)(uint8* dst_argb, const uint8* src_argb, | 299 void (*ScaleARGBFilterCols)(uint8* dst_argb, const uint8* src_argb, |
308 int dst_width, int x, int dx) = | 300 int dst_width, int x, int dx) = |
309 filtering ? ScaleARGBFilterCols_C : ScaleARGBCols_C; | 301 filtering ? ScaleARGBFilterCols_C : ScaleARGBCols_C; |
310 const int max_y = (src_height - 1) << 16; | 302 const int max_y = (src_height - 1) << 16; |
311 #if defined(HAS_INTERPOLATEROW_SSE2) | |
312 if (TestCpuFlag(kCpuHasSSE2)) { | |
313 InterpolateRow = InterpolateRow_Any_SSE2; | |
314 if (IS_ALIGNED(dst_width, 4)) { | |
315 InterpolateRow = InterpolateRow_SSE2; | |
316 } | |
317 } | |
318 #endif | |
319 #if defined(HAS_INTERPOLATEROW_SSSE3) | 303 #if defined(HAS_INTERPOLATEROW_SSSE3) |
320 if (TestCpuFlag(kCpuHasSSSE3)) { | 304 if (TestCpuFlag(kCpuHasSSSE3)) { |
321 InterpolateRow = InterpolateRow_Any_SSSE3; | 305 InterpolateRow = InterpolateRow_Any_SSSE3; |
322 if (IS_ALIGNED(dst_width, 4)) { | 306 if (IS_ALIGNED(dst_width, 4)) { |
323 InterpolateRow = InterpolateRow_SSSE3; | 307 InterpolateRow = InterpolateRow_SSSE3; |
324 } | 308 } |
325 } | 309 } |
326 #endif | 310 #endif |
327 #if defined(HAS_INTERPOLATEROW_AVX2) | 311 #if defined(HAS_INTERPOLATEROW_AVX2) |
328 if (TestCpuFlag(kCpuHasAVX2)) { | 312 if (TestCpuFlag(kCpuHasAVX2)) { |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
487 IS_ALIGNED(src_u, 2) && IS_ALIGNED(src_stride_u, 2) && | 471 IS_ALIGNED(src_u, 2) && IS_ALIGNED(src_stride_u, 2) && |
488 IS_ALIGNED(src_v, 2) && IS_ALIGNED(src_stride_v, 2) && | 472 IS_ALIGNED(src_v, 2) && IS_ALIGNED(src_stride_v, 2) && |
489 IS_ALIGNED(dst_argb, 4) && IS_ALIGNED(dst_stride_argb, 4)) { | 473 IS_ALIGNED(dst_argb, 4) && IS_ALIGNED(dst_stride_argb, 4)) { |
490 I422ToARGBRow = I422ToARGBRow_MIPS_DSPR2; | 474 I422ToARGBRow = I422ToARGBRow_MIPS_DSPR2; |
491 } | 475 } |
492 #endif | 476 #endif |
493 | 477 |
494 void (*InterpolateRow)(uint8* dst_argb, const uint8* src_argb, | 478 void (*InterpolateRow)(uint8* dst_argb, const uint8* src_argb, |
495 ptrdiff_t src_stride, int dst_width, int source_y_fraction) = | 479 ptrdiff_t src_stride, int dst_width, int source_y_fraction) = |
496 InterpolateRow_C; | 480 InterpolateRow_C; |
497 #if defined(HAS_INTERPOLATEROW_SSE2) | |
498 if (TestCpuFlag(kCpuHasSSE2)) { | |
499 InterpolateRow = InterpolateRow_Any_SSE2; | |
500 if (IS_ALIGNED(dst_width, 4)) { | |
501 InterpolateRow = InterpolateRow_SSE2; | |
502 } | |
503 } | |
504 #endif | |
505 #if defined(HAS_INTERPOLATEROW_SSSE3) | 481 #if defined(HAS_INTERPOLATEROW_SSSE3) |
506 if (TestCpuFlag(kCpuHasSSSE3)) { | 482 if (TestCpuFlag(kCpuHasSSSE3)) { |
507 InterpolateRow = InterpolateRow_Any_SSSE3; | 483 InterpolateRow = InterpolateRow_Any_SSSE3; |
508 if (IS_ALIGNED(dst_width, 4)) { | 484 if (IS_ALIGNED(dst_width, 4)) { |
509 InterpolateRow = InterpolateRow_SSSE3; | 485 InterpolateRow = InterpolateRow_SSSE3; |
510 } | 486 } |
511 } | 487 } |
512 #endif | 488 #endif |
513 #if defined(HAS_INTERPOLATEROW_AVX2) | 489 #if defined(HAS_INTERPOLATEROW_AVX2) |
514 if (TestCpuFlag(kCpuHasAVX2)) { | 490 if (TestCpuFlag(kCpuHasAVX2)) { |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
875 clip_x, clip_y, clip_width, clip_height, | 851 clip_x, clip_y, clip_width, clip_height, |
876 filtering); | 852 filtering); |
877 free(argb_buffer); | 853 free(argb_buffer); |
878 return r; | 854 return r; |
879 } | 855 } |
880 | 856 |
881 #ifdef __cplusplus | 857 #ifdef __cplusplus |
882 } // extern "C" | 858 } // extern "C" |
883 } // namespace libyuv | 859 } // namespace libyuv |
884 #endif | 860 #endif |
OLD | NEW |