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

Side by Side Diff: source/planar_functions.cc

Issue 2636483002: Add MSA optimized NV12/21 To RGB row functions (Closed)
Patch Set: Incorporated review comments 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_argb.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 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 1425 matching lines...) Expand 10 before | Expand all | Expand 10 after
1436 } 1436 }
1437 #endif 1437 #endif
1438 #if defined(HAS_NV12TORGB565ROW_NEON) 1438 #if defined(HAS_NV12TORGB565ROW_NEON)
1439 if (TestCpuFlag(kCpuHasNEON)) { 1439 if (TestCpuFlag(kCpuHasNEON)) {
1440 NV12ToRGB565Row = NV12ToRGB565Row_Any_NEON; 1440 NV12ToRGB565Row = NV12ToRGB565Row_Any_NEON;
1441 if (IS_ALIGNED(width, 8)) { 1441 if (IS_ALIGNED(width, 8)) {
1442 NV12ToRGB565Row = NV12ToRGB565Row_NEON; 1442 NV12ToRGB565Row = NV12ToRGB565Row_NEON;
1443 } 1443 }
1444 } 1444 }
1445 #endif 1445 #endif
1446 #if defined(HAS_NV12TORGB565ROW_MSA)
1447 if (TestCpuFlag(kCpuHasMSA)) {
1448 NV12ToRGB565Row = NV12ToRGB565Row_Any_MSA;
1449 if (IS_ALIGNED(width, 8)) {
1450 NV12ToRGB565Row = NV12ToRGB565Row_MSA;
1451 }
1452 }
1453 #endif
1446 1454
1447 for (y = 0; y < height; ++y) { 1455 for (y = 0; y < height; ++y) {
1448 NV12ToRGB565Row(src_y, src_uv, dst_rgb565, &kYuvI601Constants, width); 1456 NV12ToRGB565Row(src_y, src_uv, dst_rgb565, &kYuvI601Constants, width);
1449 dst_rgb565 += dst_stride_rgb565; 1457 dst_rgb565 += dst_stride_rgb565;
1450 src_y += src_stride_y; 1458 src_y += src_stride_y;
1451 if (y & 1) { 1459 if (y & 1) {
1452 src_uv += src_stride_uv; 1460 src_uv += src_stride_uv;
1453 } 1461 }
1454 } 1462 }
1455 return 0; 1463 return 0;
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after
2644 } 2652 }
2645 #endif 2653 #endif
2646 #if defined(HAS_SOBELROW_NEON) 2654 #if defined(HAS_SOBELROW_NEON)
2647 if (TestCpuFlag(kCpuHasNEON)) { 2655 if (TestCpuFlag(kCpuHasNEON)) {
2648 SobelRow = SobelRow_Any_NEON; 2656 SobelRow = SobelRow_Any_NEON;
2649 if (IS_ALIGNED(width, 8)) { 2657 if (IS_ALIGNED(width, 8)) {
2650 SobelRow = SobelRow_NEON; 2658 SobelRow = SobelRow_NEON;
2651 } 2659 }
2652 } 2660 }
2653 #endif 2661 #endif
2662 #if defined(HAS_SOBELROW_MSA)
2663 if (TestCpuFlag(kCpuHasMSA)) {
2664 SobelRow = SobelRow_Any_MSA;
2665 if (IS_ALIGNED(width, 16)) {
2666 SobelRow = SobelRow_MSA;
2667 }
2668 }
2669 #endif
2654 return ARGBSobelize(src_argb, src_stride_argb, dst_argb, dst_stride_argb, 2670 return ARGBSobelize(src_argb, src_stride_argb, dst_argb, dst_stride_argb,
2655 width, height, SobelRow); 2671 width, height, SobelRow);
2656 } 2672 }
2657 2673
2658 // Sobel ARGB effect with planar output. 2674 // Sobel ARGB effect with planar output.
2659 LIBYUV_API 2675 LIBYUV_API
2660 int ARGBSobelToPlane(const uint8* src_argb, 2676 int ARGBSobelToPlane(const uint8* src_argb,
2661 int src_stride_argb, 2677 int src_stride_argb,
2662 uint8* dst_y, 2678 uint8* dst_y,
2663 int dst_stride_y, 2679 int dst_stride_y,
(...skipping 10 matching lines...) Expand all
2674 } 2690 }
2675 #endif 2691 #endif
2676 #if defined(HAS_SOBELTOPLANEROW_NEON) 2692 #if defined(HAS_SOBELTOPLANEROW_NEON)
2677 if (TestCpuFlag(kCpuHasNEON)) { 2693 if (TestCpuFlag(kCpuHasNEON)) {
2678 SobelToPlaneRow = SobelToPlaneRow_Any_NEON; 2694 SobelToPlaneRow = SobelToPlaneRow_Any_NEON;
2679 if (IS_ALIGNED(width, 16)) { 2695 if (IS_ALIGNED(width, 16)) {
2680 SobelToPlaneRow = SobelToPlaneRow_NEON; 2696 SobelToPlaneRow = SobelToPlaneRow_NEON;
2681 } 2697 }
2682 } 2698 }
2683 #endif 2699 #endif
2700 #if defined(HAS_SOBELTOPLANEROW_MSA)
2701 if (TestCpuFlag(kCpuHasMSA)) {
2702 SobelToPlaneRow = SobelToPlaneRow_Any_MSA;
2703 if (IS_ALIGNED(width, 32)) {
2704 SobelToPlaneRow = SobelToPlaneRow_MSA;
2705 }
2706 }
2707 #endif
2684 return ARGBSobelize(src_argb, src_stride_argb, dst_y, dst_stride_y, width, 2708 return ARGBSobelize(src_argb, src_stride_argb, dst_y, dst_stride_y, width,
2685 height, SobelToPlaneRow); 2709 height, SobelToPlaneRow);
2686 } 2710 }
2687 2711
2688 // SobelXY ARGB effect. 2712 // SobelXY ARGB effect.
2689 // Similar to Sobel, but also stores Sobel X in R and Sobel Y in B. G = Sobel. 2713 // Similar to Sobel, but also stores Sobel X in R and Sobel Y in B. G = Sobel.
2690 LIBYUV_API 2714 LIBYUV_API
2691 int ARGBSobelXY(const uint8* src_argb, 2715 int ARGBSobelXY(const uint8* src_argb,
2692 int src_stride_argb, 2716 int src_stride_argb,
2693 uint8* dst_argb, 2717 uint8* dst_argb,
(...skipping 11 matching lines...) Expand all
2705 } 2729 }
2706 #endif 2730 #endif
2707 #if defined(HAS_SOBELXYROW_NEON) 2731 #if defined(HAS_SOBELXYROW_NEON)
2708 if (TestCpuFlag(kCpuHasNEON)) { 2732 if (TestCpuFlag(kCpuHasNEON)) {
2709 SobelXYRow = SobelXYRow_Any_NEON; 2733 SobelXYRow = SobelXYRow_Any_NEON;
2710 if (IS_ALIGNED(width, 8)) { 2734 if (IS_ALIGNED(width, 8)) {
2711 SobelXYRow = SobelXYRow_NEON; 2735 SobelXYRow = SobelXYRow_NEON;
2712 } 2736 }
2713 } 2737 }
2714 #endif 2738 #endif
2739 #if defined(HAS_SOBELXYROW_MSA)
2740 if (TestCpuFlag(kCpuHasMSA)) {
2741 SobelXYRow = SobelXYRow_Any_MSA;
2742 if (IS_ALIGNED(width, 16)) {
2743 SobelXYRow = SobelXYRow_MSA;
2744 }
2745 }
2746 #endif
2715 return ARGBSobelize(src_argb, src_stride_argb, dst_argb, dst_stride_argb, 2747 return ARGBSobelize(src_argb, src_stride_argb, dst_argb, dst_stride_argb,
2716 width, height, SobelXYRow); 2748 width, height, SobelXYRow);
2717 } 2749 }
2718 2750
2719 // Apply a 4x4 polynomial to each ARGB pixel. 2751 // Apply a 4x4 polynomial to each ARGB pixel.
2720 LIBYUV_API 2752 LIBYUV_API
2721 int ARGBPolynomial(const uint8* src_argb, 2753 int ARGBPolynomial(const uint8* src_argb,
2722 int src_stride_argb, 2754 int src_stride_argb,
2723 uint8* dst_argb, 2755 uint8* dst_argb,
2724 int dst_stride_argb, 2756 int dst_stride_argb,
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
3232 } 3264 }
3233 free_aligned_buffer_64(rows); 3265 free_aligned_buffer_64(rows);
3234 } 3266 }
3235 return 0; 3267 return 0;
3236 } 3268 }
3237 3269
3238 #ifdef __cplusplus 3270 #ifdef __cplusplus
3239 } // extern "C" 3271 } // extern "C"
3240 } // namespace libyuv 3272 } // namespace libyuv
3241 #endif 3273 #endif
OLDNEW
« no previous file with comments | « source/convert_argb.cc ('k') | source/row_any.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698