| Index: source/scale.cc
|
| diff --git a/source/scale.cc b/source/scale.cc
|
| index b61ace98bb12779d7c999df51e3c4d5f2e2f846b..e66f90a0dd6b9339aa02b2f68d6ef67810a8edd5 100644
|
| --- a/source/scale.cc
|
| +++ b/source/scale.cc
|
| @@ -107,6 +107,21 @@ static void ScalePlaneDown2(int src_width,
|
| ScaleRowDown2 = filtering ? ScaleRowDown2Box_DSPR2 : ScaleRowDown2_DSPR2;
|
| }
|
| #endif
|
| +#if defined(HAS_SCALEROWDOWN2_MSA)
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + ScaleRowDown2 =
|
| + filtering == kFilterNone
|
| + ? ScaleRowDown2_Any_MSA
|
| + : (filtering == kFilterLinear ? ScaleRowDown2Linear_Any_MSA
|
| + : ScaleRowDown2Box_Any_MSA);
|
| + if (IS_ALIGNED(dst_width, 32)) {
|
| + ScaleRowDown2 = filtering == kFilterNone ? ScaleRowDown2_MSA
|
| + : (filtering == kFilterLinear
|
| + ? ScaleRowDown2Linear_MSA
|
| + : ScaleRowDown2Box_MSA);
|
| + }
|
| + }
|
| +#endif
|
|
|
| if (filtering == kFilterLinear) {
|
| src_stride = 0;
|
| @@ -232,6 +247,15 @@ static void ScalePlaneDown4(int src_width,
|
| ScaleRowDown4 = filtering ? ScaleRowDown4Box_DSPR2 : ScaleRowDown4_DSPR2;
|
| }
|
| #endif
|
| +#if defined(HAS_SCALEROWDOWN4_MSA)
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + ScaleRowDown4 =
|
| + filtering ? ScaleRowDown4Box_Any_MSA : ScaleRowDown4_Any_MSA;
|
| + if (IS_ALIGNED(dst_width, 16)) {
|
| + ScaleRowDown4 = filtering ? ScaleRowDown4Box_MSA : ScaleRowDown4_MSA;
|
| + }
|
| + }
|
| +#endif
|
|
|
| if (filtering == kFilterLinear) {
|
| src_stride = 0;
|
| @@ -567,6 +591,26 @@ static void ScalePlaneDown38(int src_width,
|
| }
|
| }
|
| #endif
|
| +#if defined(HAS_SCALEROWDOWN38_MSA)
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + if (!filtering) {
|
| + ScaleRowDown38_3 = ScaleRowDown38_Any_MSA;
|
| + ScaleRowDown38_2 = ScaleRowDown38_Any_MSA;
|
| + } else {
|
| + ScaleRowDown38_3 = ScaleRowDown38_3_Box_Any_MSA;
|
| + ScaleRowDown38_2 = ScaleRowDown38_2_Box_Any_MSA;
|
| + }
|
| + if (dst_width % 12 == 0) {
|
| + if (!filtering) {
|
| + ScaleRowDown38_3 = ScaleRowDown38_MSA;
|
| + ScaleRowDown38_2 = ScaleRowDown38_MSA;
|
| + } else {
|
| + ScaleRowDown38_3 = ScaleRowDown38_3_Box_MSA;
|
| + ScaleRowDown38_2 = ScaleRowDown38_2_Box_MSA;
|
| + }
|
| + }
|
| + }
|
| +#endif
|
|
|
| for (y = 0; y < dst_height - 2; y += 3) {
|
| ScaleRowDown38_3(src_ptr, filter_stride, dst_ptr, dst_width);
|
| @@ -842,6 +886,14 @@ static void ScalePlaneBox(int src_width,
|
| }
|
| }
|
| #endif
|
| +#if defined(HAS_SCALEADDROW_MSA)
|
| + if (TestCpuFlag(kCpuHasMSA)) {
|
| + ScaleAddRow = ScaleAddRow_Any_MSA;
|
| + if (IS_ALIGNED(src_width, 16)) {
|
| + ScaleAddRow = ScaleAddRow_MSA;
|
| + }
|
| + }
|
| +#endif
|
|
|
| for (j = 0; j < dst_height; ++j) {
|
| int boxheight;
|
|
|