| 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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 } | 100 } |
| 101 } | 101 } |
| 102 #endif | 102 #endif |
| 103 #if defined(HAS_SCALEROWDOWN2_DSPR2) | 103 #if defined(HAS_SCALEROWDOWN2_DSPR2) |
| 104 if (TestCpuFlag(kCpuHasDSPR2) && IS_ALIGNED(src_ptr, 4) && | 104 if (TestCpuFlag(kCpuHasDSPR2) && IS_ALIGNED(src_ptr, 4) && |
| 105 IS_ALIGNED(src_stride, 4) && IS_ALIGNED(row_stride, 4) && | 105 IS_ALIGNED(src_stride, 4) && IS_ALIGNED(row_stride, 4) && |
| 106 IS_ALIGNED(dst_ptr, 4) && IS_ALIGNED(dst_stride, 4)) { | 106 IS_ALIGNED(dst_ptr, 4) && IS_ALIGNED(dst_stride, 4)) { |
| 107 ScaleRowDown2 = filtering ? ScaleRowDown2Box_DSPR2 : ScaleRowDown2_DSPR2; | 107 ScaleRowDown2 = filtering ? ScaleRowDown2Box_DSPR2 : ScaleRowDown2_DSPR2; |
| 108 } | 108 } |
| 109 #endif | 109 #endif |
| 110 #if defined(HAS_SCALEROWDOWN2_MSA) |
| 111 if (TestCpuFlag(kCpuHasMSA)) { |
| 112 ScaleRowDown2 = |
| 113 filtering == kFilterNone |
| 114 ? ScaleRowDown2_Any_MSA |
| 115 : (filtering == kFilterLinear ? ScaleRowDown2Linear_Any_MSA |
| 116 : ScaleRowDown2Box_Any_MSA); |
| 117 if (IS_ALIGNED(dst_width, 32)) { |
| 118 ScaleRowDown2 = filtering == kFilterNone ? ScaleRowDown2_MSA |
| 119 : (filtering == kFilterLinear |
| 120 ? ScaleRowDown2Linear_MSA |
| 121 : ScaleRowDown2Box_MSA); |
| 122 } |
| 123 } |
| 124 #endif |
| 110 | 125 |
| 111 if (filtering == kFilterLinear) { | 126 if (filtering == kFilterLinear) { |
| 112 src_stride = 0; | 127 src_stride = 0; |
| 113 } | 128 } |
| 114 // TODO(fbarchard): Loop through source height to allow odd height. | 129 // TODO(fbarchard): Loop through source height to allow odd height. |
| 115 for (y = 0; y < dst_height; ++y) { | 130 for (y = 0; y < dst_height; ++y) { |
| 116 ScaleRowDown2(src_ptr, src_stride, dst_ptr, dst_width); | 131 ScaleRowDown2(src_ptr, src_stride, dst_ptr, dst_width); |
| 117 src_ptr += row_stride; | 132 src_ptr += row_stride; |
| 118 dst_ptr += dst_stride; | 133 dst_ptr += dst_stride; |
| 119 } | 134 } |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 } | 240 } |
| 226 } | 241 } |
| 227 #endif | 242 #endif |
| 228 #if defined(HAS_SCALEROWDOWN4_DSPR2) | 243 #if defined(HAS_SCALEROWDOWN4_DSPR2) |
| 229 if (TestCpuFlag(kCpuHasDSPR2) && IS_ALIGNED(row_stride, 4) && | 244 if (TestCpuFlag(kCpuHasDSPR2) && IS_ALIGNED(row_stride, 4) && |
| 230 IS_ALIGNED(src_ptr, 4) && IS_ALIGNED(src_stride, 4) && | 245 IS_ALIGNED(src_ptr, 4) && IS_ALIGNED(src_stride, 4) && |
| 231 IS_ALIGNED(dst_ptr, 4) && IS_ALIGNED(dst_stride, 4)) { | 246 IS_ALIGNED(dst_ptr, 4) && IS_ALIGNED(dst_stride, 4)) { |
| 232 ScaleRowDown4 = filtering ? ScaleRowDown4Box_DSPR2 : ScaleRowDown4_DSPR2; | 247 ScaleRowDown4 = filtering ? ScaleRowDown4Box_DSPR2 : ScaleRowDown4_DSPR2; |
| 233 } | 248 } |
| 234 #endif | 249 #endif |
| 250 #if defined(HAS_SCALEROWDOWN4_MSA) |
| 251 if (TestCpuFlag(kCpuHasMSA)) { |
| 252 ScaleRowDown4 = |
| 253 filtering ? ScaleRowDown4Box_Any_MSA : ScaleRowDown4_Any_MSA; |
| 254 if (IS_ALIGNED(dst_width, 16)) { |
| 255 ScaleRowDown4 = filtering ? ScaleRowDown4Box_MSA : ScaleRowDown4_MSA; |
| 256 } |
| 257 } |
| 258 #endif |
| 235 | 259 |
| 236 if (filtering == kFilterLinear) { | 260 if (filtering == kFilterLinear) { |
| 237 src_stride = 0; | 261 src_stride = 0; |
| 238 } | 262 } |
| 239 for (y = 0; y < dst_height; ++y) { | 263 for (y = 0; y < dst_height; ++y) { |
| 240 ScaleRowDown4(src_ptr, src_stride, dst_ptr, dst_width); | 264 ScaleRowDown4(src_ptr, src_stride, dst_ptr, dst_width); |
| 241 src_ptr += row_stride; | 265 src_ptr += row_stride; |
| 242 dst_ptr += dst_stride; | 266 dst_ptr += dst_stride; |
| 243 } | 267 } |
| 244 } | 268 } |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 IS_ALIGNED(dst_ptr, 4) && IS_ALIGNED(dst_stride, 4)) { | 584 IS_ALIGNED(dst_ptr, 4) && IS_ALIGNED(dst_stride, 4)) { |
| 561 if (!filtering) { | 585 if (!filtering) { |
| 562 ScaleRowDown38_3 = ScaleRowDown38_DSPR2; | 586 ScaleRowDown38_3 = ScaleRowDown38_DSPR2; |
| 563 ScaleRowDown38_2 = ScaleRowDown38_DSPR2; | 587 ScaleRowDown38_2 = ScaleRowDown38_DSPR2; |
| 564 } else { | 588 } else { |
| 565 ScaleRowDown38_3 = ScaleRowDown38_3_Box_DSPR2; | 589 ScaleRowDown38_3 = ScaleRowDown38_3_Box_DSPR2; |
| 566 ScaleRowDown38_2 = ScaleRowDown38_2_Box_DSPR2; | 590 ScaleRowDown38_2 = ScaleRowDown38_2_Box_DSPR2; |
| 567 } | 591 } |
| 568 } | 592 } |
| 569 #endif | 593 #endif |
| 594 #if defined(HAS_SCALEROWDOWN38_MSA) |
| 595 if (TestCpuFlag(kCpuHasMSA)) { |
| 596 if (!filtering) { |
| 597 ScaleRowDown38_3 = ScaleRowDown38_Any_MSA; |
| 598 ScaleRowDown38_2 = ScaleRowDown38_Any_MSA; |
| 599 } else { |
| 600 ScaleRowDown38_3 = ScaleRowDown38_3_Box_Any_MSA; |
| 601 ScaleRowDown38_2 = ScaleRowDown38_2_Box_Any_MSA; |
| 602 } |
| 603 if (dst_width % 12 == 0) { |
| 604 if (!filtering) { |
| 605 ScaleRowDown38_3 = ScaleRowDown38_MSA; |
| 606 ScaleRowDown38_2 = ScaleRowDown38_MSA; |
| 607 } else { |
| 608 ScaleRowDown38_3 = ScaleRowDown38_3_Box_MSA; |
| 609 ScaleRowDown38_2 = ScaleRowDown38_2_Box_MSA; |
| 610 } |
| 611 } |
| 612 } |
| 613 #endif |
| 570 | 614 |
| 571 for (y = 0; y < dst_height - 2; y += 3) { | 615 for (y = 0; y < dst_height - 2; y += 3) { |
| 572 ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width); | 616 ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width); |
| 573 src_ptr += src_stride * 3; | 617 src_ptr += src_stride * 3; |
| 574 dst_ptr += dst_stride; | 618 dst_ptr += dst_stride; |
| 575 ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width); | 619 ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width); |
| 576 src_ptr += src_stride * 3; | 620 src_ptr += src_stride * 3; |
| 577 dst_ptr += dst_stride; | 621 dst_ptr += dst_stride; |
| 578 ScaleRowDown38_2(src_ptr, filter_stride, dst_ptr, dst_width); | 622 ScaleRowDown38_2(src_ptr, filter_stride, dst_ptr, dst_width); |
| 579 src_ptr += src_stride * 2; | 623 src_ptr += src_stride * 2; |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 835 } | 879 } |
| 836 #endif | 880 #endif |
| 837 #if defined(HAS_SCALEADDROW_NEON) | 881 #if defined(HAS_SCALEADDROW_NEON) |
| 838 if (TestCpuFlag(kCpuHasNEON)) { | 882 if (TestCpuFlag(kCpuHasNEON)) { |
| 839 ScaleAddRow = ScaleAddRow_Any_NEON; | 883 ScaleAddRow = ScaleAddRow_Any_NEON; |
| 840 if (IS_ALIGNED(src_width, 16)) { | 884 if (IS_ALIGNED(src_width, 16)) { |
| 841 ScaleAddRow = ScaleAddRow_NEON; | 885 ScaleAddRow = ScaleAddRow_NEON; |
| 842 } | 886 } |
| 843 } | 887 } |
| 844 #endif | 888 #endif |
| 889 #if defined(HAS_SCALEADDROW_MSA) |
| 890 if (TestCpuFlag(kCpuHasMSA)) { |
| 891 ScaleAddRow = ScaleAddRow_Any_MSA; |
| 892 if (IS_ALIGNED(src_width, 16)) { |
| 893 ScaleAddRow = ScaleAddRow_MSA; |
| 894 } |
| 895 } |
| 896 #endif |
| 845 | 897 |
| 846 for (j = 0; j < dst_height; ++j) { | 898 for (j = 0; j < dst_height; ++j) { |
| 847 int boxheight; | 899 int boxheight; |
| 848 int iy = y >> 16; | 900 int iy = y >> 16; |
| 849 const uint8* src = src_ptr + iy * src_stride; | 901 const uint8* src = src_ptr + iy * src_stride; |
| 850 y += dy; | 902 y += dy; |
| 851 if (y > max_y) { | 903 if (y > max_y) { |
| 852 y = max_y; | 904 y = max_y; |
| 853 } | 905 } |
| 854 boxheight = MIN1((y >> 16) - iy); | 906 boxheight = MIN1((y >> 16) - iy); |
| (...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1770 return I420Scale(src_y, src_width, src_u, src_halfwidth, src_v, src_halfwidth, | 1822 return I420Scale(src_y, src_width, src_u, src_halfwidth, src_v, src_halfwidth, |
| 1771 src_width, src_height, dst_y, dst_width, dst_u, | 1823 src_width, src_height, dst_y, dst_width, dst_u, |
| 1772 dst_halfwidth, dst_v, dst_halfwidth, dst_width, aheight, | 1824 dst_halfwidth, dst_v, dst_halfwidth, dst_width, aheight, |
| 1773 interpolate ? kFilterBox : kFilterNone); | 1825 interpolate ? kFilterBox : kFilterNone); |
| 1774 } | 1826 } |
| 1775 | 1827 |
| 1776 #ifdef __cplusplus | 1828 #ifdef __cplusplus |
| 1777 } // extern "C" | 1829 } // extern "C" |
| 1778 } // namespace libyuv | 1830 } // namespace libyuv |
| 1779 #endif | 1831 #endif |
| OLD | NEW |