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 982 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 ++src_y; | 993 ++src_y; |
994 } | 994 } |
995 } | 995 } |
996 | 996 |
997 // BT.601 YUV to RGB reference | 997 // BT.601 YUV to RGB reference |
998 // R = (Y - 16) * 1.164 - V * -1.596 | 998 // R = (Y - 16) * 1.164 - V * -1.596 |
999 // G = (Y - 16) * 1.164 - U * 0.391 - V * 0.813 | 999 // G = (Y - 16) * 1.164 - U * 0.391 - V * 0.813 |
1000 // B = (Y - 16) * 1.164 - U * -2.018 | 1000 // B = (Y - 16) * 1.164 - U * -2.018 |
1001 | 1001 |
1002 // Y contribution to R,G,B. Scale and bias. | 1002 // Y contribution to R,G,B. Scale and bias. |
1003 // TODO(fbarchard): Consider moving constants into a common header. | |
1004 #define YG 18997 /* round(1.164 * 64 * 256 * 256 / 257) */ | 1003 #define YG 18997 /* round(1.164 * 64 * 256 * 256 / 257) */ |
1005 #define YGB -1160 /* 1.164 * 64 * -16 + 64 / 2 */ | 1004 #define YGB -1160 /* 1.164 * 64 * -16 + 64 / 2 */ |
1006 | 1005 |
1007 // U and V contributions to R,G,B. | 1006 // U and V contributions to R,G,B. |
1008 #define UB -128 /* max(-128, round(-2.018 * 64)) */ | 1007 #define UB -128 /* max(-128, round(-2.018 * 64)) */ |
1009 #define UG 25 /* round(0.391 * 64) */ | 1008 #define UG 25 /* round(0.391 * 64) */ |
1010 #define VG 52 /* round(0.813 * 64) */ | 1009 #define VG 52 /* round(0.813 * 64) */ |
1011 #define VR -102 /* round(-1.596 * 64) */ | 1010 #define VR -102 /* round(-1.596 * 64) */ |
1012 | 1011 |
1013 // Bias values to subtract 16 from Y and 128 from U and V, with rounding. | 1012 // Bias values to subtract 16 from Y and 128 from U and V. |
1014 #define BB (UB * 128 + YGB) | 1013 #define BB (UB * 128 + YGB) |
1015 #define BG (UG * 128 + VG * 128 + YGB) | 1014 #define BG (UG * 128 + VG * 128 + YGB) |
1016 #define BR (VR * 128 + YGB) | 1015 #define BR (VR * 128 + YGB) |
| 1016 |
| 1017 // BT601 constants for YUV to RGB. |
| 1018 YuvConstants SIMD_ALIGNED(kYuvConstants) = { |
| 1019 { UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, |
| 1020 UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0 }, |
| 1021 { UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, |
| 1022 UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG }, |
| 1023 { 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, |
| 1024 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR }, |
| 1025 { BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB }, |
| 1026 { BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG }, |
| 1027 { BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR }, |
| 1028 { YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG } |
| 1029 }; |
| 1030 |
| 1031 // BT601 constants for NV21 where chroma plane is VU instead of UV. |
| 1032 YuvConstants SIMD_ALIGNED(kYvuConstants) = { |
| 1033 { 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, |
| 1034 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB, 0, UB }, |
| 1035 { VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, |
| 1036 VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG }, |
| 1037 { VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, |
| 1038 VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0, VR, 0 }, |
| 1039 { BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB, BB }, |
| 1040 { BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG, BG }, |
| 1041 { BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR, BR }, |
| 1042 { YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG, YG } |
| 1043 }; |
| 1044 |
| 1045 YuvConstantsNEON SIMD_ALIGNED(kYuvConstantsNEON) = { |
| 1046 { -UB, -UB, -UB, -UB, -VR, -VR, -VR, -VR, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 1047 { UG, UG, UG, UG, VG, VG, VG, VG, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 1048 { BB, BG, BR, 0, 0, 0, 0, 0 }, |
| 1049 { 0x0101 * YG, 0, 0, 0 } |
| 1050 }; |
1017 | 1051 |
1018 // C reference code that mimics the YUV assembly. | 1052 // C reference code that mimics the YUV assembly. |
1019 static __inline void YuvPixel(uint8 y, uint8 u, uint8 v, | 1053 static __inline void YuvPixel(uint8 y, uint8 u, uint8 v, |
1020 uint8* b, uint8* g, uint8* r) { | 1054 uint8* b, uint8* g, uint8* r) { |
1021 uint32 y1 = (uint32)(y * 0x0101 * YG) >> 16; | 1055 uint32 y1 = (uint32)(y * 0x0101 * YG) >> 16; |
1022 *b = Clamp((int32)(-(u * UB) + y1 + BB) >> 6); | 1056 *b = Clamp((int32)(-(u * UB) + y1 + BB) >> 6); |
1023 *g = Clamp((int32)(-(v * VG + u * UG) + y1 + BG) >> 6); | 1057 *g = Clamp((int32)(-(v * VG + u * UG) + y1 + BG) >> 6); |
1024 *r = Clamp((int32)(-(v * VR)+ y1 + BR) >> 6); | 1058 *r = Clamp((int32)(-(v * VR)+ y1 + BR) >> 6); |
1025 } | 1059 } |
1026 | 1060 |
1027 // C reference code that mimics the YUV assembly. | 1061 // C reference code that mimics the YUV assembly. |
1028 static __inline void YPixel(uint8 y, uint8* b, uint8* g, uint8* r) { | 1062 static __inline void YPixel(uint8 y, uint8* b, uint8* g, uint8* r) { |
1029 uint32 y1 = (uint32)(y * 0x0101 * YG) >> 16; | 1063 uint32 y1 = (uint32)(y * 0x0101 * YG) >> 16; |
1030 *b = Clamp((int32)(y1 + YGB) >> 6); | 1064 *b = Clamp((int32)(y1 + YGB) >> 6); |
1031 *g = Clamp((int32)(y1 + YGB) >> 6); | 1065 *g = Clamp((int32)(y1 + YGB) >> 6); |
1032 *r = Clamp((int32)(y1 + YGB) >> 6); | 1066 *r = Clamp((int32)(y1 + YGB) >> 6); |
1033 } | 1067 } |
1034 | |
1035 #undef YG | 1068 #undef YG |
1036 #undef YGB | 1069 #undef YGB |
1037 #undef UB | 1070 #undef UB |
1038 #undef UG | 1071 #undef UG |
1039 #undef VG | 1072 #undef VG |
1040 #undef VR | 1073 #undef VR |
1041 #undef BB | 1074 #undef BB |
1042 #undef BG | 1075 #undef BG |
1043 #undef BR | 1076 #undef BR |
1044 | 1077 |
1045 // JPEG YUV to RGB reference | 1078 // JPEG YUV to RGB reference |
1046 // * R = Y - V * -1.40200 | 1079 // * R = Y - V * -1.40200 |
1047 // * G = Y - U * 0.34414 - V * 0.71414 | 1080 // * G = Y - U * 0.34414 - V * 0.71414 |
1048 // * B = Y - U * -1.77200 | 1081 // * B = Y - U * -1.77200 |
1049 | 1082 |
1050 // Y contribution to R,G,B. Scale and bias. | 1083 // Y contribution to R,G,B. Scale and bias. |
1051 // TODO(fbarchard): Consider moving constants into a common header. | |
1052 #define YGJ 16320 /* round(1.000 * 64 * 256 * 256 / 257) */ | 1084 #define YGJ 16320 /* round(1.000 * 64 * 256 * 256 / 257) */ |
1053 #define YGBJ 32 /* 64 / 2 */ | 1085 #define YGBJ 32 /* 64 / 2 */ |
1054 | 1086 |
1055 // U and V contributions to R,G,B. | 1087 // U and V contributions to R,G,B. |
1056 #define UBJ -113 /* round(-1.77200 * 64) */ | 1088 #define UBJ -113 /* round(-1.77200 * 64) */ |
1057 #define UGJ 22 /* round(0.34414 * 64) */ | 1089 #define UGJ 22 /* round(0.34414 * 64) */ |
1058 #define VGJ 46 /* round(0.71414 * 64) */ | 1090 #define VGJ 46 /* round(0.71414 * 64) */ |
1059 #define VRJ -90 /* round(-1.40200 * 64) */ | 1091 #define VRJ -90 /* round(-1.40200 * 64) */ |
1060 | 1092 |
1061 // Bias values to round Y and subtract 128 from U and V. | 1093 // Bias values to round, and subtract 128 from U and V. |
1062 #define BBJ (UBJ * 128 + YGBJ) | 1094 #define BBJ (UBJ * 128 + YGBJ) |
1063 #define BGJ (UGJ * 128 + VGJ * 128 + YGBJ) | 1095 #define BGJ (UGJ * 128 + VGJ * 128 + YGBJ) |
1064 #define BRJ (VRJ * 128 + YGBJ) | 1096 #define BRJ (VRJ * 128 + YGBJ) |
| 1097 |
| 1098 // JPEG constants for YUV to RGB. |
| 1099 YuvConstants SIMD_ALIGNED(kYuvJConstants) = { |
| 1100 { UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, |
| 1101 UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0, UBJ, 0 }, |
| 1102 { UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, |
| 1103 UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, |
| 1104 UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, |
| 1105 UGJ, VGJ, UGJ, VGJ, UGJ, VGJ, UGJ, VGJ }, |
| 1106 { 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, |
| 1107 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ, 0, VRJ }, |
| 1108 { BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, |
| 1109 BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ, BBJ }, |
| 1110 { BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, |
| 1111 BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ, BGJ }, |
| 1112 { BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, |
| 1113 BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ, BRJ }, |
| 1114 { YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, |
| 1115 YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ, YGJ } |
| 1116 }; |
| 1117 |
| 1118 // JPEG constants for YUV to RGB. |
| 1119 YuvConstantsNEON SIMD_ALIGNED(kYuvJConstantsNEON) = { |
| 1120 { -UBJ, -UBJ, -UBJ, -UBJ, -VRJ, -VRJ, -VRJ, -VRJ, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 1121 { UGJ, UGJ, UGJ, UGJ, VGJ, VGJ, VGJ, VGJ, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 1122 { BBJ, BGJ, BRJ, 0, 0, 0, 0, 0 }, |
| 1123 { 0x0101 * YGJ, 0, 0, 0 } |
| 1124 }; |
1065 | 1125 |
1066 // C reference code that mimics the YUV assembly. | 1126 // C reference code that mimics the YUV assembly. |
1067 static __inline void YuvJPixel(uint8 y, uint8 u, uint8 v, | 1127 static __inline void YuvJPixel(uint8 y, uint8 u, uint8 v, |
1068 uint8* b, uint8* g, uint8* r) { | 1128 uint8* b, uint8* g, uint8* r) { |
1069 uint32 y1 = (uint32)(y * 0x0101 * YGJ) >> 16; | 1129 uint32 y1 = (uint32)(y * 0x0101 * YGJ) >> 16; |
1070 *b = Clamp((int32)(-(u * UBJ) + y1 + BBJ) >> 6); | 1130 *b = Clamp((int32)(-(u * UBJ) + y1 + BBJ) >> 6); |
1071 *g = Clamp((int32)(-(v * VGJ + u * UGJ) + y1 + BGJ) >> 6); | 1131 *g = Clamp((int32)(-(v * VGJ + u * UGJ) + y1 + BGJ) >> 6); |
1072 *r = Clamp((int32)(-(v * VRJ) + y1 + BRJ) >> 6); | 1132 *r = Clamp((int32)(-(v * VRJ) + y1 + BRJ) >> 6); |
1073 } | 1133 } |
1074 | 1134 |
1075 #undef YGJ | 1135 #undef YGJ |
1076 #undef YGBJ | 1136 #undef YGBJ |
1077 #undef UBJ | 1137 #undef UBJ |
1078 #undef UGJ | 1138 #undef UGJ |
1079 #undef VGJ | 1139 #undef VGJ |
1080 #undef VRJ | 1140 #undef VRJ |
1081 #undef BBJ | 1141 #undef BBJ |
1082 #undef BGJ | 1142 #undef BGJ |
1083 #undef BRJ | 1143 #undef BRJ |
1084 | 1144 |
1085 // BT.709 YUV to RGB reference | 1145 // BT.709 YUV to RGB reference |
1086 // * R = Y - V * -1.28033 | 1146 // * R = Y - V * -1.28033 |
1087 // * G = Y - U * 0.21482 - V * 0.38059 | 1147 // * G = Y - U * 0.21482 - V * 0.38059 |
1088 // * B = Y - U * -2.12798 | 1148 // * B = Y - U * -2.12798 |
1089 | 1149 |
1090 // Y contribution to R,G,B. Scale and bias. | 1150 // Y contribution to R,G,B. Scale and bias. |
1091 // TODO(fbarchard): Consider moving constants into a common header. | |
1092 #define YGH 16320 /* round(1.000 * 64 * 256 * 256 / 257) */ | 1151 #define YGH 16320 /* round(1.000 * 64 * 256 * 256 / 257) */ |
1093 #define YGBH 32 /* 64 / 2 */ | 1152 #define YGBH 32 /* 64 / 2 */ |
1094 | 1153 |
1095 // U and V contributions to R,G,B. | 1154 // U and V contributions to R,G,B. |
1096 #define UBH -128 /* max(-128, round(-2.12798 * 64)) */ | 1155 #define UBH -128 /* max(-128, round(-2.12798 * 64)) */ |
1097 #define UGH 14 /* round(0.21482 * 64) */ | 1156 #define UGH 14 /* round(0.21482 * 64) */ |
1098 #define VGH 24 /* round(0.38059 * 64) */ | 1157 #define VGH 24 /* round(0.38059 * 64) */ |
1099 #define VRH -82 /* round(-1.28033 * 64) */ | 1158 #define VRH -82 /* round(-1.28033 * 64) */ |
1100 | 1159 |
1101 // Bias values to round, and subtract 128 from U and V. | 1160 // Bias values to round, and subtract 128 from U and V. |
1102 #define BBH (UBH * 128 + YGBH) | 1161 #define BBH (UBH * 128 + YGBH) |
1103 #define BGH (UGH * 128 + VGH * 128 + YGBH) | 1162 #define BGH (UGH * 128 + VGH * 128 + YGBH) |
1104 #define BRH (VRH * 128 + YGBH) | 1163 #define BRH (VRH * 128 + YGBH) |
1105 | 1164 |
| 1165 // BT.709 constants for YUV to RGB. |
| 1166 YuvConstants SIMD_ALIGNED(kYuvHConstants) = { |
| 1167 { UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, |
| 1168 UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0, UBH, 0 }, |
| 1169 { UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH, |
| 1170 UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH, |
| 1171 UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH, |
| 1172 UGH, VGH, UGH, VGH, UGH, VGH, UGH, VGH }, |
| 1173 { 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, |
| 1174 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH, 0, VRH }, |
| 1175 { BBH, BBH, BBH, BBH, BBH, BBH, BBH, BBH, |
| 1176 BBH, BBH, BBH, BBH, BBH, BBH, BBH, BBH }, |
| 1177 { BGH, BGH, BGH, BGH, BGH, BGH, BGH, BGH, |
| 1178 BGH, BGH, BGH, BGH, BGH, BGH, BGH, BGH }, |
| 1179 { BRH, BRH, BRH, BRH, BRH, BRH, BRH, BRH, |
| 1180 BRH, BRH, BRH, BRH, BRH, BRH, BRH, BRH }, |
| 1181 { YGH, YGH, YGH, YGH, YGH, YGH, YGH, YGH, |
| 1182 YGH, YGH, YGH, YGH, YGH, YGH, YGH, YGH } |
| 1183 }; |
| 1184 |
| 1185 // BT.709 constants for YUV to RGB. |
| 1186 YuvConstantsNEON SIMD_ALIGNED(kYuvHConstantsNEON) = { |
| 1187 { -UBH, -UBH, -UBH, -UBH, -VRH, -VRH, -VRH, -VRH, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 1188 { UGH, UGH, UGH, UGH, VGH, VGH, VGH, VGH, 0, 0, 0, 0, 0, 0, 0, 0 }, |
| 1189 { BBH, BGH, BRH, 0, 0, 0, 0, 0 }, |
| 1190 { 0x0101 * YGH, 0, 0, 0 } |
| 1191 }; |
| 1192 |
1106 // C reference code that mimics the YUV assembly. | 1193 // C reference code that mimics the YUV assembly. |
1107 static __inline void YuvHPixel(uint8 y, uint8 u, uint8 v, | 1194 static __inline void YuvHPixel(uint8 y, uint8 u, uint8 v, |
1108 uint8* b, uint8* g, uint8* r) { | 1195 uint8* b, uint8* g, uint8* r) { |
1109 uint32 y1 = (uint32)(y * 0x0101 * YGH) >> 16; | 1196 uint32 y1 = (uint32)(y * 0x0101 * YGH) >> 16; |
1110 *b = Clamp((int32)(-(u * UBH) + y1 + BBH) >> 6); | 1197 *b = Clamp((int32)(-(u * UBH) + y1 + BBH) >> 6); |
1111 *g = Clamp((int32)(-(v * VGH + u * UGH) + y1 + BGH) >> 6); | 1198 *g = Clamp((int32)(-(v * VGH + u * UGH) + y1 + BGH) >> 6); |
1112 *r = Clamp((int32)(-(v * VRH) + y1 + BRH) >> 6); | 1199 *r = Clamp((int32)(-(v * VRH) + y1 + BRH) >> 6); |
1113 } | 1200 } |
1114 | 1201 |
1115 #undef YGH | 1202 #undef YGH |
(...skipping 1191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2307 src_v += 1; | 2394 src_v += 1; |
2308 } | 2395 } |
2309 if (width & 1) { | 2396 if (width & 1) { |
2310 dst_frame[0] = src_u[0]; | 2397 dst_frame[0] = src_u[0]; |
2311 dst_frame[1] = src_y[0]; | 2398 dst_frame[1] = src_y[0]; |
2312 dst_frame[2] = src_v[0]; | 2399 dst_frame[2] = src_v[0]; |
2313 dst_frame[3] = 0; | 2400 dst_frame[3] = 0; |
2314 } | 2401 } |
2315 } | 2402 } |
2316 | 2403 |
2317 extern struct YuvConstants kYuvConstants; | |
2318 extern struct YuvConstants kYuvJConstants; | |
2319 extern struct YuvConstants kYuvHConstants; | |
2320 extern struct YuvConstantsNEON kYuvConstantsNEON; | |
2321 extern struct YuvConstantsNEON kYuvJConstantsNEON; | |
2322 extern struct YuvConstantsNEON kYuvHConstantsNEON; | |
2323 | |
2324 #define ANYYUV(NAMEANY, ANY_SIMD, YUVCONSTANTS) \ | 2404 #define ANYYUV(NAMEANY, ANY_SIMD, YUVCONSTANTS) \ |
2325 void NAMEANY(const uint8* y_buf, \ | 2405 void NAMEANY(const uint8* y_buf, \ |
2326 const uint8* u_buf, \ | 2406 const uint8* u_buf, \ |
2327 const uint8* v_buf, \ | 2407 const uint8* v_buf, \ |
2328 uint8* dst_argb, \ | 2408 uint8* dst_argb, \ |
2329 int width) { \ | 2409 int width) { \ |
2330 ANY_SIMD(y_buf, u_buf, v_buf, dst_argb, &YUVCONSTANTS, width); \ | 2410 ANY_SIMD(y_buf, u_buf, v_buf, dst_argb, &YUVCONSTANTS, width); \ |
2331 } | 2411 } |
2332 | 2412 |
2333 #ifdef HAS_I422TOARGBMATRIXROW_NEON | 2413 #ifdef HAS_I422TOARGBMATRIXROW_NEON |
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2785 } | 2865 } |
2786 if (width & 1) { | 2866 if (width & 1) { |
2787 dst[3] = src[0]; | 2867 dst[3] = src[0]; |
2788 } | 2868 } |
2789 } | 2869 } |
2790 | 2870 |
2791 #ifdef __cplusplus | 2871 #ifdef __cplusplus |
2792 } // extern "C" | 2872 } // extern "C" |
2793 } // namespace libyuv | 2873 } // namespace libyuv |
2794 #endif | 2874 #endif |
OLD | NEW |