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

Side by Side Diff: source/convert_from_argb.cc

Issue 2626123003: Libyuv MIPS DSPR2 optimizations. (Closed)
Patch Set: Created 3 years, 11 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
« no previous file with comments | « source/convert_from.cc ('k') | source/row_any.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « source/convert_from.cc ('k') | source/row_any.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698