Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(201)

Side by Side Diff: source/convert.cc

Issue 2421843002: Add MSA optimized ARGB4444ToI420 and ARGB4444ToARGB functions (Closed)
Patch Set: Incorporated review comments Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 } 525 }
526 #endif 526 #endif
527 #if defined(HAS_ARGBTOUVROW_NEON) 527 #if defined(HAS_ARGBTOUVROW_NEON)
528 if (TestCpuFlag(kCpuHasNEON)) { 528 if (TestCpuFlag(kCpuHasNEON)) {
529 ARGBToUVRow = ARGBToUVRow_Any_NEON; 529 ARGBToUVRow = ARGBToUVRow_Any_NEON;
530 if (IS_ALIGNED(width, 16)) { 530 if (IS_ALIGNED(width, 16)) {
531 ARGBToUVRow = ARGBToUVRow_NEON; 531 ARGBToUVRow = ARGBToUVRow_NEON;
532 } 532 }
533 } 533 }
534 #endif 534 #endif
535 #if defined(HAS_ARGBTOYROW_MSA)
536 if (TestCpuFlag(kCpuHasMSA)) {
537 ARGBToYRow = ARGBToYRow_Any_MSA;
538 if (IS_ALIGNED(width, 16)) {
539 ARGBToYRow = ARGBToYRow_MSA;
540 }
541 }
542 #endif
543 #if defined(HAS_ARGBTOUVROW_MSA)
544 if (TestCpuFlag(kCpuHasMSA)) {
545 ARGBToUVRow = ARGBToUVRow_Any_MSA;
546 if (IS_ALIGNED(width, 32)) {
547 ARGBToUVRow = ARGBToUVRow_MSA;
548 }
549 }
550 #endif
535 551
536 for (y = 0; y < height - 1; y += 2) { 552 for (y = 0; y < height - 1; y += 2) {
537 ARGBToUVRow(src_argb, src_stride_argb, dst_u, dst_v, width); 553 ARGBToUVRow(src_argb, src_stride_argb, dst_u, dst_v, width);
538 ARGBToYRow(src_argb, dst_y, width); 554 ARGBToYRow(src_argb, dst_y, width);
539 ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width); 555 ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width);
540 src_argb += src_stride_argb * 2; 556 src_argb += src_stride_argb * 2;
541 dst_y += dst_stride_y * 2; 557 dst_y += dst_stride_y * 2;
542 dst_u += dst_stride_u; 558 dst_u += dst_stride_u;
543 dst_v += dst_stride_v; 559 dst_v += dst_stride_v;
544 } 560 }
(...skipping 731 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 } 1292 }
1277 #endif 1293 #endif
1278 #if defined(HAS_ARGB4444TOARGBROW_AVX2) 1294 #if defined(HAS_ARGB4444TOARGBROW_AVX2)
1279 if (TestCpuFlag(kCpuHasAVX2)) { 1295 if (TestCpuFlag(kCpuHasAVX2)) {
1280 ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_AVX2; 1296 ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_AVX2;
1281 if (IS_ALIGNED(width, 16)) { 1297 if (IS_ALIGNED(width, 16)) {
1282 ARGB4444ToARGBRow = ARGB4444ToARGBRow_AVX2; 1298 ARGB4444ToARGBRow = ARGB4444ToARGBRow_AVX2;
1283 } 1299 }
1284 } 1300 }
1285 #endif 1301 #endif
1302 #if defined(HAS_ARGB4444TOARGBROW_MSA)
1303 if (TestCpuFlag(kCpuHasMSA)) {
1304 ARGB4444ToARGBRow = ARGB4444ToARGBRow_Any_MSA;
1305 if (IS_ALIGNED(width, 16)) {
1306 ARGB4444ToARGBRow = ARGB4444ToARGBRow_MSA;
1307 }
1308 }
1309 #endif
1286 #if defined(HAS_ARGBTOYROW_SSSE3) && defined(HAS_ARGBTOUVROW_SSSE3) 1310 #if defined(HAS_ARGBTOYROW_SSSE3) && defined(HAS_ARGBTOUVROW_SSSE3)
1287 if (TestCpuFlag(kCpuHasSSSE3)) { 1311 if (TestCpuFlag(kCpuHasSSSE3)) {
1288 ARGBToUVRow = ARGBToUVRow_Any_SSSE3; 1312 ARGBToUVRow = ARGBToUVRow_Any_SSSE3;
1289 ARGBToYRow = ARGBToYRow_Any_SSSE3; 1313 ARGBToYRow = ARGBToYRow_Any_SSSE3;
1290 if (IS_ALIGNED(width, 16)) { 1314 if (IS_ALIGNED(width, 16)) {
1291 ARGBToUVRow = ARGBToUVRow_SSSE3; 1315 ARGBToUVRow = ARGBToUVRow_SSSE3;
1292 ARGBToYRow = ARGBToYRow_SSSE3; 1316 ARGBToYRow = ARGBToYRow_SSSE3;
1293 } 1317 }
1294 } 1318 }
1295 #endif 1319 #endif
1296 #if defined(HAS_ARGBTOYROW_AVX2) && defined(HAS_ARGBTOUVROW_AVX2) 1320 #if defined(HAS_ARGBTOYROW_AVX2) && defined(HAS_ARGBTOUVROW_AVX2)
1297 if (TestCpuFlag(kCpuHasAVX2)) { 1321 if (TestCpuFlag(kCpuHasAVX2)) {
1298 ARGBToUVRow = ARGBToUVRow_Any_AVX2; 1322 ARGBToUVRow = ARGBToUVRow_Any_AVX2;
1299 ARGBToYRow = ARGBToYRow_Any_AVX2; 1323 ARGBToYRow = ARGBToYRow_Any_AVX2;
1300 if (IS_ALIGNED(width, 32)) { 1324 if (IS_ALIGNED(width, 32)) {
1301 ARGBToUVRow = ARGBToUVRow_AVX2; 1325 ARGBToUVRow = ARGBToUVRow_AVX2;
1302 ARGBToYRow = ARGBToYRow_AVX2; 1326 ARGBToYRow = ARGBToYRow_AVX2;
1303 } 1327 }
1304 } 1328 }
1305 #endif 1329 #endif
1330 #if defined(HAS_ARGBTOYROW_MSA)
1331 if (TestCpuFlag(kCpuHasMSA)) {
1332 ARGBToUVRow = ARGBToUVRow_Any_MSA;
1333 ARGBToYRow = ARGBToYRow_Any_MSA;
1334 if (IS_ALIGNED(width, 16)) {
1335 ARGBToYRow = ARGBToYRow_MSA;
1336 if (IS_ALIGNED(width, 32)) {
1337 ARGBToUVRow = ARGBToUVRow_MSA;
1338 }
1339 }
1340 }
1341 #endif
1306 { 1342 {
1307 // Allocate 2 rows of ARGB. 1343 // Allocate 2 rows of ARGB.
1308 const int kRowSize = (width * 4 + 31) & ~31; 1344 const int kRowSize = (width * 4 + 31) & ~31;
1309 align_buffer_64(row, kRowSize * 2); 1345 align_buffer_64(row, kRowSize * 2);
1310 #endif 1346 #endif
1311 1347
1312 for (y = 0; y < height - 1; y += 2) { 1348 for (y = 0; y < height - 1; y += 2) {
1313 #if defined(HAS_ARGB4444TOYROW_NEON) 1349 #if defined(HAS_ARGB4444TOYROW_NEON)
1314 ARGB4444ToUVRow(src_argb4444, src_stride_argb4444, dst_u, dst_v, width); 1350 ARGB4444ToUVRow(src_argb4444, src_stride_argb4444, dst_u, dst_v, width);
1315 ARGB4444ToYRow(src_argb4444, dst_y, width); 1351 ARGB4444ToYRow(src_argb4444, dst_y, width);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
1417 dst_u += dst_stride_u; 1453 dst_u += dst_stride_u;
1418 dst_v += dst_stride_v; 1454 dst_v += dst_stride_v;
1419 } 1455 }
1420 return 0; 1456 return 0;
1421 } 1457 }
1422 1458
1423 #ifdef __cplusplus 1459 #ifdef __cplusplus
1424 } // extern "C" 1460 } // extern "C"
1425 } // namespace libyuv 1461 } // namespace libyuv
1426 #endif 1462 #endif
OLDNEW
« no previous file with comments | « include/libyuv/row.h ('k') | source/convert_argb.cc » ('j') | source/row_msa.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698