| 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 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1142 src_y += 2; | 1142 src_y += 2; |
| 1143 src_u += 2; | 1143 src_u += 2; |
| 1144 src_v += 2; | 1144 src_v += 2; |
| 1145 rgb_buf += 8; // Advance 2 pixels. | 1145 rgb_buf += 8; // Advance 2 pixels. |
| 1146 } | 1146 } |
| 1147 if (width & 1) { | 1147 if (width & 1) { |
| 1148 YuvPixel(src_y[0], src_u[0], src_v[0], | 1148 YuvPixel(src_y[0], src_u[0], src_v[0], |
| 1149 rgb_buf + 0, rgb_buf + 1, rgb_buf + 2); | 1149 rgb_buf + 0, rgb_buf + 1, rgb_buf + 2); |
| 1150 } | 1150 } |
| 1151 } | 1151 } |
| 1152 |
| 1153 void I444ToABGRRow_C(const uint8* src_y, |
| 1154 const uint8* src_u, |
| 1155 const uint8* src_v, |
| 1156 uint8* rgb_buf, |
| 1157 int width) { |
| 1158 int x; |
| 1159 for (x = 0; x < width - 1; x += 2) { |
| 1160 uint8 u = (src_u[0] + src_u[1] + 1) >> 1; |
| 1161 uint8 v = (src_v[0] + src_v[1] + 1) >> 1; |
| 1162 YuvPixel(src_y[0], u, v, rgb_buf + 2, rgb_buf + 1, rgb_buf + 0); |
| 1163 rgb_buf[3] = 255; |
| 1164 YuvPixel(src_y[1], u, v, rgb_buf + 6, rgb_buf + 5, rgb_buf + 4); |
| 1165 rgb_buf[7] = 255; |
| 1166 src_y += 2; |
| 1167 src_u += 2; |
| 1168 src_v += 2; |
| 1169 rgb_buf += 8; // Advance 2 pixels. |
| 1170 } |
| 1171 if (width & 1) { |
| 1172 YuvPixel(src_y[0], src_u[0], src_v[0], |
| 1173 rgb_buf + 2, rgb_buf + 1, rgb_buf + 0); |
| 1174 } |
| 1175 } |
| 1152 #else | 1176 #else |
| 1153 void I444ToARGBRow_C(const uint8* src_y, | 1177 void I444ToARGBRow_C(const uint8* src_y, |
| 1154 const uint8* src_u, | 1178 const uint8* src_u, |
| 1155 const uint8* src_v, | 1179 const uint8* src_v, |
| 1156 uint8* rgb_buf, | 1180 uint8* rgb_buf, |
| 1157 int width) { | 1181 int width) { |
| 1158 int x; | 1182 int x; |
| 1159 for (x = 0; x < width; ++x) { | 1183 for (x = 0; x < width; ++x) { |
| 1160 YuvPixel(src_y[0], src_u[0], src_v[0], | 1184 YuvPixel(src_y[0], src_u[0], src_v[0], |
| 1161 rgb_buf + 0, rgb_buf + 1, rgb_buf + 2); | 1185 rgb_buf + 0, rgb_buf + 1, rgb_buf + 2); |
| 1162 rgb_buf[3] = 255; | 1186 rgb_buf[3] = 255; |
| 1163 src_y += 1; | 1187 src_y += 1; |
| 1164 src_u += 1; | 1188 src_u += 1; |
| 1165 src_v += 1; | 1189 src_v += 1; |
| 1166 rgb_buf += 4; // Advance 1 pixel. | 1190 rgb_buf += 4; // Advance 1 pixel. |
| 1167 } | 1191 } |
| 1168 } | 1192 } |
| 1193 |
| 1194 void I444ToABGRRow_C(const uint8* src_y, |
| 1195 const uint8* src_u, |
| 1196 const uint8* src_v, |
| 1197 uint8* rgb_buf, |
| 1198 int width) { |
| 1199 int x; |
| 1200 for (x = 0; x < width; ++x) { |
| 1201 YuvPixel(src_y[0], src_u[0], src_v[0], |
| 1202 rgb_buf + 2, rgb_buf + 1, rgb_buf + 0); |
| 1203 rgb_buf[3] = 255; |
| 1204 src_y += 1; |
| 1205 src_u += 1; |
| 1206 src_v += 1; |
| 1207 rgb_buf += 4; // Advance 1 pixel. |
| 1208 } |
| 1209 } |
| 1169 #endif | 1210 #endif |
| 1170 | 1211 |
| 1171 // Also used for 420 | 1212 // Also used for 420 |
| 1172 void I422ToARGBRow_C(const uint8* src_y, | 1213 void I422ToARGBRow_C(const uint8* src_y, |
| 1173 const uint8* src_u, | 1214 const uint8* src_u, |
| 1174 const uint8* src_v, | 1215 const uint8* src_v, |
| 1175 uint8* rgb_buf, | 1216 uint8* rgb_buf, |
| 1176 int width) { | 1217 int width) { |
| 1177 int x; | 1218 int x; |
| 1178 for (x = 0; x < width - 1; x += 2) { | 1219 for (x = 0; x < width - 1; x += 2) { |
| (...skipping 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2312 #ifdef HAS_I422TOABGRMATRIXROW_SSSE3 | 2353 #ifdef HAS_I422TOABGRMATRIXROW_SSSE3 |
| 2313 ANYYUV(I422ToABGRRow_SSSE3, I422ToABGRMatrixRow_SSSE3, kYuvConstants) | 2354 ANYYUV(I422ToABGRRow_SSSE3, I422ToABGRMatrixRow_SSSE3, kYuvConstants) |
| 2314 ANYYUV(J422ToABGRRow_SSSE3, I422ToABGRMatrixRow_SSSE3, kYuvJConstants) | 2355 ANYYUV(J422ToABGRRow_SSSE3, I422ToABGRMatrixRow_SSSE3, kYuvJConstants) |
| 2315 ANYYUV(H422ToABGRRow_SSSE3, I422ToABGRMatrixRow_SSSE3, kYuvHConstants) | 2356 ANYYUV(H422ToABGRRow_SSSE3, I422ToABGRMatrixRow_SSSE3, kYuvHConstants) |
| 2316 #endif | 2357 #endif |
| 2317 #ifdef HAS_I422TOABGRMATRIXROW_AVX2 | 2358 #ifdef HAS_I422TOABGRMATRIXROW_AVX2 |
| 2318 ANYYUV(I422ToABGRRow_AVX2, I422ToABGRMatrixRow_AVX2, kYuvConstants) | 2359 ANYYUV(I422ToABGRRow_AVX2, I422ToABGRMatrixRow_AVX2, kYuvConstants) |
| 2319 ANYYUV(J422ToABGRRow_AVX2, I422ToABGRMatrixRow_AVX2, kYuvJConstants) | 2360 ANYYUV(J422ToABGRRow_AVX2, I422ToABGRMatrixRow_AVX2, kYuvJConstants) |
| 2320 ANYYUV(H422ToABGRRow_AVX2, I422ToABGRMatrixRow_AVX2, kYuvHConstants) | 2361 ANYYUV(H422ToABGRRow_AVX2, I422ToABGRMatrixRow_AVX2, kYuvHConstants) |
| 2321 #endif | 2362 #endif |
| 2363 // TODO(fbarchard): Neon, J444, H444 versions. |
| 2364 #ifdef HAS_I444TOARGBMATRIXROW_SSSE3 |
| 2365 ANYYUV(I444ToARGBRow_SSSE3, I444ToARGBMatrixRow_SSSE3, kYuvConstants) |
| 2366 #endif |
| 2367 #ifdef HAS_I444TOARGBMATRIXROW_AVX2 |
| 2368 ANYYUV(I444ToARGBRow_AVX2, I444ToARGBMatrixRow_AVX2, kYuvConstants) |
| 2369 #endif |
| 2370 #ifdef HAS_I444TOABGRMATRIXROW_SSSE3 |
| 2371 ANYYUV(I444ToABGRRow_SSSE3, I444ToABGRMatrixRow_SSSE3, kYuvConstants) |
| 2372 #endif |
| 2373 #ifdef HAS_I444TOABGRMATRIXROW_AVX2 |
| 2374 ANYYUV(I444ToABGRRow_AVX2, I444ToABGRMatrixRow_AVX2, kYuvConstants) |
| 2375 #endif |
| 2322 | 2376 |
| 2323 // Maximum temporary width for wrappers to process at a time, in pixels. | 2377 // Maximum temporary width for wrappers to process at a time, in pixels. |
| 2324 #define MAXTWIDTH 2048 | 2378 #define MAXTWIDTH 2048 |
| 2325 | 2379 |
| 2326 #if !(defined(_MSC_VER) && defined(_M_IX86)) && \ | 2380 #if !(defined(_MSC_VER) && defined(_M_IX86)) && \ |
| 2327 defined(HAS_I422TORGB565ROW_SSSE3) | 2381 defined(HAS_I422TORGB565ROW_SSSE3) |
| 2328 // row_win.cc has asm version, but GCC uses 2 step wrapper. | 2382 // row_win.cc has asm version, but GCC uses 2 step wrapper. |
| 2329 void I422ToRGB565Row_SSSE3(const uint8* src_y, | 2383 void I422ToRGB565Row_SSSE3(const uint8* src_y, |
| 2330 const uint8* src_u, | 2384 const uint8* src_u, |
| 2331 const uint8* src_v, | 2385 const uint8* src_v, |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2731 } | 2785 } |
| 2732 if (width & 1) { | 2786 if (width & 1) { |
| 2733 dst[3] = src[0]; | 2787 dst[3] = src[0]; |
| 2734 } | 2788 } |
| 2735 } | 2789 } |
| 2736 | 2790 |
| 2737 #ifdef __cplusplus | 2791 #ifdef __cplusplus |
| 2738 } // extern "C" | 2792 } // extern "C" |
| 2739 } // namespace libyuv | 2793 } // namespace libyuv |
| 2740 #endif | 2794 #endif |
| OLD | NEW |