| Index: source/row_msa.cc
|
| diff --git a/source/row_msa.cc b/source/row_msa.cc
|
| index 32d296391b64fa3bd4d3478098b516dbca4faab2..ff105a0088434546b74b8ad066011b5c33937dfd 100644
|
| --- a/source/row_msa.cc
|
| +++ b/source/row_msa.cc
|
| @@ -229,12 +229,12 @@ void I422ToARGBRow_MSA(const uint8* src_y,
|
| }
|
| }
|
|
|
| -void YUVTORGBARow_MSA(const uint8* src_y,
|
| - const uint8* src_u,
|
| - const uint8* src_v,
|
| - uint8* rgb_buf,
|
| - const struct YuvConstants* yuvconstants,
|
| - int width) {
|
| +void I422ToRGBARow_MSA(const uint8* src_y,
|
| + const uint8* src_u,
|
| + const uint8* src_v,
|
| + uint8* rgb_buf,
|
| + const struct YuvConstants* yuvconstants,
|
| + int width) {
|
| int x;
|
| v16u8 src0, src1, src2;
|
| v8i16 vec0, vec1, vec2;
|
| @@ -289,12 +289,12 @@ void I422AlphaToARGBRow_MSA(const uint8* src_y,
|
| }
|
| }
|
|
|
| -void YUVTORGB24Row_MSA(const uint8* src_y,
|
| - const uint8* src_u,
|
| - const uint8* src_v,
|
| - uint8* rgb_buf,
|
| - const struct YuvConstants* yuvconstants,
|
| - int32 width) {
|
| +void I422ToRGB24Row_MSA(const uint8* src_y,
|
| + const uint8* src_u,
|
| + const uint8* src_v,
|
| + uint8* rgb_buf,
|
| + const struct YuvConstants* yuvconstants,
|
| + int32 width) {
|
| int x;
|
| int64 data_u, data_v;
|
| v16u8 src0, src1, src2, src3, src4, src5, dst0, dst1, dst2;
|
| @@ -340,12 +340,12 @@ void YUVTORGB24Row_MSA(const uint8* src_y,
|
| }
|
|
|
| // TODO(fbarchard): Consider AND instead of shift to isolate 5 upper bits of R.
|
| -void YUVTORGB565Row_MSA(const uint8* src_y,
|
| - const uint8* src_u,
|
| - const uint8* src_v,
|
| - uint8* dst_rgb565,
|
| - const struct YuvConstants* yuvconstants,
|
| - int width) {
|
| +void I422ToRGB565Row_MSA(const uint8* src_y,
|
| + const uint8* src_u,
|
| + const uint8* src_v,
|
| + uint8* dst_rgb565,
|
| + const struct YuvConstants* yuvconstants,
|
| + int width) {
|
| int x;
|
| v16u8 src0, src1, src2, dst0;
|
| v8i16 vec0, vec1, vec2;
|
| @@ -740,6 +740,54 @@ void ARGBToUVRow_MSA(const uint8* src_argb0,
|
| }
|
| }
|
|
|
| +void ARGBToRGB24Row_MSA(const uint8* src_argb, uint8* dst_rgb, int width) {
|
| + int x;
|
| + v16u8 src0, src1, src2, src3, dst0, dst1, dst2;
|
| + v16i8 shuffler0 = {0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 14, 16, 17, 18, 20};
|
| + v16i8 shuffler1 = { 5, 6, 8, 9, 10, 12, 13, 14,
|
| + 16, 17, 18, 20, 21, 22, 24, 25};
|
| + v16i8 shuffler2 = {10, 12, 13, 14, 16, 17, 18, 20,
|
| + 21, 22, 24, 25, 26, 28, 29, 30};
|
| +
|
| + for (x = 0; x < width; x += 16) {
|
| + src0 = (v16u8)__msa_ld_b((v16i8*)src_argb, 0);
|
| + src1 = (v16u8)__msa_ld_b((v16i8*)src_argb, 16);
|
| + src2 = (v16u8)__msa_ld_b((v16i8*)src_argb, 32);
|
| + src3 = (v16u8)__msa_ld_b((v16i8*)src_argb, 48);
|
| + dst0 = (v16u8)__msa_vshf_b(shuffler0, (v16i8)src1, (v16i8)src0);
|
| + dst1 = (v16u8)__msa_vshf_b(shuffler1, (v16i8)src2, (v16i8)src1);
|
| + dst2 = (v16u8)__msa_vshf_b(shuffler2, (v16i8)src3, (v16i8)src2);
|
| + ST_UB2(dst0, dst1, dst_rgb, 16);
|
| + ST_UB(dst2, (dst_rgb + 32));
|
| + src_argb += 64;
|
| + dst_rgb += 48;
|
| + }
|
| +}
|
| +
|
| +void ARGBToRAWRow_MSA(const uint8* src_argb, uint8* dst_rgb, int width) {
|
| + int x;
|
| + v16u8 src0, src1, src2, src3, dst0, dst1, dst2;
|
| + v16i8 shuffler0 = {2, 1, 0, 6, 5, 4, 10, 9, 8, 14, 13, 12, 18, 17, 16, 22};
|
| + v16i8 shuffler1 = { 5, 4, 10, 9, 8, 14, 13, 12,
|
| + 18, 17, 16, 22, 21, 20, 26, 25};
|
| + v16i8 shuffler2 = { 8, 14, 13, 12, 18, 17, 16, 22,
|
| + 21, 20, 26, 25, 24, 30, 29, 28};
|
| +
|
| + for (x = 0; x < width; x += 16) {
|
| + src0 = (v16u8)__msa_ld_b((v16i8*)src_argb, 0);
|
| + src1 = (v16u8)__msa_ld_b((v16i8*)src_argb, 16);
|
| + src2 = (v16u8)__msa_ld_b((v16i8*)src_argb, 32);
|
| + src3 = (v16u8)__msa_ld_b((v16i8*)src_argb, 48);
|
| + dst0 = (v16u8)__msa_vshf_b(shuffler0, (v16i8)src1, (v16i8)src0);
|
| + dst1 = (v16u8)__msa_vshf_b(shuffler1, (v16i8)src2, (v16i8)src1);
|
| + dst2 = (v16u8)__msa_vshf_b(shuffler2, (v16i8)src3, (v16i8)src2);
|
| + ST_UB2(dst0, dst1, dst_rgb, 16);
|
| + ST_UB(dst2, (dst_rgb + 32));
|
| + src_argb += 64;
|
| + dst_rgb += 48;
|
| + }
|
| +}
|
| +
|
| void ARGB4444ToARGBRow_MSA(const uint8* src_argb4444,
|
| uint8* dst_argb,
|
| int width) {
|
|
|