OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The LibYuv Project Authors. All rights reserved. | 2 * Copyright 2012 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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 } | 93 } |
94 #endif | 94 #endif |
95 #if defined(HAS_ARGBTOYROW_NEON) | 95 #if defined(HAS_ARGBTOYROW_NEON) |
96 if (TestCpuFlag(kCpuHasNEON)) { | 96 if (TestCpuFlag(kCpuHasNEON)) { |
97 ARGBToYRow = ARGBToYRow_Any_NEON; | 97 ARGBToYRow = ARGBToYRow_Any_NEON; |
98 if (IS_ALIGNED(width, 8)) { | 98 if (IS_ALIGNED(width, 8)) { |
99 ARGBToYRow = ARGBToYRow_NEON; | 99 ARGBToYRow = ARGBToYRow_NEON; |
100 } | 100 } |
101 } | 101 } |
102 #endif | 102 #endif |
| 103 #if defined(HAS_ARGBTOYROW_DSPR2) |
| 104 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 105 ARGBToYRow = ARGBToYRow_Any_DSPR2; |
| 106 if (IS_ALIGNED(width, 8)) { |
| 107 ARGBToYRow = ARGBToYRow_DSPR2; |
| 108 } |
| 109 } |
| 110 #endif |
103 #if defined(HAS_ARGBTOYROW_MSA) | 111 #if defined(HAS_ARGBTOYROW_MSA) |
104 if (TestCpuFlag(kCpuHasMSA)) { | 112 if (TestCpuFlag(kCpuHasMSA)) { |
105 ARGBToYRow = ARGBToYRow_Any_MSA; | 113 ARGBToYRow = ARGBToYRow_Any_MSA; |
106 if (IS_ALIGNED(width, 16)) { | 114 if (IS_ALIGNED(width, 16)) { |
107 ARGBToYRow = ARGBToYRow_MSA; | 115 ARGBToYRow = ARGBToYRow_MSA; |
108 } | 116 } |
109 } | 117 } |
110 #endif | 118 #endif |
111 | 119 |
112 for (y = 0; y < height; ++y) { | 120 for (y = 0; y < height; ++y) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 } | 190 } |
183 #endif | 191 #endif |
184 #if defined(HAS_ARGBTOUVROW_NEON) | 192 #if defined(HAS_ARGBTOUVROW_NEON) |
185 if (TestCpuFlag(kCpuHasNEON)) { | 193 if (TestCpuFlag(kCpuHasNEON)) { |
186 ARGBToUVRow = ARGBToUVRow_Any_NEON; | 194 ARGBToUVRow = ARGBToUVRow_Any_NEON; |
187 if (IS_ALIGNED(width, 16)) { | 195 if (IS_ALIGNED(width, 16)) { |
188 ARGBToUVRow = ARGBToUVRow_NEON; | 196 ARGBToUVRow = ARGBToUVRow_NEON; |
189 } | 197 } |
190 } | 198 } |
191 #endif | 199 #endif |
| 200 #if defined(HAS_ARGBTOYROW_DSPR2) |
| 201 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 202 ARGBToYRow = ARGBToYRow_Any_DSPR2; |
| 203 if (IS_ALIGNED(width, 8)) { |
| 204 ARGBToYRow = ARGBToYRow_DSPR2; |
| 205 } |
| 206 } |
| 207 #endif |
| 208 #if defined(HAS_ARGBTOUVROW_DSPR2) |
| 209 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 210 ARGBToUVRow = ARGBToUVRow_Any_DSPR2; |
| 211 if (IS_ALIGNED(width, 16)) { |
| 212 ARGBToUVRow = ARGBToUVRow_DSPR2; |
| 213 } |
| 214 } |
| 215 #endif |
| 216 |
192 #if defined(HAS_ARGBTOYROW_MSA) | 217 #if defined(HAS_ARGBTOYROW_MSA) |
193 if (TestCpuFlag(kCpuHasMSA)) { | 218 if (TestCpuFlag(kCpuHasMSA)) { |
194 ARGBToYRow = ARGBToYRow_Any_MSA; | 219 ARGBToYRow = ARGBToYRow_Any_MSA; |
195 if (IS_ALIGNED(width, 16)) { | 220 if (IS_ALIGNED(width, 16)) { |
196 ARGBToYRow = ARGBToYRow_MSA; | 221 ARGBToYRow = ARGBToYRow_MSA; |
197 } | 222 } |
198 } | 223 } |
199 #endif | 224 #endif |
200 #if defined(HAS_ARGBTOUVROW_MSA) | 225 #if defined(HAS_ARGBTOUVROW_MSA) |
201 if (TestCpuFlag(kCpuHasMSA)) { | 226 if (TestCpuFlag(kCpuHasMSA)) { |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 } | 337 } |
313 #endif | 338 #endif |
314 #if defined(HAS_MERGEUVROW_NEON) | 339 #if defined(HAS_MERGEUVROW_NEON) |
315 if (TestCpuFlag(kCpuHasNEON)) { | 340 if (TestCpuFlag(kCpuHasNEON)) { |
316 MergeUVRow_ = MergeUVRow_Any_NEON; | 341 MergeUVRow_ = MergeUVRow_Any_NEON; |
317 if (IS_ALIGNED(halfwidth, 16)) { | 342 if (IS_ALIGNED(halfwidth, 16)) { |
318 MergeUVRow_ = MergeUVRow_NEON; | 343 MergeUVRow_ = MergeUVRow_NEON; |
319 } | 344 } |
320 } | 345 } |
321 #endif | 346 #endif |
| 347 #if defined(HAS_ARGBTOYROW_DSPR2) |
| 348 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 349 ARGBToYRow = ARGBToYRow_Any_DSPR2; |
| 350 if (IS_ALIGNED(width, 8)) { |
| 351 ARGBToYRow = ARGBToYRow_DSPR2; |
| 352 } |
| 353 } |
| 354 #endif |
| 355 #if defined(HAS_ARGBTOUVROW_DSPR2) |
| 356 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 357 ARGBToUVRow = ARGBToUVRow_Any_DSPR2; |
| 358 if (IS_ALIGNED(width, 16)) { |
| 359 ARGBToUVRow = ARGBToUVRow_DSPR2; |
| 360 } |
| 361 } |
| 362 #endif |
322 { | 363 { |
323 // Allocate a rows of uv. | 364 // Allocate a rows of uv. |
324 align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2); | 365 align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2); |
325 uint8* row_v = row_u + ((halfwidth + 31) & ~31); | 366 uint8* row_v = row_u + ((halfwidth + 31) & ~31); |
326 | 367 |
327 for (y = 0; y < height - 1; y += 2) { | 368 for (y = 0; y < height - 1; y += 2) { |
328 ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width); | 369 ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width); |
329 MergeUVRow_(row_u, row_v, dst_uv, halfwidth); | 370 MergeUVRow_(row_u, row_v, dst_uv, halfwidth); |
330 ARGBToYRow(src_argb, dst_y, width); | 371 ARGBToYRow(src_argb, dst_y, width); |
331 ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width); | 372 ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 } | 480 } |
440 #endif | 481 #endif |
441 #if defined(HAS_MERGEUVROW_NEON) | 482 #if defined(HAS_MERGEUVROW_NEON) |
442 if (TestCpuFlag(kCpuHasNEON)) { | 483 if (TestCpuFlag(kCpuHasNEON)) { |
443 MergeUVRow_ = MergeUVRow_Any_NEON; | 484 MergeUVRow_ = MergeUVRow_Any_NEON; |
444 if (IS_ALIGNED(halfwidth, 16)) { | 485 if (IS_ALIGNED(halfwidth, 16)) { |
445 MergeUVRow_ = MergeUVRow_NEON; | 486 MergeUVRow_ = MergeUVRow_NEON; |
446 } | 487 } |
447 } | 488 } |
448 #endif | 489 #endif |
| 490 #if defined(HAS_ARGBTOYROW_DSPR2) |
| 491 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 492 ARGBToYRow = ARGBToYRow_Any_DSPR2; |
| 493 if (IS_ALIGNED(width, 8)) { |
| 494 ARGBToYRow = ARGBToYRow_DSPR2; |
| 495 } |
| 496 } |
| 497 #endif |
| 498 #if defined(HAS_ARGBTOUVROW_DSPR2) |
| 499 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 500 ARGBToUVRow = ARGBToUVRow_Any_DSPR2; |
| 501 if (IS_ALIGNED(width, 16)) { |
| 502 ARGBToUVRow = ARGBToUVRow_DSPR2; |
| 503 } |
| 504 } |
| 505 #endif |
449 { | 506 { |
450 // Allocate a rows of uv. | 507 // Allocate a rows of uv. |
451 align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2); | 508 align_buffer_64(row_u, ((halfwidth + 31) & ~31) * 2); |
452 uint8* row_v = row_u + ((halfwidth + 31) & ~31); | 509 uint8* row_v = row_u + ((halfwidth + 31) & ~31); |
453 | 510 |
454 for (y = 0; y < height - 1; y += 2) { | 511 for (y = 0; y < height - 1; y += 2) { |
455 ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width); | 512 ARGBToUVRow(src_argb, src_stride_argb, row_u, row_v, width); |
456 MergeUVRow_(row_v, row_u, dst_uv, halfwidth); | 513 MergeUVRow_(row_v, row_u, dst_uv, halfwidth); |
457 ARGBToYRow(src_argb, dst_y, width); | 514 ARGBToYRow(src_argb, dst_y, width); |
458 ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width); | 515 ARGBToYRow(src_argb + src_stride_argb, dst_y + dst_stride_y, width); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 } | 620 } |
564 #endif | 621 #endif |
565 #if defined(HAS_I422TOYUY2ROW_NEON) | 622 #if defined(HAS_I422TOYUY2ROW_NEON) |
566 if (TestCpuFlag(kCpuHasNEON)) { | 623 if (TestCpuFlag(kCpuHasNEON)) { |
567 I422ToYUY2Row = I422ToYUY2Row_Any_NEON; | 624 I422ToYUY2Row = I422ToYUY2Row_Any_NEON; |
568 if (IS_ALIGNED(width, 16)) { | 625 if (IS_ALIGNED(width, 16)) { |
569 I422ToYUY2Row = I422ToYUY2Row_NEON; | 626 I422ToYUY2Row = I422ToYUY2Row_NEON; |
570 } | 627 } |
571 } | 628 } |
572 #endif | 629 #endif |
| 630 #if defined(HAS_ARGBTOYROW_DSPR2) |
| 631 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 632 ARGBToYRow = ARGBToYRow_Any_DSPR2; |
| 633 if (IS_ALIGNED(width, 8)) { |
| 634 ARGBToYRow = ARGBToYRow_DSPR2; |
| 635 } |
| 636 } |
| 637 #endif |
| 638 #if defined(HAS_ARGBTOUVROW_DSPR2) |
| 639 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 640 ARGBToUVRow = ARGBToUVRow_Any_DSPR2; |
| 641 if (IS_ALIGNED(width, 16)) { |
| 642 ARGBToUVRow = ARGBToUVRow_DSPR2; |
| 643 } |
| 644 } |
| 645 #endif |
573 #if defined(HAS_I422TOYUY2ROW_MSA) | 646 #if defined(HAS_I422TOYUY2ROW_MSA) |
574 if (TestCpuFlag(kCpuHasMSA)) { | 647 if (TestCpuFlag(kCpuHasMSA)) { |
575 I422ToYUY2Row = I422ToYUY2Row_Any_MSA; | 648 I422ToYUY2Row = I422ToYUY2Row_Any_MSA; |
576 if (IS_ALIGNED(width, 32)) { | 649 if (IS_ALIGNED(width, 32)) { |
577 I422ToYUY2Row = I422ToYUY2Row_MSA; | 650 I422ToYUY2Row = I422ToYUY2Row_MSA; |
578 } | 651 } |
579 } | 652 } |
580 #endif | 653 #endif |
581 | 654 |
582 { | 655 { |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
691 } | 764 } |
692 #endif | 765 #endif |
693 #if defined(HAS_I422TOUYVYROW_NEON) | 766 #if defined(HAS_I422TOUYVYROW_NEON) |
694 if (TestCpuFlag(kCpuHasNEON)) { | 767 if (TestCpuFlag(kCpuHasNEON)) { |
695 I422ToUYVYRow = I422ToUYVYRow_Any_NEON; | 768 I422ToUYVYRow = I422ToUYVYRow_Any_NEON; |
696 if (IS_ALIGNED(width, 16)) { | 769 if (IS_ALIGNED(width, 16)) { |
697 I422ToUYVYRow = I422ToUYVYRow_NEON; | 770 I422ToUYVYRow = I422ToUYVYRow_NEON; |
698 } | 771 } |
699 } | 772 } |
700 #endif | 773 #endif |
| 774 #if defined(HAS_ARGBTOYROW_DSPR2) |
| 775 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 776 ARGBToYRow = ARGBToYRow_Any_DSPR2; |
| 777 if (IS_ALIGNED(width, 8)) { |
| 778 ARGBToYRow = ARGBToYRow_DSPR2; |
| 779 } |
| 780 } |
| 781 #endif |
| 782 #if defined(HAS_ARGBTOUVROW_DSPR2) |
| 783 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 784 ARGBToUVRow = ARGBToUVRow_Any_DSPR2; |
| 785 if (IS_ALIGNED(width, 16)) { |
| 786 ARGBToUVRow = ARGBToUVRow_DSPR2; |
| 787 } |
| 788 } |
| 789 #endif |
701 #if defined(HAS_I422TOUYVYROW_MSA) | 790 #if defined(HAS_I422TOUYVYROW_MSA) |
702 if (TestCpuFlag(kCpuHasMSA)) { | 791 if (TestCpuFlag(kCpuHasMSA)) { |
703 I422ToUYVYRow = I422ToUYVYRow_Any_MSA; | 792 I422ToUYVYRow = I422ToUYVYRow_Any_MSA; |
704 if (IS_ALIGNED(width, 32)) { | 793 if (IS_ALIGNED(width, 32)) { |
705 I422ToUYVYRow = I422ToUYVYRow_MSA; | 794 I422ToUYVYRow = I422ToUYVYRow_MSA; |
706 } | 795 } |
707 } | 796 } |
708 #endif | 797 #endif |
709 | 798 |
710 { | 799 { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 } | 857 } |
769 #endif | 858 #endif |
770 #if defined(HAS_ARGBTOYROW_NEON) | 859 #if defined(HAS_ARGBTOYROW_NEON) |
771 if (TestCpuFlag(kCpuHasNEON)) { | 860 if (TestCpuFlag(kCpuHasNEON)) { |
772 ARGBToYRow = ARGBToYRow_Any_NEON; | 861 ARGBToYRow = ARGBToYRow_Any_NEON; |
773 if (IS_ALIGNED(width, 8)) { | 862 if (IS_ALIGNED(width, 8)) { |
774 ARGBToYRow = ARGBToYRow_NEON; | 863 ARGBToYRow = ARGBToYRow_NEON; |
775 } | 864 } |
776 } | 865 } |
777 #endif | 866 #endif |
| 867 #if defined(HAS_ARGBTOYROW_DSPR2) |
| 868 if (TestCpuFlag(kCpuHasDSPR2)) { |
| 869 ARGBToYRow = ARGBToYRow_Any_DSPR2; |
| 870 if (IS_ALIGNED(width, 8)) { |
| 871 ARGBToYRow = ARGBToYRow_DSPR2; |
| 872 } |
| 873 } |
| 874 #endif |
778 #if defined(HAS_ARGBTOYROW_MSA) | 875 #if defined(HAS_ARGBTOYROW_MSA) |
779 if (TestCpuFlag(kCpuHasMSA)) { | 876 if (TestCpuFlag(kCpuHasMSA)) { |
780 ARGBToYRow = ARGBToYRow_Any_MSA; | 877 ARGBToYRow = ARGBToYRow_Any_MSA; |
781 if (IS_ALIGNED(width, 16)) { | 878 if (IS_ALIGNED(width, 16)) { |
782 ARGBToYRow = ARGBToYRow_MSA; | 879 ARGBToYRow = ARGBToYRow_MSA; |
783 } | 880 } |
784 } | 881 } |
785 #endif | 882 #endif |
786 | 883 |
787 for (y = 0; y < height; ++y) { | 884 for (y = 0; y < height; ++y) { |
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1406 src_argb += src_stride_argb; | 1503 src_argb += src_stride_argb; |
1407 dst_yj += dst_stride_yj; | 1504 dst_yj += dst_stride_yj; |
1408 } | 1505 } |
1409 return 0; | 1506 return 0; |
1410 } | 1507 } |
1411 | 1508 |
1412 #ifdef __cplusplus | 1509 #ifdef __cplusplus |
1413 } // extern "C" | 1510 } // extern "C" |
1414 } // namespace libyuv | 1511 } // namespace libyuv |
1415 #endif | 1512 #endif |
OLD | NEW |